19 февраля, прошел наш отборочный тур. На соревнование было представлено всего 2 участника - мы и ещё одна "семейная команда". Наш противник - оказался тоже Андрей и примерно тогоже возраста, но представил гусеничный вариант тележки на базе Ардуино 2560, 4-х Li-ion 18650 аккумуляторов, 8-и аналоговыми датчиками и парой мощных и скоростных моторов (покупные). Какой был драйвер моторов - не разглядел. Балансировка моторов осуществлялась регулировкой подаваемого на них напряжения двумя DC-DC преобразователями с ручной подстройкой. Программа, со слов его папы, написана полностью на С/С++ с активным использованием прерываний как для замера дальности, так и для работы аналоговых датчиков, без применения wiring. Из особенностей, папа указал на специальную "процедуру доворота" хорошо удерживающую гусеничный вездеход на трассе.
Заявленная скорость движения папой по трассе "может до 10-11сек", практически достигнутая 13.8 - 14.2сек. Очень красиво смотрелся на горке, перелетая её по воздуху. Размер робота 195х195мм.
Нами был представлен колесный вариант, поначалу на мелкой и узкой 62х20 резине от набора 42009 со скользящими передними колесами (вперед катятся, но легко скользят вбок), 5-ю аналоговыми датчиками, мосфетным драйвером моторов и 2-я Li-ion 18650 аккумуляторами с нашей парой "синих моторов" (они участвовали на городских соревнованиях, но с 81 резиной). Размер тележки 165х180мм (значительно уже и мельче противника).
Типа этой - "Адская колесница" (2-я версия уже на больших колесах):
Использована Ардуино Нано. Ожидаемое время прохождения трассы "до" начала 13-14сек. Практически показанное на этих колесах 16сек. (первая квалификация). Программно остановились на табличном ПД-регуляторе без предсказателя поворотов (решили что обойдется и так), все сделано ребенком на базе Ардублока, соответственно замер расстояний - в основном цикле с ограничением таймаута до 2мсек (ок 30см) и контрольным расстоянием в 20см. ПД-регулятор получал значения с датчиков (dir): -6, -4, -3, -2, -1, 0, 1, 2, 3, 4, 6, где -6 и 6 -- потеря линии слева и справа соответственно. Внешнее колесо в поворотах тупо ускорялось с шагом приращения до макс. скорости поворота, а внутренне колесо вычислялось как доля от скорости внешнего колеса по таблице tblProps[abs(dir)] +- значение из таблицы tblDiffs[abs(dir)] в зависимости от того ухудшалась ситуация в повороте или улучшалась (отклонение больше/меньше предыдущего) или +0, если без изменений. Соответственно, практически каждое значение tblProps представляло собой комплект соотношения скоростей для того или иного радиуса поворота. Собственно и всё, что можно было внятно разъяснить ребенку по "ПИД регуляторам" на его уровне знаний.. при возврате на прямую (dir=0), при значительной разнице скоростей колес работал алгоритм выравнивания, который замедлял быстрое колесо на нек. значение и ускорял внутреннее на двойное значение. Значение вычислялось от разницы скоростей колес, но ограничивалось сверху, чтобы не получить "потерю контакта с дорогой". Никаких особых выкрутас, только то, что доступно 10-и летнему ребенку с несколько расширенным знанием (отрицательные числа, дроби).
После обеда наш поменял резину на 81х38 и размер тележки вырос до 195х195мм, скорость движения поднялась до 13.8сек на тренировке, но вот пройти квалификацию нашему не удалось и время зафиксировано так и не было. Тем не менее, до финала были допущены обе машинки, перед финалом наш противник поменял батарейки, наш так и остался на одном комплекте (то ли забыл, то ли не стал менять, домашний замер показал 4.01в из 4.2 до соревнований).
Из проблем второй тренировки и второй квалификации внезапно оказалось, что наш противник крайне плохо проходит перекрестки, путаясь и поворачивая не в ту сторону, особенно после горки. Замеры зрителей на тренировке стабильно показывали 13.5 - 13.9сек. при удачном прохождении трассы. Вторая его особенность - неверная настройка датчика препятствий - он был подготовлен для обнаружения .. балки и снижения скорости перед ней, вместо поиска противника на трассе. Этот момент вызвал бурную дискуссию папы с судьей: будет ли считаться столкновение при догоне за ошибку и дисквалификацию. Папа аргументировал съемкой Робофест 2017 Урал, где такое НЕ засчитали как дисквалификацию и победу получил тот, кто догнал и столкнулся, но наш судья твердо настоял на том, что это будет проигрыш (позже выяснилось что таки "засчитали" и сняли участника). .. не знаю, но ребенок что-то там переделывал или подстраивал, но на второй квалификации он уже изрядно нервничал и истерил. Его папе пришлось дважды заходить в соревновательную зону и в присутствии судьи (разрешено правилами) успокаивать его. Квалификацию они прошли на 14.2сек.
Из наших проблем перед второй квалификацией - замена колес и полная перенастройка всей табличной части управления (все значения пропорциональной и дифференциальной составляющей, все предельные ограничения параметров макс. скорости по прямой, в повороте, возврата на прямую и шага приращения скоростей) .. настроить робота до конца ему так и не хватило времени тренировки. Вторая проблема .. контакты. Аналоговые датчики периодически "отходили" по одному и автоподстройка работала просто отвратительно. Но, окончательно догадались только уже придя домой. В результате, обе попытки второй квалификации наш робот "не поехал".
Перед финалом, наш решил полностью убрать автонастройку датчиков с ручными покатушками и проставить значения, которые собирался замерить на трассе .. но тут пришла руководитель соревнований и .. попыталась запретить выход с ноутбуком на трассу, грубо наорав на моего сына. К счастью, судьи заступились, разъяснив ей что это не запрещено регламентом. В результате, провозившись с ноутбуком у трассы, убрать до конца он так и не успел (было 30мин, он решил вставить новые массивы "белое" и "черное" и оставить вычисление уровня вместо того, чтобы тупо записать массив уровней и его использовать .. нервы, нервы.. мышиное управление картинками в глючащим и валящимся ардублоке .. тоже ещё то занятие .. перегружал с его слов раза 3 всю Ардуино ИДЕ) и вернул все "на родину".
Финал обещался быть классным: 2 соперника, с примерно равными роботами .. судья объявил что будет и горка и балка, надо будет ехать 3 заезда по 5 кругов, столкновения не допускаются ни в каком виде .. зрителей осталось вполне достаточно .. первый заезд наш проиграл вчистую: его робот потеряв контакт с боковым датчиком поехал в сторону вместо трассы. Обидно, но бывает.
Второй заезд. Среди зрителей напряги, обсуждения, споры (два соседа-зрителя чуть не подрались из-за "нужна ли горка вообще?"), дети на взводе "не подходи" .. нашему досталась внешняя дорожка (наконец-то, удобнее стартовать) и .. старт! И .. поехали! Первые полкруга прошли достаточно уверенно. Обнаружив противника на внешней линии, наш остановился и соответственно приотстал на втором (нашем первом) внутреннем развороте, прямая у нас балка у него горка .. полет нормальный, пройден перектресток гусеничным вездеходом, наш на амортизаторах, балку даже и не заметил и тоже быстро пошел в разгон, догоняя противника .. второй внутренний (для нас) разворот и .. он снова ловит вездеход на датчик препятствий, идущий по внешней линии и останавливается в паре сантиметров! и тут .. вездеход заруливает к нашему роботу и пинает его в переднее колесо (потом на видео, было хорошо видно как с него полетел декоративный светящийся диск Лего) .. вот она - особенность: "процедура доворота" его папы .. в зале крики "зацеп!", пока судьи остановили заезд, роботы успели пройти перекутресток без проишествий (наш опять успел тормознуть и пропустить противника) и подъезжали к горке и балке .. по мне так не надо было останавливать такой шикарный заезд .. но, решает судья и заезд был остановлен.
По факту просмотра нашего видео (его папа был в лучшей позиции, но видео показывать не стал), было решено что неоднозначно и заезд ПЕРЕИГРЫВАЕТСЯ. Нам поменяли дорожки и .. тут случилось невероятное для такого зажигательного финала: второй участник впал в полную истерику и отказался продолжать заезд .. уговаривали все и я и его папа и судьи .. абсолютно невменяемая истерика, бросание стульями и т.д. Ребенок не слышит ничего вовсе .. какая жалость .. прошло минут 10 и внезапно нарисовалась руководитель соревнований. Поуговаривав истрящего ребенка пару минут, она объявила что "настройка робота должна быть ограничена 10секундами" (нашему, тот тоже был близок к истерике и ходил кругами), а гусеничный вездеход запустит .. тренер (папа, есть видео!) .. и победа будет присуждена только по этому заезду. Уже дома и позже, найдя это видео и пересматривая его, спросил своего: "А почему твоя машинка поехала в сторону?" и получил ответ от сына: -"Ну, папа! Я же пришел не с его папой соревноваться. Просто недонастроил датчики и отправил мимо трассы .. ну раз так хотят - пусть выиграют"..
Аргумент - "Вы же видите - это особенный ребенок!". Запуск .. наш робот едет в сторону игнорируя линию .. первое место присуждено второму Андрею, в зале среди зрителей куча возмущенных голосов..
.. по завершению соревнований .. нам предложено поехать в Москву .. мы - согласились.