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

Состояние Git до начала
- Корень: C:/Users/user/Desktop/projects/SDR_Rover
- Ветка: main
- HEAD: b3ebe1637fbb401198cdbb43a862e94614be9cb0
- Рабочее дерево и индекс были чистыми; относительно локально известной origin/main расхождение составляло 0/0.
- Коммиты Lab038 и Lab039 присутствовали; сетевые команды Git не выполнялись.

Автоматы наземной станции и ровера
- Наземная станция: GROUND_NORMAL → GROUND_EMERGENCY_REQUESTED → GROUND_EMERGENCY_CONFIRMED → GROUND_RESET_REQUESTED → GROUND_MOVEMENT_REAUTHORIZED.
- Подтверждение аварийной команды прекращает её копии, но не снимает аварийное намерение и не разрешает положительные команды движения.
- Ровер сохраняет состояния NORMAL, STAGE1_DECELERATION, STAGE2_BRAKING и EMERGENCY_LATCHED из Lab039.
- Обычная или поздняя старая команда не снимает EMERGENCY_LATCHED.

Безопасный сброс
- Сброс использует отдельные идентификаторы потоков и прикладные данные внутри неизменного пакета LinkPacket из Lab033.
- Проверяются зафиксированное аварийное состояние, нулевая фактическая скорость, свежесть связи 250 мс, идентификатор события, номер последовательности, нулевая требуемая скорость и запрет движения.
- Потерянное подтверждение сброса вызывает повтор запроса; принятый дубликат не повторяет действие, но вызывает новое подтверждение.
- После подтверждения сброса сохраняется нулевая скорость; новая команда оператора формируется только через 2 секунды и имеет новый номер последовательности.

Параметры
- Опыт 120 с; аварийная команда на 30-й секунде; сброс на 60-й секунде; команды 20 Гц; повторы каждые 50 мс.
- Матрица: 5 каналов × 3 режима × 3 скорости = 45 сочетаний; условия с потерями по 200 повторов.
- Сторожевой таймер 150/250 мс; замедление первой ступени 1,0 м/с², второй ступени 3,0 м/с², ускорение восстановления 1,0 м/с².
- Исходная нагрузка проверена контрольной суммой и помехоустойчивым кодированием: 12356/714.

Компактная таблица 45 сочетаний
канал | режим | скорость | доставка аварийной команды, % | время аварийного намерения, % | небезопасное восстановление, % | остановка, % | нагрузка, кбит/с | видео, % | телеметрия, % | очередь
Без потерь, 300 кбит/с | Ограниченное повторение | 5 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00700 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Ограниченное повторение | 15 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00700 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Ограниченное повторение | 25 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00700 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Постоянное намерение | 5 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00700 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Постоянное намерение | 15 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00700 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Постоянное намерение | 25 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00700 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Постоянное намерение и сброс | 5 | 100.000 | 25.002 | 0.000 | 100.000 | 0.01333 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Постоянное намерение и сброс | 15 | 100.000 | 25.002 | 0.000 | 100.000 | 0.01333 | 100.000 | 100.000 | 21
Без потерь, 300 кбит/с | Постоянное намерение и сброс | 25 | 100.000 | 25.002 | 0.000 | 100.000 | 0.01333 | 100.000 | 100.000 | 21
300 кбит/с, помеха 50 мс | Ограниченное повторение | 5 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00711 | 94.165 | 97.920 | 21
300 кбит/с, помеха 50 мс | Ограниченное повторение | 15 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00711 | 94.165 | 97.920 | 21
300 кбит/с, помеха 50 мс | Ограниченное повторение | 25 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00711 | 94.165 | 97.920 | 21
300 кбит/с, помеха 50 мс | Постоянное намерение | 5 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00711 | 94.165 | 97.920 | 21
300 кбит/с, помеха 50 мс | Постоянное намерение | 15 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00711 | 94.165 | 97.920 | 21
300 кбит/с, помеха 50 мс | Постоянное намерение | 25 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00711 | 94.165 | 97.920 | 21
300 кбит/с, помеха 50 мс | Постоянное намерение и сброс | 5 | 100.000 | 25.004 | 0.000 | 100.000 | 0.01360 | 94.164 | 97.919 | 21
300 кбит/с, помеха 50 мс | Постоянное намерение и сброс | 15 | 100.000 | 25.004 | 0.000 | 100.000 | 0.01360 | 94.164 | 97.919 | 21
300 кбит/с, помеха 50 мс | Постоянное намерение и сброс | 25 | 100.000 | 25.004 | 0.000 | 100.000 | 0.01360 | 94.164 | 97.919 | 21
260 кбит/с, помеха 200 мс | Ограниченное повторение | 5 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00708 | 96.028 | 97.976 | 36
260 кбит/с, помеха 200 мс | Ограниченное повторение | 15 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00708 | 96.028 | 97.976 | 36
260 кбит/с, помеха 200 мс | Ограниченное повторение | 25 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00708 | 96.028 | 97.976 | 36
260 кбит/с, помеха 200 мс | Постоянное намерение | 5 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00708 | 96.028 | 97.976 | 36
260 кбит/с, помеха 200 мс | Постоянное намерение | 15 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00708 | 96.028 | 97.976 | 36
260 кбит/с, помеха 200 мс | Постоянное намерение | 25 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00708 | 96.028 | 97.976 | 36
260 кбит/с, помеха 200 мс | Постоянное намерение и сброс | 5 | 100.000 | 25.012 | 0.000 | 100.000 | 0.01392 | 96.031 | 97.977 | 38
260 кбит/с, помеха 200 мс | Постоянное намерение и сброс | 15 | 100.000 | 25.012 | 0.000 | 100.000 | 0.01392 | 96.031 | 97.977 | 38
260 кбит/с, помеха 200 мс | Постоянное намерение и сброс | 25 | 100.000 | 25.012 | 0.000 | 100.000 | 0.01392 | 96.031 | 97.977 | 38
230 кбит/с, помеха 200 мс | Ограниченное повторение | 5 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00717 | 84.913 | 97.985 | 40
230 кбит/с, помеха 200 мс | Ограниченное повторение | 15 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00717 | 84.913 | 97.985 | 40
230 кбит/с, помеха 200 мс | Ограниченное повторение | 25 | 100.000 | 0.417 | 0.000 | 100.000 | 0.00717 | 84.913 | 97.985 | 40
230 кбит/с, помеха 200 мс | Постоянное намерение | 5 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00717 | 84.913 | 97.985 | 40
230 кбит/с, помеха 200 мс | Постоянное намерение | 15 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00717 | 84.913 | 97.985 | 40
230 кбит/с, помеха 200 мс | Постоянное намерение | 25 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00717 | 84.913 | 97.985 | 40
230 кбит/с, помеха 200 мс | Постоянное намерение и сброс | 5 | 100.000 | 25.014 | 0.000 | 100.000 | 0.01430 | 84.918 | 97.987 | 40
230 кбит/с, помеха 200 мс | Постоянное намерение и сброс | 15 | 100.000 | 25.014 | 0.000 | 100.000 | 0.01430 | 84.918 | 97.987 | 40
230 кбит/с, помеха 200 мс | Постоянное намерение и сброс | 25 | 100.000 | 25.014 | 0.000 | 100.000 | 0.01430 | 84.918 | 97.987 | 40
230 кбит/с, помеха 1000 мс | Ограниченное повторение | 5 | 99.000 | 0.417 | 1.000 | 100.000 | 0.00739 | 86.314 | 97.971 | 40
230 кбит/с, помеха 1000 мс | Ограниченное повторение | 15 | 99.000 | 0.417 | 1.000 | 100.000 | 0.00739 | 86.314 | 97.971 | 40
230 кбит/с, помеха 1000 мс | Ограниченное повторение | 25 | 99.000 | 0.417 | 1.000 | 99.000 | 0.00739 | 86.314 | 97.971 | 40
230 кбит/с, помеха 1000 мс | Постоянное намерение | 5 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00811 | 86.314 | 97.971 | 40
230 кбит/с, помеха 1000 мс | Постоянное намерение | 15 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00811 | 86.314 | 97.971 | 40
230 кбит/с, помеха 1000 мс | Постоянное намерение | 25 | 100.000 | 75.000 | 0.000 | 100.000 | 0.00811 | 86.314 | 97.971 | 40
230 кбит/с, помеха 1000 мс | Постоянное намерение и сброс | 5 | 100.000 | 25.009 | 0.000 | 100.000 | 0.01479 | 86.318 | 97.975 | 39
230 кбит/с, помеха 1000 мс | Постоянное намерение и сброс | 15 | 100.000 | 25.009 | 0.000 | 100.000 | 0.01479 | 86.318 | 97.975 | 39
230 кбит/с, помеха 1000 мс | Постоянное намерение и сброс | 25 | 100.000 | 25.009 | 0.000 | 100.000 | 0.01479 | 86.318 | 97.975 | 39

Отрицательный исходный режим
- Полностью потерянные первые 500 мс аварийной передачи: 2 на одно сочетание.
- Остановки по сторожевому таймеру после такой потери: 4.
- Небезопасные восстановления движения: 6; максимальная доля 1.000%.
- Среднее время от остановки до повторного движения: 1.1666 с; путь после восстановления до 599.4074 м.
- Ограниченный режим Lab038 служит отрицательным исходным уровнем и не принимается для рабочей архитектуры.

Постоянное аварийное намерение
- Итоговая доставка 100% в режимах постоянного намерения получена в конечной выборке и не является математической гарантией.
- Безопасность не зависит от гарантированной доставки удалённой команды: локальный сторожевой таймер продолжает действовать.
- Подтверждение аварийной команды (Emergency ACK) прекращает копии, но не снимает аварийное намерение emergency_intent.
- Положительные задания при активном аварийном намерении: 0.
- Команды с разрешением движения при активном аварийном намерении: 0.
- Небезопасные восстановления в режимах 2 и 3: 0.

Подтверждение сброса
- Принятые запросы сброса: 1.0000 на опыт; отклонённые: 0.0120.
- Причины отказов: аварийное состояние не зафиксировано=0, движение=0, устаревшая связь=36, неверное событие=0, старый номер последовательности=0, ненулевая скорость=0, разрешение движения=0.
- Среднее число повторов сброса: 0.0990; потерянных подтверждений сброса: 0.0000.
- 95-й процентиль времени от запроса оператора до подтверждения сброса: до 7.477 мс.
- Движение до подтверждения сброса: 0; автоматическое восстановление старой команды: 0.
- Подтверждение сброса (RESET_ACK) разрешает перейти только в безопасное состояние с нулевой скоростью.
- Для движения после сброса требуется новая команда оператора.

Точечная проверка пути до начала безопасной реакции
- Канал: 230 кбит/с, средняя помеха 1000 мс; транспортный эксперимент повторно не запускался.
- Если в момент действия оператора уже активно состояние STAGE1_DECELERATION, STAGE2_BRAKING или EMERGENCY_LATCHED, путь до начала реакции равен нулю и не измеряется до будущего перехода в торможение.
- режим | скорость, км/ч | среднее, м | 95-й процентиль, м | максимум, м | полные остановки, % | небезопасные возобновления
- Ограниченное повторение | 5 | 0.005284 | 0.005362 | 0.005362 | 100.000 | 2
- Ограниченное повторение | 15 | 0.015719 | 0.016087 | 0.016087 | 100.000 | 2
- Ограниченное повторение | 25 | 0.026197 | 0.026812 | 0.026812 | 99.000 | 2
- Постоянное намерение | 5 | 0.005284 | 0.005362 | 0.005362 | 100.000 | 0
- Постоянное намерение | 15 | 0.015719 | 0.016087 | 0.016087 | 100.000 | 0
- Постоянное намерение | 25 | 0.026197 | 0.026812 | 0.026812 | 100.000 | 0
- Постоянное намерение и сброс | 5 | 0.005284 | 0.005362 | 0.005362 | 100.000 | 0
- Постоянное намерение и сброс | 15 | 0.015719 | 0.016087 | 0.016087 | 100.000 | 0
- Постоянное намерение и сброс | 25 | 0.026197 | 0.026812 | 0.026812 | 100.000 | 0
- Сводная и двигательная таблицы согласованы по числу повторов, доле полных остановок и небезопасным возобновлениям.
- Ни один график Lab040 напрямую не использует путь до начала реакции; график пути до остановки использует отдельный показатель полного пути и не требует изменения.

Движение и нагрузка
- Максимальный путь до полной остановки: 9.2678 м; максимальное время: 2.3335 с.
- Дополнительная нагрузка защиты: 0.00948…0.01479 кбит/с.
- Нагрузка нулевых состояний: до 5.52000 кбит/с; максимальная очередь 40 пакетов.
- Видео опубликовано: 84.913…100.000%; телеметрия: 97.919…100.000%.

Функциональные проверки
- ПРОЙДЕНО — 01. Оператор фиксирует аварийное намерение: действие оператора фиксирует аварийное намерение наземной станции
- ПРОЙДЕНО — 02. После аварии нет положительной заданной скорости: аварийное намерение заменяет движение безопасным нулевым состоянием с торможением
- ПРОЙДЕНО — 03. Движение запрещено до сброса: после подтверждения аварийной команды движение остаётся запрещённым
- ПРОЙДЕНО — 04. Потеря аварийной команды сохраняет намерение: управляемая помеха теряет все копии за первые 500 мс, не снимая аварийное намерение
- ПРОЙДЕНО — 05. Подтверждение аварии сохраняет намерение: потеря первого подтверждения и доставка повтора сохраняют аварийное намерение
- ПРОЙДЕНО — 06. Первая аварийная команда фиксирует состояние ровера: первая аварийная команда фиксирует аварийное состояние ровера
- ПРОЙДЕНО — 07. Обычная команда не снимает аварийное состояние: обычная команда не снимает аварийное состояние ровера
- ПРОЙДЕНО — 08. Старая команда движения отклоняется: запоздалая команда движения со старым номером последовательности отклоняется
- ПРОЙДЕНО — 09. Сброс при движении отклоняется: движущийся ровер отклоняет запрос сброса
- ПРОЙДЕНО — 10. Сброс при устаревшей связи отклоняется: при устаревшем состоянии связи запрос сброса отклоняется
- ПРОЙДЕНО — 11. Сброс для неверного события отклоняется: запрос сброса с неверным идентификатором аварии отклоняется
- ПРОЙДЕНО — 12. Сброс со старым номером последовательности отклоняется: запрос сброса со старым номером последовательности отклоняется
- ПРОЙДЕНО — 13. Сброс с ненулевой скоростью отклоняется: ненулевая скорость или разрешение движения приводят к отклонению сброса
- ПРОЙДЕНО — 14. После успешного сброса скорость остаётся нулевой: принятый сброс выводит из аварийного состояния только в состояние нулевой скорости
- ПРОЙДЕНО — 15. До подтверждения сброса движение отсутствует: до подтверждения сброса наземная станция сохраняет безопасное нулевое задание
- ПРОЙДЕНО — 16. Потеря подтверждения сброса вызывает повтор: управляемая потеря первого подтверждения сброса вызывает повтор запроса
- ПРОЙДЕНО — 17. Дубликат не выполняет сброс дважды: принятый дубликат не выполняет сброс повторно
- ПРОЙДЕНО — 18. На дубликат повторно отправляется подтверждение: принятый дубликат вызывает повторное подтверждение сброса
- ПРОЙДЕНО — 19. Старая команда движения не восстанавливается: подтверждение сброса не восстанавливает сохранённую команду движения
- ПРОЙДЕНО — 20. Для движения требуется новая команда оператора: для движения требуется новый номер последовательности команды оператора
- ПРОЙДЕНО — 21. Аварийное состояние устойчиво к обычным командам: состояние EMERGENCY_LATCHED не снимается обычной командой управления
- ПРОЙДЕНО — 22. Сторожевой таймер работает при потере аварийной команды: локальный двухступенчатый сторожевой таймер работает без доставки аварийной команды
- ПРОЙДЕНО — 23. Интервалы помех воспроизводимы: фиксированное начальное значение генератора воспроизводит интервалы помех
- ПРОЙДЕНО — 24. Действие оператора во время торможения: действие оператора при уже активном торможении даёт нулевой путь до начала реакции

Созданные файлы
- protocol/persistent_emergency.py
- protocol/safe_reset.py
- tests/lab040_persistent_emergency.py
- data/processed/lab040/lab040_summary.csv
- data/processed/lab040/lab040_emergency_metrics.csv
- data/processed/lab040/lab040_reset_metrics.csv
- data/processed/lab040/lab040_motion_metrics.csv
- data/processed/lab040/lab040_load_metrics.csv
- data/processed/lab040/lab040_report.txt
- data/processed/lab040/lab040_emergency_delivery.png
- data/processed/lab040/lab040_unsafe_recovery.png
- data/processed/lab040/lab040_latch_time.png
- data/processed/lab040/lab040_stop_path.png
- data/processed/lab040/lab040_reset_latency.png
- data/processed/lab040/lab040_protection_load.png
- data/processed/lab040/lab040_video_telemetry.png
- data/processed/lab040/lab040_tradeoff.png

Ограничения
- Параметры замедления предварительные и требуют измерения на реальном ровере.
- Модель одномерная и не заменяет испытания тормозов, привода и процедуры операторского сброса.
- Lab040 не добавлена в Git и не закоммичена; Lab028–Lab039 не изменены.
