19

Да будет онлайн битва роботов на Arduino⁠⁠

Я построил для вас роботов, а вам остаётся только запрограммировать их. Паяльник покупать не нужно, L298N из Китая ждать тоже: Uno, драйвер моторов, дальномер и датчики линии уже собраны и работают прямо в браузере. И это не мультяшная анимация. Робот там честно падает, буксует и вылетает с ринга по законам физики.

Мой первый колесный робот, но есть и другие!

Мой первый колесный робот, но есть и другие!

Что за Rotor

Rotor это виртуальный колёсный робот. Его подключение я сделал один в один как у популярного набора:

  • Arduino Uno

  • драйвер моторов L298N

  • ультразвуковой дальномер HC-SR04

  • датчики линии TCRT5000

То есть скетч, который вы отладили в симуляторе, можно залить в настоящего робота из такого набора. На схеме у Uno задействованы выводы GND, A4, A5, D5, D7, D8, D6, D9, D10, D11, D12, A0, A1, A2, D2, D3. Всего 16 соединений.

Важный момент: скетч не говорит роботу "встань вот в такую позу" или "проедь два метра". Он делает ровно то же, что и на реальном железе: выставляет уровни на выводах драйвера L298N и читает датчики. А куда робот в итоге поедет, решает физический движок.

Правила соревнований по мини-сумо

Правила мини-сумо простые: два робота на круглом ринге, кто вытолкнул соперника или не съехал сам, тот и молодец. По правилам робот должен помещаться в 10 × 10 см и весить не больше 500 г, а после старта по команде стоит 5 секунд. Rotor этим габаритам соответствует.

В моём примере вместо соперника коробка. Ринг 77 см, чёрный с белой каёмкой.

Алгоритм у робота такой:

  1. Крутится на месте и меряет расстояние дальномером.

  2. Если что-то ближе 60 см, это цель, и он едет вперёд на полной мощности.

  3. Датчики линии замечают белую каёмку раньше, чем колёса доедут до края. Тогда робот сдаёт назад и разворачивается внутрь ринга.

  4. Коробка, которую довезли до края, падает с помоста. Победа.

В симуляторе я поставил задержку перед стартом 1 секунду, чтобы не скучать. Если хочется как на соревнованиях, ставите START_MS = 5000.

Весь скетч занимает 75 строк. Свои функции в нём: motor(), drive(), distanceCm() и onEdge(). Дополнительных библиотек не нужно, хватает штатного ядра Arduino AVR.

Как смотреть

Нажимаете «Запустить», и после сборки открывается окно робота. Есть режим «Вид сверху»: плоский план с разметкой, следом робота, лучом дальномера и стрелками моторов. Обвод датчика линии становится красным, когда он стоит на чёрном. В строке состояния видно напряжение на моторах в процентах и показания датчиков.

Проект можно форкнуть, поменять код и запустить заново, ничего не ломая.

Почему это не анимация: физика под капотом

Самое интересное тут движок. Робот это трёхмерная модель с массами, шарнирами и трением, а считает её Rapier 3D (версия 0.21), физический движок с открытым кодом, собранный в WebAssembly.

Что стоит знать:

  • Детерминизм. Я взял сборку deterministic: одни и те же входные данные дают одинаковый результат до последнего бита на любом компьютере и в любом браузере. Если робот упал, падение можно повторить и разобрать по кадрам. Случайных чисел и шума нет.

  • Плата и физика идут в ногу. Прошивка исполняется 2 мс модельного времени, затем физика делает один шаг мира тоже на 2 мс, и так по кругу. Это 500 шагов в секунду. Время модельное: millis() и micros() в скетче считают время прошивки, а не часы компьютера. Слабый компьютер покажет движение медленнее, но результат будет тем же.

  • Один код в трёх местах. Тот же код считает робота в браузере (в фоновом потоке), в node (тесты) и на сервере (проверка уроков). Поэтому задание, пройденное в браузере, засчитывается и сервером.

  • Единицы СИ. Метры, килограммы, секунды, ньютон-метры, тяжесть 9,81 м/с². Оси мира: Y вверх, Z вперёд, X влево.

  • Точный решатель. 20 итераций на шаг и допуск проникновения 0,3 мм. С допуском по умолчанию (5 мм) стопа шагающего робота проседала краем в пол и опрокидывалась, так что мне пришлось повозиться.

Трение сухое, по Кулону. Пол и подошвы имеют коэффициент 1,0, остальные звенья робота 0,6, а предметы вроде кубика и мяча 0,8 с упругостью 0,1. Коробка в сумо как раз такой предмет: она сталкивается со всем, в том числе с самим роботом.

Весит движок около 4 МБ и грузится только на страницах, где в схеме есть робот.

Честно об упрощениях

Сразу скажу, где модель идеальна:

  • у моторов нет люфта, нагрева, падения напряжения и просадки батареи;

  • звенья абсолютно твёрдые и не гнутся;

  • колёса и подошвы жёсткие, резина не сминается;

  • у датчиков нет шума и смещения нуля.

Так что симулятор отлично учит логике: поиск цели, реакция на край, развороты. А вот настоящую мощность моторов и сцепление колёс с реальным рингом всё равно придётся подбирать руками.

Что попробовать

  • Поставить START_MS = 5000, как на настоящих соревнованиях.

  • Искать цель, вращаясь то в одну, то в другую сторону. Найдётся ли коробка быстрее?

  • Переключиться на площадку «Ринг сумо» без коробки и проехать по рингу минуту, ни разу не съехав.

  • Заменить delay() на счёт по millis(), чтобы loop() освободился для параллельных задач.

  • Добавить Serial.println() в интересных местах: монитор порта здесь служит отладчиком.

Робот построен, ринг готов. Ваш ход: пишите свой алгоритм и устраивайте битву.

Ссылки

Arduino & Pi

1.5K поста20.9K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

2
Автор поста оценил этот комментарий

Что дальше. Планирую открытые турниры на сайте: заявляете своего робота, пишите свой скетч на C++, он дерётся с роботами других участников, а повторы матчей можно смотреть в браузере.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества