# SDR Rover Link ## 1. Назначение проекта **SDR Rover Link** — учебно-исследовательский проект по разработке цифрового радиоканала для наземного робототехнического комплекса с использованием программно-определяемого радио — SDR, Software Defined Radio. Проект должен пройти полный путь от передачи простого текстового пакета до передачи телеметрии и изображений через реальный радиоканал. Основная задача — не только получить работающую систему, но и последовательно изучить все этапы цифровой радиосвязи: формирование данных, разбиение на пакеты, контроль целостности, исправление ошибок, цифровую модуляцию, формирование IQ-сигнала, передачу через SDR, приём, демодуляцию и восстановление исходных данных. --- ## 2. Целевой сценарий | Параметр | Требование | |---|---| | Дальность связи | до 10 км | | Скорость ровера | до 25 км/ч | | Прямая радиовидимость | может отсутствовать | | Рабочий диапазон | 200–250 МГц, см. Запись 018 журнала | | Основной тип данных | телеметрия, команды и изображения | | Формат изображения | JPEG | | Действие при потере связи | безопасная остановка ровера | Дальность 10 км без прямой видимости — целевое исследовательское требование, а не гарантированная характеристика первой версии. --- ## 3. Почему не используется обычное FPV-видео Типовые FPV-системы работают в диапазонах 2,4 и 5,8 ГГц. Для наземного робота это плохо: велики потери у поверхности земли, сильное затенение рельефом и растительностью, а главное — на таких частотах практически нет дифракции, поэтому за препятствием связь пропадает. В этом проекте вместо непрерывного видеопотока передаются отдельные сжатые изображения, что резко снижает требуемую скорость канала. --- ## 4. Текущее состояние **Выполнено:** лабораторные Lab001–Lab041. Пройден путь от структуры пакета до сеансов связи с защитой от пакетов предыдущего сеанса. Что реализовано и проверено: - пакетный протокол с CRC32, фрагментация и сборка изображений; - модуляция и демодуляция BPSK, формирующий фильтр, кадровая синхронизация, оценка и коррекция ухода несущей; - блочное исправление стираний над GF(256), перемежение, подбор параметров; - приоритетное обслуживание команд, телеметрии и видео; - двухступенчатая безопасная остановка, сторожевой таймер, постоянное аварийное намерение, безопасный сброс; - идентификаторы сеанса, безопасный запуск, отклонение пакетов предыдущего сеанса. **Что ещё не сделано:** передатчик ни разу не включался. Весь тракт проверен на моделях и на приёме, но не в эфире. **Ближайшая работа:** Lab042 — передача JPEG через кабельную петлю на одном PlutoSDR. Техническое задание: [docs/lab042_hardware_loopback_spec.md](docs/lab042_hardware_loopback_spec.md). Хронология решений и результатов: [PROJECT_LOG.md](PROJECT_LOG.md). --- ## 5. Оборудование | Позиция | Состояние | |---|---| | **Pluto+** — приёмопередатчик, чип AD9361, 70 МГц – 6 ГГц | есть | | RTL-SDR — приёмный донгл | есть | | Аттенюатор AT30S, 30 дБ, SMA | есть | | Кабели SMA, штыревые антенны | есть | | Усилитель мощности около 1 Вт | планируется после первых испытаний | | Raspberry Pi как бортовой вычислитель | планируется | Устройство подключается по USB и появляется в системе как сетевой адаптер с адресом `192.168.2.1`. **Проверять связь с Pluto командой `ping` бесполезно.** При активном VPN трафик уходит в туннель, и «успешный» отклик приходит даже от несуществующего адреса. Достоверна только успешная установка контекста `iio.Context("ip:192.168.2.1")`. --- ## 6. Установка окружения Расчётная часть работает на компьютере без SDR: ```bash python -m pip install -r requirements.txt ``` Для лабораторных, работающих с устройством, дополнительно: ```bash python -m pip install -r requirements-hardware.txt ``` Версии зафиксированы по проверенному окружению, Python 3.13. --- ## 7. Как запускать **Быстрые проверки ядра** — секунды, оборудование не нужно: ```bash python -m pytest tests/ -q ``` **Дешёвый шлюз** — синтаксис, импорт `protocol`, функциональные проверки лабораторных: ```bash python tools/quick_gate.py ``` **Лабораторный эксперимент** — минуты, пишет результаты в `data/processed/`: ```bash python -m experiments.lab041_session_restart_safety ``` --- ## 8. Структура репозитория ```text SDR_Rover ├── protocol/ реализация протокола и радиотракта ├── experiments/ лабораторные Lab001–Lab041 ├── tests/ быстрые автоматические проверки ├── tools/ вспомогательные программы и шлюз ├── docs/ технические задания и исследования ├── data/ исходные данные и результаты ├── rover/ пока пусто ├── ground_station/ пока пусто └── gnuradio/ пока пусто ``` ### `protocol` Ядро системы. Пакет с CRC32, фрагментация изображений, кадр канала, исправление стираний, приоритеты, аварийная логика, сеансы связи, примитивы BPSK-радиотракта. ### `experiments` Лабораторные работы. Это исследовательские программы: они моделируют канал, выполняют сотни повторов, строят CSV, графики и отчёты. **Быстрыми тестами они не являются.** При импорте создают каталоги и пишут файлы, поэтому импортировать их не следует — для повторного использования кода служит `protocol/`. ### `tests` Настоящие быстрые проверки `protocol/`. Выполняются за доли секунды, оборудования не требуют, запускаются через `pytest`. ### `rover`, `ground_station`, `gnuradio` Каталоги созданы под будущую прикладную часть и пока пусты. Бортовая программа ровера, программа наземной станции и схемы GNU Radio появятся после того, как радиоканал заработает в эфире. --- ## 9. Данные - `data/raw` — исходные данные. Крупные записи отсчётов и видео в репозиторий не помещаются, исходные изображения лабораторных хранятся. - `data/processed` — результаты лабораторных: CSV, отчёты и графики. **Ограничение воспроизводимости.** Исходное видео `data/raw/lab026_rover_source.mp4` (около 7,8 МБ) в репозитории не хранится. Без него Lab026 и Lab027 не запускаются, файл нужно получить отдельно. --- ## 10. Принципы разработки 1. Каждый новый термин сначала объясняется, затем используется. 2. Каждый этап завершается работающим результатом. 3. Радиоканал и пакетный протокол разрабатываются отдельно. 4. Код проверяется автоматическими тестами. 5. Все существенные решения фиксируются в журнале. 6. Сложность увеличивается постепенно. 7. Испытания по эфиру начинаются только после проверки через модель. 8. Передатчик сначала проверяется через аттенюатор или эквивалент нагрузки. 9. **Каждое число в отчёте должно вычисляться из измерений текущего запуска.** Перенесённые из других лабораторных величины сопровождаются указанием источника. Вписанные вручную результаты недопустимы. Девятое правило добавлено после аудита достоверности, см. Запись 017 журнала. --- ## 11. Автор Антон НИЯУ МИФИ 2026