✦RLT.Hack — 5 место✦Хакатон Московского транспорта — 3 место, 200 000 ₽✦КосмоХакатон 2026 · финал — финалисты✦КосмоХакатон 2026 — 3 место, 100 000 ₽✦Хакатон MAX — итоги ещё не объявили✦Sber × AIRI — не в призах✦AIOS — не в призах✦Ozon Hackathon — не в призах✦наберите «восторг» на клавиатуре
← все проекты
NDV-007

Трамвай без GNSS

Резервная одометрия беспилотного трамвая — скорость и положение только по телеметрии вагона.

III место200 000 ₽код открыт ↗
Хакатон
Хакатон Московского транспорта
Организатор
Московский транспорт
Даты
25–27 сен 2026
Коммитов
650
СтекROS 2PythonC++
недо-

На хакатоне Московского транспорта нам не хватило двух ступенек пьедестала

Третье место и 200 000 ₽. До первого — две ступеньки.

Кто был в этот раз5 человек

Состав: m1x, Ivan Banan, Chichetin, IR6, GG-crypto.

Кейс

Беспилотный трамвай теряет спутниковую навигацию: среди плотной застройки GNSS, приёмник координат со спутников, врёт или молчит. Инерциального блока (IMU, акселерометры и гироскопы) нет. Нужна резервная одометрия — оценка скорости и положения по собственным датчикам вагона. Их три: ручка контроллера водителя и скорости передней и задней тележек. GNSS разрешён только в первые секунды, для начальной выставки.

Колёса — ненадёжный свидетель. На разгоне они проскальзывают, при торможении идут юзом, со временем изнашиваются. Связь контроллера с тягой нелинейная. И считать надо в реальном времени: задержка до 100 мс, от 10 обновлений в секунду, два ядра и полгигабайта памяти.

Что сдали

Пакеты ROS 2 Humble собираются обычным colcon build без интернета. Нода слушает телеметрию и в реальном времени публикует скорость в /result/velocity и положение в /result/position, а в диагностику — флаги проскальзывания. К коду приложены описание модели, таблицы точности и инструкция для жюри «проверка за 5 минут».

Как устроено

  • Предобработка: скорости тележек переводятся из км/ч в м/с, выбросы и сообщения с откатившимся временем отбрасываются.
  • Модель привода: таблицы ускорения по позиции контроллера и скорости подобраны на обучающих записях, с учётом сопротивления движению, сцепления и мощности.
  • Фильтр Калмана держит скорость и поправку к модели. Модель даёт прогноз, колёса его уточняют — с тем весом, которого они сейчас заслуживают.
  • Детектор проскальзывания сравнивает тележки между собой и с моделью. Если обе разгоняются быстрее, чем позволяет привод, или тормозят сильнее, фильтр перестаёт слушать колёса и едет по модели.
  • Положение: первые 5 секунд GNSS ставят трамвай на ветку карты маршрута, дальше он движется вдоль неё на пройденный путь.
  • На стоянках путь подтягивается к ближайшей известной остановке, заодно уточняется масштаб колеса.

Цифры

  • 122 записи в формате ROS 2 bag — запись всех сообщений вагона, которую можно проиграть заново. 25 пар среди них оказались побайтными копиями. 26 записей из отдельных дней отложили на проверку.
  • 0,032 м/с — медианная RMSE (среднеквадратичная ошибка) скорости против GNSS на отложенных записях. Худший случай — самый длинный прогон на 31,6 минуты: 0,16 м/с.
  • 2,19 м — медианная ошибка положения вдоль пути. Прямой по курсу без карты было 3 264 м.
  • 0,028 м/с и 1,86 м — ошибки скорости и положения на примере организаторов, посчитанные их же проверочным кодом.
  • 2,4 мс — задержка выхода в 99 % случаев при лимите 100 мс. Нода выдаёт около 39 обновлений в секунду и берёт 65 МБ памяти.
  • 12 стресс-сценариев с пропусками и шумом датчиков — ноль падений.

Что было трудно

По описанию скорость тележек в м/с, на деле в км/ч. Метки времени ходят назад, а задняя тележка одного трамвая молчит до 73 секунд. Карту путей упомянули в критериях, но не выдали. Без IMU нет курса, и на первом повороте прямая улетает на сотни метров. Карту маршрута собрали сами из GNSS обучающих записей.

Последний сюрприз пришёл в день сдачи. Организаторы уточнили, что судья сравнивает положение в абсолютной сетке координат, а не от точки старта. Со старым форматом ошибка была бы около 130 километров на каждой записи, и баллы за положение обнулились бы при любой точности. Успели переделать. Ограничения записали честно: между вариантами выбирали и по отложенным записям, так что чистым тестом их не назовёшь. А согласованный юз обеих тележек без IMU пока не отличить от обычного хода.

Как это выгляделонажмите на кадр, чтобы рассмотреть

следующий · NDV-006FloodValue →