# SDR Rover Link

## 1. Назначение проекта

**SDR Rover Link** — учебно-исследовательский проект по разработке цифрового радиоканала для наземного робототехнического комплекса с использованием программно-определяемого радио — SDR, Software Defined Radio.

Проект должен пройти полный путь от передачи простого текстового пакета до передачи телеметрии и отдельных JPEG-изображений через реальный радиоканал.

Основная задача проекта — не только получить работающую систему, но и последовательно изучить все этапы цифровой радиосвязи:

- формирование данных;
- разбиение данных на пакеты;
- контроль целостности;
- исправление ошибок;
- цифровую модуляцию;
- формирование IQ-сигнала;
- передачу через SDR;
- приём и демодуляцию;
- восстановление исходных данных.

---

## 2. Целевой сценарий

Разрабатываемая система предназначена для исследовательского наземного ровера.

Целевые требования:

| Параметр | Требование |
|---|---|
| Дальность связи | до 10 км |
| Скорость ровера | до 25 км/ч |
| Прямая радиовидимость | может отсутствовать |
| Рабочие частоты | ниже 350 МГц |
| Основной тип данных | телеметрия и отдельные изображения |
| Формат изображения | JPEG |
| Частота передачи изображений | отдельные кадры, не видеопоток |
| Действие при потере связи | безопасная остановка ровера |

Дальность 10 км без прямой видимости является целевым исследовательским требованием, а не гарантированной характеристикой первой версии системы.

---

## 3. Почему не используется обычное FPV-видео

Типовые FPV-системы работают преимущественно в диапазонах 2,4 и 5,8 ГГц.

Для наземного робота такие диапазоны имеют ряд ограничений:

- высокие потери при работе у поверхности земли;
- затенение рельефом, зданиями и растительностью;
- быстрое ухудшение изображения при слабом сигнале;
- высокая загруженность распространённых диапазонов;
- зависимость от постоянного широкополосного видеопотока.

В этом проекте вместо непрерывного видео предполагается передавать отдельные сжатые изображения.

Пример:

```text
Камера
  ↓
JPEG-изображение
  ↓
Разбиение на пакеты
  ↓
Передача через SDR
  ↓
Сборка изображения на наземной станции
```

Такой подход позволяет существенно снизить требуемую скорость радиоканала.

---

## 4. Текущее оборудование

### SDR-оборудование

- RTL-SDR — приёмник;
- ADALM-PlutoSDR — приёмопередатчик, ожидается поступление;
- HackRF One — может временно использоваться при необходимости.

### Вычислительное оборудование

- компьютер под управлением Windows;
- Raspberry Pi — планируется для установки на ровер;
- бортовой вычислитель ровера — будет выбран позднее.

### Программное обеспечение

- Python 3.12;
- Anaconda;
- Spyder;
- Git;
- GNU Radio — будет установлен на следующем этапе;
- libiio и драйверы PlutoSDR — будут установлены после получения устройства.

---

## 5. Предварительно рассматриваемые диапазоны

В рамках проекта рассматриваются:

- 27 МГц;
- 50 МГц;
- 144 МГц;
- другие разрешённые для лабораторных испытаний частоты ниже 350 МГц.

Конкретный диапазон будет выбран после анализа:

- доступной полосы;
- требований законодательства;
- размеров антенны;
- потерь распространения;
- уровня внешних помех;
- возможностей выходного радиочастотного тракта;
- допустимой мощности передачи.

Передача по эфиру должна выполняться только на разрешённых частотах и с соблюдением допустимой мощности. Первые опыты следует проводить через аттенюатор, эквивалент нагрузки или в экранированной лабораторной конфигурации.

---

## 6. Основные этапы проекта

### Этап 0. Подготовка среды

- создание репозитория;
- настройка Git;
- настройка Python и Spyder;
- подготовка структуры каталогов;
- ведение документации.

### Этап 1. Пакетный протокол

- структура пакета;
- типы сообщений;
- порядковый номер пакета;
- длина данных;
- CRC;
- кодирование и декодирование.

### Этап 2. Виртуальный канал

- передача пакетов между Python-программами;
- имитация потерь;
- имитация повреждения битов;
- измерение числа ошибочных пакетов.

### Этап 3. Передача файлов

- разбиение файла на фрагменты;
- нумерация фрагментов;
- подтверждение приёма;
- повторная передача;
- сборка исходного файла.

### Этап 4. Передача изображений

- загрузка JPEG;
- разбиение JPEG на пакеты;
- передача через виртуальный канал;
- восстановление изображения;
- обработка потерянных фрагментов.

### Этап 5. Физический уровень

- BPSK;
- QPSK;
- формирование символов;
- IQ-сэмплы;
- синхронизация;
- фильтрация;
- оценка BER и PER.

### Этап 6. PlutoSDR

- подключение устройства;
- передача несущей;
- передача тестовой последовательности;
- передача цифрового пакета;
- приём сигнала RTL-SDR или вторым SDR.

### Этап 7. Радиоканал передачи изображений

- передача JPEG через SDR;
- измерение времени доставки;
- испытания при различных уровнях сигнала;
- испытания при наличии помех;
- подбор скорости и модуляции.

### Этап 8. Полевые испытания

- испытания на малой мощности;
- испытания на малой дистанции;
- постепенное увеличение расстояния;
- испытания с ретранслятором;
- испытания на наземном ровере.

---

## 7. Структура репозитория

```text
SDR_Rover
│
├── README.md
├── docs
├── protocol
├── rover
├── ground_station
├── gnuradio
├── tests
└── tools
```

### `docs`

Документация, лабораторные работы, схемы и отчёты.

### `protocol`

Реализация пакетного протокола:

- структура пакета;
- CRC;
- кодирование;
- декодирование;
- типы сообщений.

### `rover`

Программы, которые будут работать на борту ровера:

- получение изображения;
- сжатие JPEG;
- передача телеметрии;
- формирование радиопакетов.

### `ground_station`

Программы наземной станции:

- приём пакетов;
- сборка изображений;
- отображение телеметрии;
- управление передачей.

### `gnuradio`

Схемы GNU Radio Companion:

- передатчик;
- приёмник;
- BPSK-модем;
- QPSK-модем;
- тестовые генераторы.

### `tests`

Автоматические и лабораторные тесты.

### `tools`

Вспомогательные программы:

- анализ пакетов;
- генераторы тестовых данных;
- построение графиков;
- анализ журналов.

---

## 8. Принципы разработки

В проекте применяются следующие правила:

1. Каждый новый термин сначала объясняется, затем используется.
2. Каждый этап должен завершаться работающим результатом.
3. Радиоканал и пакетный протокол разрабатываются отдельно.
4. Код проверяется автоматическими тестами.
5. Все существенные решения фиксируются в документации.
6. Сложность увеличивается постепенно.
7. Испытания по эфиру начинаются только после проверки через виртуальный канал.
8. Передатчик сначала проверяется через аттенюатор или эквивалент нагрузки.

---

## 9. Текущий статус

Выполнено:

- установлен Python;
- установлена Anaconda;
- выбран Spyder;
- установлен Git;
- создан локальный Git-репозиторий;
- создана базовая структура каталогов.

Следующая задача:

> Создать первый Python-модуль пакетного протокола и передать сообщение через виртуальный канал без SDR-оборудования.

---

## 10. Ближайший контрольный результат

Первая рабочая версия должна выполнять следующий цикл:

```text
Текстовое сообщение
        ↓
Преобразование в байты
        ↓
Формирование пакета
        ↓
Добавление CRC
        ↓
Имитация радиоканала
        ↓
Проверка CRC
        ↓
Восстановление сообщения
```

Первое тестовое сообщение:

```text
HELLO SDR
```

---

## 11. Автор

Антон

НИЯУ МИФИ

2026