Требуется обновление браузера.

Apitor SuperBot


Просмотров: 1043
07 мая 2021 года
Цитата
– Да ведь именно из них состоит машина! – догадался Кротик. – Значит, мне просто нужно собрать все эти детали и сделать из них свою машину.

В детстве, когда стоимость товаров, рекламируемых по телевидению (и ставших доступными в резко сменивших целевую аудиторию магазинах), существенно превышала ту, что мог позволить себе круг моего общения, я узрел следующий лот. Это была, в общем-то, бестолковая игрушка, потому, включать её в какой-либо список желаемого можно было даже и не пытаться: так, из разряда грёз без вступления, заключения и выводов - вроде личного вертолёта. Представлял собой этот продукт «из иной реальности» радиоуправляемый игрушечный автомобиль, повышенной проходимости, оснащённый водомётом. Вообще, экран тогда (вероятно не без фильтрации моим восприятием) вовсю радовал глаз различными радиоуправляемыми моделями: кораблями, подводными лодками - мне оставалось только вздыхать и пытаться выкроить среди бесконечных «домашек» время на постройку судна из пенопласта (только достать его в необходимом объёме было невозможно - проект уплыл не по местной речке, а по Лете).

Так вот ...


В минувший день рождения, в качестве подарка я получил набор Apitor SuperBot, позволяющий создавать и программировать простых роботов. Титульная (но не единственная) модель, изображение которой даже вынесено на упаковку - джип. Получилась эдакая аллюзия к детским мечтам.

Вообще, джип в «базовой комплектации» не предусматривает подключение сенсоров и представляет собой одну из моделей для ручного управления с телефона. Тем не менее, как нарочно, модель собрана таким образом, что, вытянув удерживающий штифт, можно откинуть (как у настоящей) капот машинки и получить доступ к контактным площадкам, предназначенным для подключения сенсоров. Кабели удобно выводятся через место размещения приборной панели. Проделав вышеозначенную манипуляцию (в комплекте идёт удобнейший инструмент для разборки), мы наделяем машинку двумя «глазами», обеспечивающими связь с окружающим миром, что позволяет реализовывать простые программы автономного поведения.

Определившись с соответствием датчиков и занятых ими портов, переходим к испытаниям в режиме выполнения с телефона.

Немного занудства


Для разработки поддерживаются два режима, которые могут быть знакомы Вам под названиями “debug”/“release”. Вдаваться в тонкости терминологии и технические аспекты реализации режимов здесь не будем - аналогия поверхностная, но даёт представление. Ход программы в отладочном режиме контролируется с телефона: выполняются команды, предусматривающие индикацию на телефоне, работу можно прервать в любой момент. В релизе - программа выгружается на управляющий блок конструктора и остановить её можно только выключив этот блок.

Вперёд-назад


Несколько дней, по часу перед сном я собирал титульную модель (с неё и начал). Собрав и немного покатав по кровати машинку, я перешёл к реализации программной части.

Самым простым показалось повесить на нос и корму по датчику расстояния и запрограммировать движение вперёд/назад от преграды до преграды.

Тем не менее, увлёкшись разбирательством с непривычным интерфейсом ввода, я умудрился пару раз запутать логику алгоритма. К тому же, как оказалось (на стенде, пока колёса вращались в воздухе, это в глаза не бросалось): двигатели с противоположных бортов расположены зеркально и потому, для синхронной работы должны вращать валы в противоположные стороны (был уверен, что это исправлено на уровне микросхемы управления).

Как положено, я поименовал все используемые числа, сохранив их в «константы» (в кавычках, потому как спецификаторов доступа здесь, разумеется, нет). Дальше - классическая схема с автоматами: по правилам транслируем показания датчиков во внутренние переменные алгоритма (набор состояний), после чего вырабатываем сигнал, соответствующий состоянию алгоритма, на актуаторы. Для отладки ещё и индикаторам меняю цвет свечения.

first.jpg
Схема алгоритма

Следование


Следующим проектом стал автомобиль, пытающийся следовать за препятствием. Звучит непонятно - нагляднее в видео.


Здесь я упростил этап формирования внутреннего состояния, а если б язык позволял (было бы неявное приведение типов bool -> int)  - то и этап опроса датчиков впихнул туда же. Так как датчики генерируют два независимых состояния, сливающихся в одно внутреннее («помеха слева», «помеха справа», «оба датчика закрыты», «помех нет»), то синтез кода состояния можно описать простой формулой: взвешенной суммой флагов. Веса нужны для разделения событий «помеха слева» и «помеха справа». Так как флаги датчиков имеют бинарный характер, то очевидной видится интерпретация их значений как битов двухбитного слова.

Статус = 1 * левый + 2 * правый

second.jpg
Схема алгоритма

На видео заметно, что вращения даются машинке с трудом. Я не силён в механике, но осмотр ходовой части после покатушек выявил, что ближайшую к моторной шестерню прямо-таки стягивает с её оси.

При длительных вращениях (в режиме ручного управления) шестерня имеет тенденцию соскакивать (отключая, тем самым, передачу тяги на переднее колесо вдоль одного борта). Как выяснилось позже, другие обзорщики тоже отмечали трудности в выполнении поворотов. Ну, как говорилось в старом анекдоте: это аппаратные проблемы и программисты их не решают.

Таким образом …


Набор является отличной альтернативой Другому Известному Бренду, цены на наборы которого - просто нереальные. Детали из отличного пластика, обладающего необходимой степенью упругости. Пока я кодил поведение робота, в бесплатном мобильном приложении стали доступны ещё две схемы для сборки. Инструкция, инструмент для разборки, приложение, поддержка – что ещё надо? (Ну, если уж совсем докапываться, то хотелось бы побольше датчиков – насколько мне известно, разработка ведётся.)

Короче говоря, авторам можно пожелать только процветания и дальнейшего развития этой полезной игрушки.


Запись опубликована в категориях:

Алгоритмы и аспекты  
 

Комментарии

Инкогнито
  Загружаем captcha