# Инженерный журнал SDR Rover Link

## Назначение журнала

Этот файл содержит хронологию разработки проекта SDR Rover Link.

В журнале фиксируются:

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

Записи не следует удалять. Если решение изменилось, необходимо добавить новую запись и объяснить причину изменения.

---

# Запись 001

## Дата

10 июля 2026 года

## Тема

Создание структуры проекта и локального Git-репозитория.

## Выполнено

1. Проверена установленная версия Git:

```text
git version 2.51.1.windows.1
```

---

# Запись 002

## Дата

27 июля 2026 года

## Тема

Завершение Lab028: пакетирование синхронного BASE + ROI.

## Выполнено

- Реализован фиксированный бинарный заголовок размером 32 байта.
- Добавлены packet CRC32 для заголовка и payload и object CRC32 для полного JPEG.
- Исследованы размеры payload 64, 128, 256, 512 и 1024 байта.
- Размер payload 512 байт принят как рабочий кандидат.
- Окончательный выбор размера пакета перенесён в Lab029.

---

# Запись 003

## Дата

27 июля 2026 года

## Тема

Завершение Lab029: моделирование потерь и ошибок видеопакетов.

## Выполнено

- Исследованы независимые потери пакетов и независимые битовые ошибки.
- Проверены короткие, средние и длинные серии потерь по модели Gilbert–Elliott.
- Выполнено сравнение payload 256, 512 и 1024 байта.
- Подтверждены packet CRC32, изоляция соседних кадров и атомарная сборка BASE + ROI.
- Зафиксировано ограничение пакетной временной шкалы Lab029.
- Сравнение помех одинаковой физической длительности перенесено в Lab029B.

---

# Запись 004

## Дата

27 июля 2026 года

## Тема

Завершение Lab029B: временная модель серийных потерь.

## Выполнено

- Помехи смоделированы на непрерывной временной шкале.
- Контрольная скорость передачи установлена равной 300 кбит/с.
- Исследованы средние длительности Bad 10, 50, 200 и 1000 мс.
- Payload 512 байт выбран для дальнейшей разработки.
- Payload 1024 байта оставлен резервным вариантом.
- Подтверждено, что без исправления ошибок возможны длительные прерывания видеопотока.

---

# Запись 005

## Дата

29 июля 2026 года

## Тема

Завершение Lab030: блочное исправление стираний.

## Выполнено

- Реализовано блочное исправление стираний над GF(256).
- Проверены режимы без исправления, 8+1, 8+2 и 8+4.
- Режим 8+2 выбран основным рабочим режимом.
- Режим 8+4 оставлен контрольным.
- Подтверждено, что без перемежения продолжительные серии потерь не исправляются.
- Следующая лабораторная посвящена перемежению пакетов.

---

# Запись 006

## Дата

29 июля 2026 года

## Тема

Завершение Lab031: перемежение блоков исправления ошибок.

## Выполнено

- Исследовано перемежение блоков исправления ошибок.
- Проверены глубины D=1, 2, 4 и 8.
- Подтверждено, что глубокое перемежение повышает задержку сильнее, чем полезность для операторского видеопотока.
- D=1 оставлен основным режимом.
- D=2 сохранён как резервный вариант.
- D=4 и D=8 исключены из основной линии разработки.
- Следующая лабораторная подбирает размер блока и количество проверочных пакетов.

---

# Запись 007

## Дата

29 июля 2026 года

## Тема

Завершение Lab032: параметры блочного исправления потерянных пакетов.

## Выполнено

- Исследованы параметры блочного исправления потерянных пакетов.
- Сравнивались режимы без исправления, 4+1, 8+2, 12+3, 6+2, 8+3, 4+2 и 8+4.
- Режим 12+3 выбран основным.
- Его транспортный поток составляет 226,951 кбит/с.
- Запас до контрольных 300 кбит/с составляет 73,049 кбит/с.
- Режим 8+4 оставлен усиленным экспериментальным вариантом.
- Режим 8+3 не принят из-за отсутствия устойчивого преимущества.
- Подтверждено, что продолжительные помехи нельзя компенсировать только увеличением числа проверочных пакетов.
- Следующий этап посвящён совместной передаче команд, телеметрии и видео с приоритетным обслуживанием.

---

# Запись 008

## Дата

3 августа 2026 года

## Тема

Завершение Lab033: общий пакет канала и приоритетное обслуживание.

## Выполнено

- Добавлен общий 32-байтный заголовок канала для команд, телеметрии и видео.
- Общая предложенная нагрузка составляет 258,214 кбит/с.
- Подтверждено, что FIFO не обеспечивает требуемую задержку команд.
- Выбран строгий приоритет с заменой устаревших состояний.
- Аварийная команда имеет наивысший приоритет.
- Скорость 260 кбит/с практически полностью загружена.
- При 230 кбит/с видеоданные накапливаются и устаревают.
- Итоговое восстановление всех кадров после освобождения очереди не означает работу видео в реальном времени.
- Расчёты и графики выполнены с Matplotlib 3.11.1.
- Следующий этап посвящён отбрасыванию устаревших видеокадров.

---

# Запись 009

## Дата

3 августа 2026 года

## Тема

Завершение Lab034: реактивное отбрасывание устаревших видеокадров.

## Выполнено

- Сравнены непрерывные FEC-блоки и блоки, выровненные по составным кадрам.
- Выравнивание увеличивает видеопоток на 5,975 кбит/с, или на 2,633%.
- При 300 кбит/с удаление кадров не требуется.
- При 260 кбит/с ограничения 1000 и 1500 мс не срабатывают, а ограничение 500 мс уже чрезмерно.
- При 230 кбит/с реактивное удаление устаревших кадров уменьшает очередь, но резко снижает частоту обновления.
- Ограничение 500 мс оставляет только 3 из 63 кадров.
- Ограничение 1500 мс оставляет 27 из 63 кадров.
- Подтверждено, что короткая очередь сама по себе не означает свежее изображение.
- Текущая реактивная политика не принята.
- Следующий этап посвящён упреждающему допуску кадров и обслуживанию видео целыми кадрами.

---

# Запись 010

## Дата

3 августа 2026 года

## Тема

Завершение Lab035: упреждающий допуск и обслуживание видео целыми составными кадрами.

## Выполнено

- Lab035 исследует упреждающий допуск и обслуживание видео целыми составными кадрами.
- Начатый кадр всегда передаётся полностью.
- Команды и телеметрия могут передаваться между его пакетами.
- Реактивное удаление Lab034 окончательно не принято.
- Основная политика — хранение только самого свежего не начатого кадра.
- При 230 кбит/с опубликовано 56 из 63 кадров с частотой около 2,6 кадра/с.
- Бесполезно переданных видеобайтов нет.
- Очередь из двух кадров увеличивает возраст изображения.
- Прогноз 1000 мс не дал преимущества над более простой политикой.
- Прогноз 500 мс чрезмерно снижает частоту обновления.
- Следующая лабораторная проверяет долговременную устойчивость и изменение пропускной способности канала.

---

# Запись 011

## Дата

3 августа 2026 года

## Тема

Завершение Lab036: долговременная устойчивость видеопланировщика при изменении пропускной способности.

## Выполнено

- Lab036 проверяет видеопланировщик на протяжении 600 секунд.
- Расчётный рост очереди без удаления совпал с моделью.
- При 230 кбит/с очередь без удаления выросла до 4139 пакетов.
- 95-й процентиль возраста изображения достиг 74,6 секунды.
- Плавное поступление сильно устаревших кадров непригодно для управления.
- Политика хранения только самого свежего не начатого кадра ограничивает очередь.
- При 230 кбит/с она обеспечила около 2,615 кадра/с.
- После восстановления скорости возраст изображения снизился ниже 500 мс за 0,077 секунды.
- Политика двух ожидающих кадров оставлена резервной.
- Следующая лабораторная объединяет планировщик с моделью ошибок радиоканала и защитой команд управления.

---

# Запись 012

## Дата

4 августа 2026 года

## Тема

Завершение Lab037: полный транспорт с серийными потерями и повторением критических команд.

## Выполнено

- Lab037 объединяет видеопоток, обычные и аварийные команды, телеметрию и временные серийные потери пакетов.
- Близкие повторные копии команд часто попадают в один и тот же интервал помехи.
- Повторение Lab037 лишь умеренно уменьшило долю недоставленных управляющих состояний.
- Максимальный промежуток без свежей команды остался более одной секунды.
- Своевременная доставка аварийной команды по радиоканалу не гарантируется.
- Для безопасного поведения при потере связи требуется локальный сторожевой таймер на ровере.
- Следующий этап исследует сторожевой таймер, временно разнесённую аварийную команду и подтверждение получения.

---

# Запись 013

## Дата

4 августа 2026 года

## Тема

Завершение Lab038: локальный сторожевой таймер и подтверждаемая аварийная команда.

## Выполнено

- Lab038 исследует локальный сторожевой таймер, разнесённую аварийную команду и подтверждение получения.
- Три инварианта безопасности не нарушены ни разу.
- Подтверждение не является условием выполнения аварийной остановки.
- Режим с подтверждением сохранил итоговую доставку аварийной команды 99,694%.
- Среднее число аварийных копий уменьшилось с 11 до 1,071.
- Дополнительная нагрузка подтверждаемого режима составляет около 0,0093 кбит/с.
- Дополнительное повторение обычных команд не принято как основной режим.
- Порог 100 мс вызывает слишком частые безопасные остановки.
- Порог 500 мс допускает слишком большой путь до реакции.
- Для следующей проверки принята двухступенчатая логика: предварительная реакция после 150 мс и обязательная остановка после 250 мс.

---

# Запись 014

## Дата

5 августа 2026 года

## Тема

Завершение Lab039: двухступенчатая безопасная реакция и оценка пути до остановки.

## Выполнено

- Lab039 реализует состояния NORMAL, STAGE1_DECELERATION, STAGE2_BRAKING и EMERGENCY_LATCHED.
- Используется точное событийное интегрирование движения.
- Аналитические значения совпали с моделью с нулевой ошибкой.
- Максимальный полный путь составил 13,9642 м.
- При 25 км/ч и номинальном профиле политика 150/250 мс дала полный путь около 9,5388 м.
- Основную часть пути составляет торможение после реакции.
- Пара 150/250 мс сохраняется как предварительный кандидат, но окончательно не утверждается.
- Фактические замедления должны быть измерены на реальном ровере.
- Локальный сторожевой таймер сохранил безопасную реакцию в опытах, где аварийная команда не была доставлена.
- Следующий этап исследует постоянное аварийное намерение наземной станции и безопасное разрешение повторного движения.

---

# Запись 015

## Дата

5 августа 2026 года

## Тема

Завершение Lab040: постоянное аварийное намерение и безопасное повторное разрешение движения.

## Выполнено

- Lab040 реализует постоянное аварийное намерение наземной станции.
- Ограниченное окно повторения 500 мс признано небезопасным.
- При полностью потерянной аварийной передаче ограниченный режим допускал последующее возобновление движения.
- В одном из тяжёлых условий путь после такого восстановления достигал в среднем около 490 м при 25 км/ч.
- Постоянное аварийное намерение исключило положительные задания скорости и небезопасные возобновления движения.
- Подтверждение аварийной команды не снимает аварийное намерение.
- Сброс принимается только после остановки, при свежей связи и корректных идентификаторах.
- Подтверждение сброса не восстанавливает старую команду движения.
- Движение требует новой явной команды оператора.
- Следующий этап посвящён сеансам связи, перезапускам устройств и защите от пакетов предыдущего сеанса.

---

# Запись 016

## Дата

5 августа 2026 года

## Тема

Завершение Lab041: сеансы связи, безопасный запуск и защита от пакетов предыдущего сеанса.

## Выполнено

- Lab041 вводит идентификаторы сеанса станции, запуска ровера и периода управления.
- Одного номера сообщения недостаточно после перезапуска.
- В основном режиме все 2807 введённых старых пакетов были отклонены.
- Ошибочно принятых старых пакетов не было.
- Исходный режим без идентификаторов принял все старые пакеты.
- После перезапуска движение запрещено до нового согласования, подтверждения разрешения и новой команды оператора.
- Аварийное намерение наземной станции сохраняется после перезапуска.
- Неоднозначная разность номеров 2^31 отклоняется.
- Следующий этап посвящён криптографической проверке подлинности управляющих сообщений и защите от намеренной подделки.

---

# Запись 017

## Дата

7 августа 2026 года

## Тема

Аудит достоверности Lab041 и удаление показателей, не выводимых из модели. Начало этапа стабилизации после Lab041.

## Причина записи

Запись 016 не отменяется, но нуждается в уточнении. Машинный аудит репозитория показал, что часть числовых результатов Lab041 не выводилась ни из модели этой лабораторной, ни из указанного источника. Согласно правилу журнала прежняя запись сохранена, а изменение зафиксировано отдельно.

## Что обнаружено

- В функции `simulate_trial` доли публикации видео, доставки телеметрии и доставки управления, а также базовая длина очереди задавались вписанными таблицами, а не вычислялись.
- Значение доли видео 0,910 для канала 260 кбит/с не соответствовало заявленному источнику: Lab040 даёт 0,9603, Lab037 — разброс 0,9026...0,9174.
- Базовая длина очереди 31 для того же канала не соответствовала Lab040, где получено 36...38 пакетов.
- Коэффициенты влияния нагрузки 0,15, 0,10 и 0,05 не выводились ни из какой модели.
- Параметры торможения были зашиты литералами `0.250` и делителем `6.0` без связи с профилем `nominal` Lab039, откуда они происходят.
- Пять из четырнадцати инвариантов безопасности не измерялись: два вычислялись выражением с умножением на ноль, один был литеральным нулём, ещё два опирались на поля, которые никогда не заполнялись. Проверка `validate_outputs` подтверждала эти константы, то есть проверяла тождество.
- Формулировка «все 2807 введённых старых пакетов были отклонены» описывает перебор таблицы сценариев, а не измеренную вероятность отклонения. Число раскладывается как семь сценариев на 401 повтор.

## Выполнено

- Из Lab041 удалены четыре показателя: доли доставки видео, телеметрии и управления и максимальная длина очереди. Они относятся к Lab037 и Lab040 и в Lab041 не моделируются.
- Удалён график `lab041_traffic_impact.png`, потерявший основание. Осталось семь графиков.
- Удалены поля `negative_speed_cases` и `speed_limit_exceeded_cases`, которые никогда не вычислялись, и тождественные проверки в `validate_outputs`.
- Параметры торможения связаны с профилем `nominal` Lab039 через именованные константы `LAB039_NOMINAL_STAGE2_MPS2` и `LAB039_STAGE2_THRESHOLD_SECONDS`; горизонт незащищённого движения выделен как явно принятое допущение.
- Перенесённые величины `VIDEO_OFFERED_LOAD_KBPS` и `TELEMETRY_OFFERED_LOAD_KBPS` снабжены указанием источника: Lab038, поля `video_load_kbps` и `telemetry_load_kbps`.
- Секция инвариантов переписана: девять свойств, следующих из архитектуры, снабжены ссылками на подтверждающие функциональные проверки; пять свойств, которые матрица не может измерить, вынесены в отдельный раздел со ссылками на проверки 04, 06, 07, 10, 16 и 19.
- В отчёт добавлено разграничение того, что моделируется розыгрышем, что задано архитектурой и что не моделируется вовсе.
- Проверка 04 расширена отрицательной скоростью и границей 15 м/с, поэтому соответствующее свойство теперь подтверждается реально, а не константой.
- Оценка пути после перезапуска помечена как расчёт по замкнутой формуле, одинаковый во всех повторах, а не как результат розыгрыша.

## Результат

- Lab041 перезапущена полностью: 180 сочетаний, 24 из 24 функциональных проверок пройдены, пять CSV и семь PNG.
- Сверка с прежними файлами показала, что удалено ровно шесть столбцов, а все сохранённые значения совпали до последнего знака. Расхождений в общих столбцах ноль.
- Научные выводы Lab041 не изменились. Максимальный путь после перезапуска остался 9,7737 м, постоянная нагрузка управления 10,88000 кбит/с, полный предложенный поток 262,076 кбит/с.
- Выводы Записи 016 о сеансах, безопасном запуске и отклонении старых пакетов остаются в силе. Уточняется их основание: доказательством служат 24 функциональные проверки, работающие с настоящими автоматами, а не счётчики матрицы из 180 сочетаний.

## Следующий этап

Криптографическая аутентификация отложена. Сначала выполняется этап стабилизации: быстрые тесты `protocol/` вместо единственной точки входа через лабораторную, разделение быстрых проверок и экспериментов, воспроизводимое описание окружения.
