Engineering
Беспилотный шаттл
Прокатитесь на беспилотном электрическом шаттле по университетскому кампусу ночью после дождя. Он рулит методом чистого преследования (pure pursuit) — целится в точку впереди на маршруте с кривизной 2 sin(alpha)/L_d, ровно 1/R на окружности, — замедляется до sqrt(a_lat/kappa) перед каждым поворотом, останавливается точно у отметки на двух остановках в пределах комфортных замедления и рывка и следит за дорогой веером лучей лидара. У зебры ждёт пешеход: шаттл видит её и уступает дорогу. Выключите правило уступания — и она шагнёт на дорогу в 14 м впереди; экстренная остановка займёт расстояние по замкнутой формуле v tau + v^2/2a + v a/2j; дайте восприятию задержку 1,2 с — и шаттл до неё доедет; поставьте фургон перед зеброй — и она будет скрыта, пока не окажется на полосе. Попробуйте сухой асфальт и мокрую листву и проследите каждый джоуль от аккумулятора в моторы, воздух, шины и тормоза и обратно через рекуперацию.

Что происходит
Шаттл массой 3000 кг (2400 кг и 8 пассажиров) проезжает 116,8-метровое кольцо по кампусу, 76 + 13π м, с поворотами радиусом 5 и 8 м. Кинематическая велосипедная модель относительно задней оси, колёсная база 3 м: θ’ = v·tan δ/L. Чистое преследование целится в точку маршрута на L_d = 2 m + 0.6 s·v впереди и задаёт κ = 2 sin α/l_d, ровно 1/R на окружности; рулевой сервопривод поворачивает не быстрее 0,7 рад/с и не дальше 35°. Планировщик держит крейсерскую скорость, ограничение в повороте √(a_lat/κ) с a_lat = 1,2 м/с² (никогда не выше μg/2) с того места, где точка упреждения входит в поворот, и 2 м/с у зебры, пока рядом кто-то ждёт; для поворотов, следующей остановки и препятствия он начинает тормозить, как только комфортное замедление — рывок 1,5 м/с³ до 0,96 м/с², затем постоянное — требует всего оставшегося расстояния, а затем следует v²/2d до ограничения, в пределах 1,2 м/с² и ограничения рывка. Двумерный лидар на бампере испускает 121 луч в секторе 120° с частотой 10 Гц, дальность 30 м, шум 2 см от фиксированного зерна, по стенам, столбам, деревьям, фургону и пешеходу; попадания в пределах 1,5 м от маршрута впереди считаются препятствиями. Планировщик видит каждое сканирование после задержки (0,3 с); если время до столкновения меньше, чем нужно для комфортной остановки, он тормозит без обратной связи с рывком 20 м/с³ до min(6, 0.9μg) м/с² и останавливается на v·τ + v²/2a + v·a/2j − a³/24j² от момента сканирования (μ = 0,85, 0,55, 0,3). Движение точное по участкам: постоянный рывок на отрезке не длиннее 10 мс при неподвижном руле — дуга окружности пройденной длины; остановка, конец нарастания торможения и моменты задержки находятся внутри шага. Работа на колёсах по четырёхточечной квадратуре Гаусса: аккумулятор = тяга/0,9 + 2 кВт вспомогательных систем − 0,7 × рекуперированное торможение (не более 40 кВт), остальное торможение нагревает фрикционные тормоза; баланс сходится с точностью до округления.
Что попробовать
Посмотрите круг: скорости в поворотах, остановки точно у отметки и уступание дороги у зебры; выключите правило уступания и сравните остановку с расстоянием по замкнутой формуле; увеличивайте задержку, пока шаттл не доедет до пешехода; выберите фургон; попробуйте мокрую листву; сократите время упреждения и следите за рулём.
Модель и её ограничения
Кинематическая велосипедная модель: без проскальзывания шин и поперечной динамики, трение лишь ограничивает экстренное торможение и скорость в повороте; учебный планировщик, а не сертифицированный автопилот или нейросеть. Лидар сканирует одну плоскость по окружностям и отрезкам, без помех от дождя, кластеризации и сопровождения целей; пешеход следует сценарию и не прогнозируется сверх правила зебры; контакт отмечается, а не моделируется. Ветвь мотора или рекуперации выбирается для каждого 10-мс участка по суммарной работе на колёсах; аккумулятор — накопитель энергии с постоянными КПД. Одно кольцо по кампусу в натуральную величину, без другого транспорта.
Уравнения модуля
Уравнения θ’ = v·tan δ/L, κ_cmd = 2·sin α/l_d, L_d = L0 + k·v, on a circle α = L_d/2R, so κ = 1/R v_curve = √(a_lat/κ), brake when d ≤ D(v, a, v_c); then a = −(v² − v_c²)/2d, |a| ≤ a_c, |da/dt| ≤ j TTC = d/v; emergency if d − 1 m < D_comfort; s_stop = v·τ + v²/2a_e + v·a_e/2j_e − a_e³/24j_e², a_e = min(6, 0.9·μ·g) E_batt = W_trac/η_m + E_aux − η_r·W_regen, W_trac − W_brake = ΔE_k + F_r·s + ∫c·v³ dt


