Lab039 — двухступенчатая безопасная реакция и оценка пути до остановки Состояние Git до реализации - Корень: C:/Users/user/Desktop/projects/SDR_Rover - Ветка: main - HEAD: 23cfdf581b63d2674e7c48965aea45cc5afff2d7 - Перед окончательным повторным запуском рабочее дерево содержало только новые файлы Lab039; индекс был пуст. - Неизвестных изменений не было; локально известный origin/main имел ahead/behind 0/0. - Lab036–Lab038 присутствовали; Lab038 зафиксирована коммитом 23cfdf5. - Fetch, pull и push не выполнялись. Конечный автомат - NORMAL поддерживает заданную скорость и принимает только команды с новым sequence. - STAGE1_DECELERATION запрещает положительное ускорение и применяет a_stage1. - STAGE2_BRAKING задаёт нулевую скорость и применяет a_stage2 до точной остановки. - EMERGENCY_LATCHED выполняет ту же обязательную остановку, фиксируется и не снимается обычной командой. - Свежая команда снимает только временные защитные состояния; старая и повторная команды таймер не обновляют. - Предварительная реакция уменьшает скорость с возможностью мягкого восстановления, а обязательное торможение требует полной остановки. Порядок совпадающих событий - Полностью полученная emergency-команда обрабатывается первой и фиксирует аварийную остановку. - Полностью полученная свежая обычная команда обрабатывается раньше первого и второго порогов watchdog при одинаковом времени. - Такая команда обновляет время свежести и отменяет переход, рассчитанный от предыдущей команды; затем очередь событий строится заново. - Далее обрабатывается второй порог, затем первый; равные пороги запрещены проверкой ThresholdPolicy. - Правило receive-before-threshold отдельно проверяется для обоих порогов. Параметры движения и эксперимента - Длительность опыта: 120 с; команды: 20 Гц; a_resume=1.0 м/с². - Основная матрица: 5 каналов × 4 политики × 3 скорости × 3 профиля = 180 сочетаний. - Условия с потерями: 100 повторов; контроль без потерь: один детерминированный опыт. - Скорости: 5, 15 и 25 км/ч; внутри модели используются м/с. - Профили a_stage1/a_stage2: мягкий 0,5/2,0; номинальный 1,0/3,0; интенсивный 1,5/4,0 м/с². - Интегрирование событийное и точное на каждом участке постоянного ускорения; крупный фиксированный шаг не используется. - Ранее сформированный каталог результатов Lab039 удалён; все CSV, TXT и PNG получены заново одним полным запуском окончательного кода. - Проверенные при построении нагрузки пакеты CRC/FEC: 12356/714. Компактная сводка 180 сочетаний политика | реакции этапа 1, 1/мин (среднее) | торможения этапа 2, 1/мин (среднее) | полные остановки, 1/мин (среднее) | максимальный полный путь, м Один порог 250 мс | 0.0000 | 1.2510 | 0.1078 | 13.7924 Два порога 100/200 мс | 4.3680 | 1.6900 | 0.1303 | 13.2697 Два порога 150/250 мс | 2.5890 | 1.2510 | 0.1146 | 13.6170 Два порога 200/300 мс | 1.6900 | 0.9800 | 0.1024 | 13.9642 Расширенная сводка политик политика | этап 1 ср/макс, 1/мин | этап 2 ср/макс, 1/мин | остановки ср/макс, 1/мин | путь ср/макс/P95макс, м | время этап 1/этап 2/ноль, % | потеря скорости, м/с | восстановление, с Один порог 250 мс | 0.0000/0.0000 | 1.2510/2.3400 | 0.1078/0.7600 | 1.2516/13.7924/13.7924 | 0.0000/0.7027/0.1496 | 0.0000 | 0.6127 Два порога 100/200 мс | 4.3680/11.3850 | 1.6900/2.9950 | 0.1303/0.8400 | 1.3003/13.2697/13.2697 | 0.4340/0.8205/0.1686 | 0.0256 | 0.5525 Два порога 150/250 мс | 2.5890/4.2100 | 1.2510/2.3400 | 0.1146/0.7850 | 1.2081/13.6170/13.6170 | 0.2864/0.7027/0.1568 | 0.0220 | 0.5362 Два порога 200/300 мс | 1.6900/2.9950 | 0.9800/1.8650 | 0.1024/0.7350 | 1.2571/13.9642/13.9642 | 0.2084/0.6121/0.1463 | 0.0219 | 0.5336 Интерпретация агрегированного пути - Нулевой полный путь в строке сочетания означает отсутствие полной остановки в данном сочетании, а не отсутствие движения ровера. - Средний путь, включающий нулевые значения сочетаний без полной остановки, нельзя использовать как единственный показатель безопасности. - Для сравнения политик необходимо совместно учитывать максимальный путь, аналитический путь при длительной потере связи, частоту обязательных торможений и частоту полных остановок. Сравнение 100/200 и 150/250 мс по выбранным условиям канал | скорость, км/ч | политика | этап 1/этап 2/остановки, 1/мин | путь ср/макс/P95макс, м | время этап 1/этап 2/ноль, % | потеря скорости, м/с | восстановление, с 260 кбит/с, помеха 200 мс | 5 | Два порога 100/200 мс | 4.4650/2.9300/0.3950 | 0.5553/0.7234/0.7234 | 0.6166/1.0200/0.1803 | 0.0492 | 0.4254 260 кбит/с, помеха 200 мс | 5 | Два порога 150/250 мс | 3.7700/2.3400/0.3133 | 0.6292/0.7929/0.7929 | 0.4875/0.8047/0.1435 | 0.0358 | 0.4040 260 кбит/с, помеха 200 мс | 15 | Два порога 100/200 мс | 4.4650/2.9300/0.0100 | 0.8148/2.8425/2.8425 | 0.6166/1.0200/0.0038 | 0.0485 | 0.4887 260 кбит/с, помеха 200 мс | 15 | Два порога 150/250 мс | 3.7700/2.3400/0.0067 | 0.8181/3.0509/3.0509 | 0.4875/0.8047/0.0026 | 0.0355 | 0.4626 260 кбит/с, помеха 200 мс | 25 | Два порога 100/200 мс | 4.4650/2.9300/0.0000 | 0.0000/0.0000/0.0000 | 0.6166/1.0200/0.0000 | 0.0484 | 0.4887 260 кбит/с, помеха 200 мс | 25 | Два порога 150/250 мс | 3.7700/2.3400/0.0000 | 0.0000/0.0000/0.0000 | 0.4875/0.8047/0.0000 | 0.0354 | 0.4619 230 кбит/с, помеха 200 мс | 5 | Два порога 100/200 мс | 4.8100/2.9950/0.3783 | 0.5574/0.7234/0.7234 | 0.6405/1.0384/0.1851 | 0.0415 | 0.4091 230 кбит/с, помеха 200 мс | 5 | Два порога 150/250 мс | 3.8550/2.3150/0.2983 | 0.6301/0.7929/0.7929 | 0.5002/0.8226/0.1486 | 0.0414 | 0.3972 230 кбит/с, помеха 200 мс | 15 | Два порога 100/200 мс | 4.8100/2.9950/0.0167 | 2.1422/3.5846/3.5846 | 0.6405/1.0384/0.0090 | 0.0415 | 0.4642 230 кбит/с, помеха 200 мс | 15 | Два порога 150/250 мс | 3.8550/2.3150/0.0133 | 2.2813/3.7930/3.7930 | 0.5002/0.8226/0.0076 | 0.0414 | 0.4523 230 кбит/с, помеха 200 мс | 25 | Два порога 100/200 мс | 4.8100/2.9950/0.0017 | 2.3840/7.1519/7.1519 | 0.6405/1.0384/0.0002 | 0.0415 | 0.4656 230 кбит/с, помеха 200 мс | 25 | Два порога 150/250 мс | 3.8550/2.3150/0.0000 | 0.0000/0.0000/0.0000 | 0.5002/0.8226/0.0000 | 0.0412 | 0.4533 230 кбит/с, помеха 1000 мс | 5 | Два порога 100/200 мс | 1.1800/1.0550/0.7050 | 0.5691/0.7234/0.7234 | 0.1867/1.9272/1.3055 | 0.0092 | 0.9961 230 кбит/с, помеха 1000 мс | 5 | Два порога 150/250 мс | 1.1100/1.0350/0.6650 | 0.6408/0.7929/0.7929 | 0.1773/1.8405/1.2442 | 0.0049 | 0.9795 230 кбит/с, помеха 1000 мс | 15 | Два порога 100/200 мс | 1.1800/1.0550/0.3083 | 3.6007/5.0676/5.0676 | 0.1867/1.9272/0.5730 | 0.0092 | 2.0091 230 кбит/с, помеха 1000 мс | 15 | Два порога 150/250 мс | 1.1100/1.0350/0.2883 | 3.8241/5.2759/5.2759 | 0.1773/1.8405/0.5452 | 0.0049 | 1.9554 230 кбит/с, помеха 1000 мс | 25 | Два порога 100/200 мс | 1.1800/1.0550/0.1383 | 8.7272/13.2697/13.2697 | 0.1867/1.9272/0.2724 | 0.0092 | 2.3735 230 кбит/с, помеха 1000 мс | 25 | Два порога 150/250 мс | 1.1100/1.0350/0.1317 | 9.1214/13.6170/13.6170 | 0.1773/1.8405/0.2596 | 0.0049 | 2.3052 - Полные данные каждой комбинации находятся в lab039_summary.csv, lab039_watchdog_metrics.csv и lab039_distance_metrics.csv. Путь и защитные реакции - Максимальный наблюдавшийся промежуток без свежей команды: 6546.922 мс. - Максимальное время применения устаревшей команды до обязательного торможения: 300 мс. - Максимальный путь до первой реакции: 1.7361 м. - Максимальный путь до второго порога: 2.0808 м. - Максимальный тормозной путь после второго порога: 12.0563 м. - Максимальный полный путь после последней свежей команды: 13.9642 м. - Частота предварительных реакций: 0.0000…11.3850 1/мин. - Частота полных остановок: 0.0000…0.8400 1/мин. - Произведение v × timeout описывает только путь до порога; после него ровер сохраняет скорость и проходит дополнительный тормозной путь. - Путь реакции растёт линейно со скоростью, а идеализированный тормозной путь v²/(2a) — квадратично, поэтому высокая начальная скорость особенно существенна. - Короткий первый порог чаще пересекается обычными краткими помехами и вызывает лишние замедления. - Длинный второй порог дольше сохраняет движение до обязательного торможения и увеличивает полный путь. Аналитические контрольные расчёты без восстановления связи скорость, км/ч | профиль | один порог: реакция/торможение/итого, м | 150/250: реакция/замедление/торможение/итого, м | разница, м | ошибка модели, м 5 | Мягкий | 0.3472/0.4823/0.8295 | 0.2083/0.1364/0.4482/0.7929 | -0.0366 | 0.000e+00 5 | Номинальный | 0.3472/0.3215/0.6687 | 0.2083/0.1339/0.2769/0.6191 | -0.0496 | 0.000e+00 5 | Интенсивный | 0.3472/0.2411/0.5883 | 0.2083/0.1314/0.1919/0.5316 | -0.0568 | 0.000e+00 15 | Мягкий | 1.0417/4.3403/5.3819 | 0.6250/0.4142/4.2367/5.2759 | -0.1060 | 0.000e+00 15 | Номинальный | 1.0417/2.8935/3.9352 | 0.6250/0.4117/2.7563/3.7930 | -0.1422 | 0.000e+00 15 | Интенсивный | 1.0417/2.1701/3.2118 | 0.6250/0.4092/2.0167/3.0509 | -0.1609 | 0.000e+00 25 | Мягкий | 1.7361/12.0563/13.7924 | 1.0417/0.6919/11.8833/13.6170 | -0.1755 | 0.000e+00 25 | Номинальный | 1.7361/8.0376/9.7737 | 1.0417/0.6894/7.8077/9.5388 | -0.2348 | 0.000e+00 25 | Интенсивный | 1.7361/6.0282/7.7643 | 1.0417/0.6869/5.7706/7.4992 | -0.2651 | 0.000e+00 - Максимальная абсолютная ошибка событийной модели: 0.000e+00 м. Независимая аварийная остановка - Расчёт: 45 сочетаний; emergency сформирована на 60-й секунде; политика локального таймера 150/250 мс. - Итоговая доставка за окно 500 мс: 98.000…100.000%. - Время первой доставки: среднее до 8.609 мс, P95 до 6.523 мс, максимум 204.765 мс. - Путь за время доставки: до 0.0597 м в среднем по сочетанию. - Тормозной путь после получения: до 12.0563 м в среднем по сочетанию. - Полный путь от формирования до остановки: среднее до 12.1106 м; максимум 12.8187 м. - Недоставок за 500 мс: 2 в одном канальном условии, 3 суммарно в независимых транспортных опытах. - При недоставке доля опытов с включением второго этапа локального таймера: до 100.000%. - При недоставке доля остановок локальным таймером: до 100.000%. - Средний путь локальной остановки при недоставке: до 2.8541 м; время — до 1.6847 с. - Удалённая emergency не заменяет локальный сторожевой таймер: канал может быть физически недоступен, а локальная реакция не зависит от доставки. - ACK лишь прекращает будущие копии и информирует отправителя; торможение начинается при первом корректном emergency до получения ACK. Инварианты безопасности - Отрицательная скорость: 0 случаев. - Превышение заданной скорости: 0 случаев. - Второй порог превышен без торможения: 0 случаев. - Снятие временного состояния старой командой: 0 случаев. - Снятие аварийной остановки обычной командой: 0 случаев. Интерпретация пары 150/250 мс - Для 150/250 мс средняя частота предварительных реакций по матрице: 2.5890 1/мин; полных остановок: 0.1146 1/мин. - Для 100/200 мс соответствующие значения: 4.3680 и 0.1303 1/мин; для 200/300 мс: 1.6900 и 0.1024 1/мин. - Максимальный полный путь 150/250 мс: 13.6170 м; 100/200 мс: 13.2697 м; 200/300 мс: 13.9642 м. - Эти результаты характеризуют компромисс, но не подтверждают окончательный выбор: пороги и замедления автоматически не назначаются. Ограничения модели - a_stage1 и a_stage2 являются исследовательскими параметрами и должны быть измерены на реальном ровере. - Не моделируются уклон, пробуксовка, задержка электромеханического тормоза, изменение сцепления и сопротивление воздуха. - Не моделируются поперечная динамика, перенос массы, ABS и фактическое время нарастания тормозного момента. - Это расчётная одномерная модель, а не окончательный алгоритм силовой части и не замена натурных испытаний. Функциональные проверки - PASS 01_fresh_command_updates_watchdog: fresh sequence updates timer - PASS 02_old_command_does_not_update_watchdog: old sequence ignored - PASS 03_duplicate_does_not_update_watchdog: equal sequence ignored - PASS 04_first_threshold_enters_stage1: 150 ms enters preliminary deceleration - PASS 05_second_threshold_enters_stage2: 250 ms enters mandatory braking - PASS 06_single_threshold_skips_stage1: single threshold goes directly to stage2 - PASS 07_stage1_forbids_positive_acceleration: stage1 acceleration is non-positive - PASS 08_stage2_commands_zero_speed: stage2 applies mandatory braking to zero - PASS 09_speed_never_negative: braking is clipped at zero - PASS 10_constant_acceleration_matches_formula: v and s match analytic formula - PASS 11_internal_zero_crossing_is_exact: internal stop time integrated exactly - PASS 12_new_command_releases_temporary_state: fresh command releases temporary state - PASS 13_old_command_does_not_release_state: old command cannot release stage1 - PASS 14_emergency_enters_latched_state: first emergency latches state - PASS 15_normal_command_does_not_unlatch: ordinary command cannot unlatch emergency - PASS 16_ack_not_required_for_braking: braking starts before any ACK - PASS 17_lost_ack_continues_repetition: controlled first ACK loss deterministically causes exactly one later copy - PASS 18_received_ack_stops_future_copies: received ACK stops future copies - PASS 19_stage2_threshold_never_missed: second threshold always enters braking - PASS 20_fixed_seed_reproducibility: identical seed gives identical intervals - PASS 21_fresh_command_wins_first_threshold_tie: fresh command at stage1 time is received before the threshold - PASS 22_fresh_command_wins_second_threshold_tie: fresh command at stage2 time is received before mandatory braking Созданные файлы - protocol/two_stage_failsafe.py - tests/lab039_two_stage_braking.py - data/processed/lab039/lab039_summary.csv - data/processed/lab039/lab039_watchdog_metrics.csv - data/processed/lab039/lab039_distance_metrics.csv - data/processed/lab039/lab039_emergency_stop_metrics.csv - data/processed/lab039/lab039_analytic_checks.csv - data/processed/lab039/lab039_report.txt - data/processed/lab039/lab039_path_by_speed.png - data/processed/lab039/lab039_policy_comparison.png - data/processed/lab039/lab039_deceleration_profiles.png - data/processed/lab039/lab039_reaction_rates.png - data/processed/lab039/lab039_safety_state_time.png - data/processed/lab039/lab039_emergency_path.png - data/processed/lab039/lab039_analytic_vs_model.png - data/processed/lab039/lab039_tradeoff.png Состояние результатов - Lab039 оставлена вне индекса Git и не закоммичена. - Lab028–Lab038 не изменялись. - Сохранены только компактные агрегированные CSV, TXT и PNG; запрещённые артефакты не создавались.