Мой блог
Симуляция 3D-города для робота-курьера на Arduino
Онлайн-лаборатория пополнилась новой виртуальной средой для обучения робототехнике, где шестиколёсный робот выполняет доставку заказов. Разработчики создали интерактивный трехмерный город с детальной дорожной сеткой, пешеходами, автомобилями и светофорами, управляемый реальным скетчем микроконтроллера.
Проект направлен на практическое освоение алгоритмов навигации и программирования. Виртуальный аппарат функционирует под управлением стандартного кода для платформы Arduino Uno, исполняемого внутри эмулятора.


Архитектура взаимодействия платы и физического мира
Программная платформа объединяет три ключевых компонента, функционирующих синхронно. Эмулятор AVR выполняет скомпилированную прошивку с тактовой частотой 16 МГц, обрабатывая таймеры, интерфейсы I2C, UART и широтно-импульсную модуляцию. Физический движок Rapier обсчитывает твердые тела, включая корпус робота и его шесть ведущих колес, с шагом мира в 2 миллисекунды. Локальная логика города управляет поведением транспортных средств и пешеходов в том же физическом пространстве.
Процессорные вычисления и шаги физического мира чередуются: за двумя миллисекундами работы контроллера следует один расчетный шаг окружения. Специальный программный класс считывает параметры ШИМ и уровни сигналов с выводов виртуального драйвера моторов, преобразуя их в физические усилия. Обратная связь передается на цифровые выводы и шину I2C. Подобная организация гарантирует полную повторяемость результатов независимо от производительности компьютера, что критично для систем автоматической проверки и серверных заездов.
Датчики и их эмуляция через регистры I2C
Для обмена данными с лидаром и навигационной системой применяется простая схема на основе файлов регистров I2C. Первый байт операции записи указывает на целевой регистр, после чего производится последовательное чтение параметров. Такой подход имитирует работу реальных интегральных датчиков и микросхем.
Измерения лидара охватывают 36 секторов с шагом 10 градусов, передавая дистанцию и номер оборота десять раз в секунду. Навигационная система обновляет координаты, курс, углы на цель и статусы светофоров с частотой 50 Гц. Поскольку общий объем скана лидара превышает стандартный буфер интерфейса Wire, встроенная библиотека считывает массив данных порциями. Лучи лидара моделируются с помощью лучевых запросов в движке Rapier по три луча на сектор, что позволяет надежно фиксировать даже узкие препятствия вроде столбов светофора.
Инфраструктура городского пространства и участники движения
Виртуальный мегаполис построен на базе сетки улиц с размером блоков 32 на 32 метра. Проезжая часть включает полосы движения в обоих направлениях, тротуары и оборудованные пешеходные переходы. На перекрестках функционируют светофоры со стандартными циклами смены сигналов, включая разрешающие, запрещающие и промежуточные фазы.

Автомобили движутся по полосам, соблюдают дистанцию, останавливаются на запрещающий сигнал и выполняют повороты по дугам заданного радиуса. Пешеходы передвигаются по тротуарам и могут принимать решение о пересечении проезжей части на разрешающий свет. Сами пешеходы уступают дорогу роботу, останавливаясь или отступая при сближении. Все объекты движения обрабатываются как кинематические тела, поэтому лидар фиксирует их наравне с элементами статической инфраструктуры.
Навигация по траектории и судейская система
Построение маршрута между точками назначения реализуется с помощью алгоритма Дейкстры на основе графа улиц и переходов. Управление движением строится на методе преследования целевой точки, находящейся на небольшом расстоянии впереди по линии пути. Это позволяет роботу стабильно удерживаться в центре тротуара и не отклоняться к элементам ландшафта.
Параллельно функционирует виртуальный судья, фиксирующий достижение конечной точки, пересечение проезжей зоны в неположенных местах, выходы на запрещающий сигнал светофора и любые физические столкновения. Фиксация нарушений происходит регулярно путем опроса контактов физического мира.
Обеспечение строгого детерминизма
Стабильность работы всех алгоритмов достигается за счет жестких правил генерации случайных величин, привязки времени исключительно к шагам физического симулятора и дискретности принятия решений. Случайные события опираются на генератор с фиксированным начальным значением зерна, исключая использование системных таймеров реального времени.
Корректность моделей проверяется сравнительным тестированием прошивки при разной нарезке шагов времени с последующей сверкой хэша состояния виртуального мира. Серверные тесты подтверждают идентичность результатов локальных запусков и серверной обработки в среде Node.js.
Визуализация среды и результаты испытаний
Отрисовка трехмерного пространства выполняется компактным графическим рендером без подключения тяжелых сторонних движков. Архитектурные элементы и оконные проемы генерируются процедурно с помощью фрагментных шейдеров, активирующих подсветку в вечернее время суток на основе хэш-функций. Для отладки предусмотрен дополнительный двумерный вид сверху, наглядно отображающий траектории движения, лучи датчиков и состояние светофорных объектов.

Тестирование базового автопилота продемонстрировало успешное прохождение всех тестовых маршрутов без нарушений правил. Полноценная среда включает дополнительные сценарии с ночным временем суток, интенсивным пешеходным трафиком и дорожными работами, требующими объезда препятствий.
