Files
SDR-Rover/data/processed/lab039/lab039_report.txt
2026-08-05 11:44:43 +03:00

184 lines
20 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Lab039 — двухступенчатая безопасная реакция и оценка пути до остановки
Состояние Git до реализации
- Корень: C:/Users/user/Desktop/projects/SDR_Rover
- Ветка: main
- HEAD: 23cfdf581b63d2674e7c48965aea45cc5afff2d7
- Перед окончательным повторным запуском рабочее дерево содержало только новые файлы Lab039; индекс был пуст.
- Неизвестных изменений не было; локально известный origin/main имел ahead/behind 0/0.
- Lab036Lab038 присутствовали; 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 и не закоммичена.
- Lab028Lab038 не изменялись.
- Сохранены только компактные агрегированные CSV, TXT и PNG; запрещённые артефакты не создавались.