ИнфраструктураHabr AI→ оригинал

Робот R-D6 на Arduino Uno доставляет груз в браузерном городе с физикой и пешеходами

PinPort — это онлайн-лаборатория, где в браузере собираешь схему, пишешь скетч для Arduino и видишь результат на эмуляторе. На этот раз создатели расширили её виртуальным городом с машинами, светофорами и пешеходами — и отправили туда 6-колёсного робота R-D6, который возит грузы из пункта A в пункт Б. Робот управляется не JavaScript, а обычным скетчем Arduino Uno, компилируется на сервере через arduino-cli и исполняется на эмуляторе ATmega328P. Эмулятор работает на частоте 16 МГц, синхронизирован с физическим движком Rapier (шаг 2 мс). Лидар и навигатор подключены по I2C, датчики реализованы как регистры, управление моторами через ШИМ и драйвер L298N. • **Город**: сетка 3×3 с шагом 32 м, 8-метровые дороги в обе стороны, 3-метровые тротуары, 5 светофоров (цикл 50 с: 20 зелёный, 3 жёлтый, 2 все красные) • **Динамика**: 12 машин ездят по полосам, 20 пешеходов ходят по тротуарам и переходят дорогу с вероятностью 0,4, роботу уступают при приближении ближе 1,7 м • **Надёжность**: детерминизм через mulberry32, один скетч — один результат, работает одинаково на разных компьютерах

AI-обработка оригинала Habr AI; редакция Hamidun News
Робот R-D6 на Arduino Uno доставляет груз в браузерном городе с физикой и пешеходами
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Городсетка 3×3 с шагом 32 м, 8-метровые дороги в обе стороны, 3-метровые тротуары, 5 светофоров (цикл 50 с: 20 зелёный, 3 жёлтый, 2 все красные)
Динамика12 машин ездят по полосам, 20 пешеходов ходят по тротуарам и переходят дорогу с вероятностью 0,4, роботу уступают при приближении ближе 1,7 м
Надёжностьдетерминизм через mulberry32, один скетч — один результат, работает одинаково на разных компьютерах

PinPort — онлайн-лаборатория для обучения робототехнике, где в браузере пишешь скетчи Arduino и видишь результат на эмуляторе. Разработчики создали 3D-город с машинами, светофорами и пешеходами, по которому ездит шестиколёсный робот R-D6. Он управляется настоящим скетчем Arduino Uno, компилируется на сервере через arduino-cli и исполняется на эмуляторе ATmega328P. Робот должен доставить заказ из точки A в Б, соблюдая правила дорожного движения.

Архитектура: три синхронизированных слоя

Система состоит из трёх частей, движущихся в едином темпе: эмулятор AVR (16 МГц, ШИМ, I2C, UART), физический движок Rapier (шаг 2 мс), город с логикой светофоров и пешеходов. Плата и физика работают поочередно: два миллисекунды эмуляции, затем физический шаг.

Датчики реализованы как I2C-регистры. Лидар (адрес 0×52) отдаёт 36 секторов по 10° с частотой 10 раз в секунду, дальность 20 м. Навигатор (0×53) обновляется 50 раз в секунду и выдаёт положение, курс, угол на цель, расстояния. Лидар состоит из трёх лучей в каждом секторе (−3°, 0°, +3°), берётся ближайшее попадание. Управление моторами через ШИМ на выводах ENA/ENB и уровни драйвера L298N. Встроенная библиотека RD6.h читает скан лидара (72 байта) тремя кусками по 24 байта, так как буфер Wire составляет всего 32 байта.

Город и его обитатели

План — сетка 3×3 с шагом 32 м, проезжая часть 8 м в каждую сторону, тротуары 3 м. Пять светофоров на перекрёстках (50-секундный цикл: 20 зелёный, 3 жёлтый, 2 все красные). Двенадцать машин ездят по полосам, держат дистанцию, на перекрёстке выбирают поворот случайно. Развороты: направо (радиус 2 м), налево (6 м).

Двадцать пешеходов ходят по петлям вдоль тротуаров. На зебре с вероятностью 0,4 решают перейти, на зелёный начинают переход, на мигающий — нет. Роботу пешеходы уступают: если он приближается ближе чем на 1,7 м, человек останавливается и через 0,6 с отступает. Машины и пешеходы — физические тела в Rapier, поэтому лидар их видит наравне с домами, а столкновения — реальные контакты в движке.

Маршрут строится алгоритмом Дейкстры по графу. Навигатор выдаёт направление не на следующую точку, а на «морковку» — позицию в 2,5 м впереди (классический pure pursuit). Без этого робот срезал бы к далёким точкам, отклонялся к бордюру и вставал перед деревьями (они растут через каждые 8 м). С морковкой робот держится середины тротуара и центра зебры. Окна на фасадах рисуются через 2,6 м по горизонтали и 3 м по вертикали. Финиш регистрируется, когда центр робота ближе 1,5 м к пункту Б.

Детерминизм и повторяемость

Вся система спроектирована ради одного результата на слабом ноутбуке и мощном компьютере. Три правила: случайность только из mulberry32 с фиксированным зерном, время исчисляется шагами физики (без Date.now()), решения машин и пешеходов принимаются раз в 20 мс на фиксированной сетке.

Проверка: прошивку запускают дважды с разной нарезкой времени (2 и 7,3 мс за вызов), сравнивают хеш состояния мира — совпадают. На соревновательной арене сервер гоняет прошивку участника в Node.js на тех же модулях, что браузер, и хеши совпадают до последнего знака.

Автопилот из пяти правил прошёл все 12 комбинаций «маршрут × случай» без нарушений. Доставка занимает 65–135 секунд модельного времени. Расширения: ночь (около 45% окон зажжены по хешу этажа и пролёта), час пик с 40 пешеходами, ремонт тротуара. Отрисовка на собственном WebGL-рендере без движков: дома как коробки, окна рисует фрагментный шейдер. Камера едет за роботом и поднимается, если дом его закрывает. Кроны деревьев на линии взгляда не рисуются. Доступен вид сверху на Canvas 2D для отладки: видны маршрут, сигналы всех светофоров и лучи лидара.

Вопросы и ответы по материалу

Что известно по теме: архитектура: три синхронизированных слоя?

Система состоит из трёх частей, движущихся в едином темпе: эмулятор AVR (16 МГц, ШИМ, I2C, UART), физический движок Rapier (шаг 2 мс), город с логикой светофоров и пешеходов. Плата и физика работают поочередно: два миллисекунды эмуляции, затем физический шаг. Датчики реализованы как I2C-регистры. Лидар (адрес 0×52) отдаёт 36 секторов по 10° с частотой 10 раз в секунду, дальность 20 м. Навигатор (0×53) обновляется 50 раз в секунду и выдаёт положение, курс, угол на цель, расстояния. Лидар состоит из трёх лучей в каждом секторе (−3°, 0°, +3°), берётся ближайшее попадание. Упра

Что известно по теме: город и его обитатели?

План — сетка 3×3 с шагом 32 м, проезжая часть 8 м в каждую сторону, тротуары 3 м. Пять светофоров на перекрёстках (50-секундный цикл: 20 зелёный, 3 жёлтый, 2 все красные). Двенадцать машин ездят по полосам, держат дистанцию, на перекрёстке выбирают поворот случайно. Развороты: направо (радиус 2 м), налево (6 м). Двадцать пешеходов ходят по петлям вдоль тротуаров. На зебре с вероятностью 0,4 решают перейти, на зелёный начинают переход, на мигающий — нет. Роботу пешеходы уступают: если он приближается ближе чем на 1,7 м, человек останавливается и через 0,6 с отступает. Машины

Что известно по теме: детерминизм и повторяемость?

Вся система спроектирована ради одного результата на слабом ноутбуке и мощном компьютере. Три правила: случайность только из mulberry32 с фиксированным зерном, время исчисляется шагами физики (без Date.now()), решения машин и пешеходов принимаются раз в 20 мс на фиксированной сетке. Проверка: прошивку запускают дважды с разной нарезкой времени (2 и 7,3 мс за вызов), сравнивают хеш состояния мира — совпадают. На соревновательной арене сервер гоняет прошивку участника в Node.js на тех же модулях, что браузер, и хеши совпадают до последнего знака. Автопилот из пяти правил прош

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ AI для бизнеса и команд

Внедрение ИИ, корпоративные воркшопы и AI-консалтинг

Экспертиза Жемала Хамидуна (hamidun.com) (CPO AlpinaGPT): аудит процессов, разработка AI-стратегии, кастомные RAG/агентные системы и обучение продуктовых команд.

Обсудить внедрение ИИ →Платформа NomadNet AI
Что вы думаете?
Загружаем комментарии…