• A
  • A
  • A
  • АБВ
  • АБВ
  • АБВ
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

От красной кнопки до SteamDeck

От красной кнопки до SteamDeck

Введение

Сейчас есть 2 проекта, воплощенных в железе, над которыми мы продолжаем активно работать: CartPole и Truck (небольшая модель беспилотной машинки). В этом рассказе хочется поделиться опытом, как мы начали с простой красной кнопки и дошли до своего “Steam deck”, рассказать о неудачах, ну и поделиться планами. Поехали!

Начало

Красная кнопка чертовски важная штука, когда вы имеете дело с роботами и хотите избежать “нештатного восстания машин”. Все началось с проекта CartPole, где первым и абсолютно гениальным решением было поставить на концах направляющей стоп-кнопки, касаясь которых CartPole переходит в специальный безопасный режим. Это много раз спасло нас во время отладки при потере управления. Иногда каретка начинала двигаться с таким ускорением, что человеческой реакции просто бы не хватило, чтобы отключить питание. А в дальнейшем “концевики” пригодились в том числе и для калибровки робота (вычисление длины рельсы в шагах двигателя и выставление каретки по центру).

Удаленное управление

Следующим шагом мы добавили "железную” красную кнопка, которая спасет, даже если прошивка микроконтроллера “взбунтуется” (при нажатии происходит “физическое” размыкание питания мотора). Работает она отлично, однако косичка из проводов оказалась не особо удобной, где-то в этот момент мысль о беспроводной красной кнопке впервые появилась в нашей голове...

Удаленное управление

В проекте Truck сразу было понятно, что нам нужно уметь удаленно управлять машинкой, а также иметь возможность отключить автопилот и даже питание мотора. Обычная клавиатура тут не сильно подходит, т.к. хочется непрерывно управлять скоростью и кривизной траектории, а делать multi-touch приложение для планшета нам показалось слишком сложным для прототипа. Поэтому наш выбор быстро пал на игровой контроллер dual shock 4. Он имеет два джойстика, россыпь разнообразных кнопок, подключается по bluetooth и работает на свежем linux из коробки (протестировано на ubuntu 20+). А еще его можно достать на маркетплейсе за пару тысяч рублей! Набросав код и проведя парочку тестов, мы поняли, что не хватает небольшого экрана с отладочной информацией. Изначально была идея сделать небольшую держалку для телефона, на котором крутится простенькая веб страничка с диагностикой.

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

Чтобы во время тестирования наш робот не улетел в стену, на пульт должна была быть возложена функция красной кнопки. Для этого мы сделали целую серию watchdog-ов. Сначала добавили таймут в компоненту, управляющую мотором, если последняя команда была послана давно, то мотор отключается. А затем сделали похожую логику в компоненте, проксирующей команды пульта и автопилота, ожидая, что любой из них может “отвалиться”. Тут нас ждал один важный и не очевидный момент. Оказалось, что драйвер пульта посылает события в систему, только если у него меняется состояние. Это значит, что нужен специальный репитер, если ты хочешь получать состояние пульта с гарантированной частотой. Но, если у тебя есть репетитер, то ты не можешь быстро понимать, отвалился ли у тебя пульт! Это значит, что контроллер совсем не годится в качестве красной кнопки! К сожалению, такое поведение характертно и для dual shock и ipega. Более того bluetooth оказался не самым надеждным каналом. Если робот находится достаточно далеко, а в помещении много радио устройств, то задержки между сообщениями могут превышать 200 мс, а порой мы просто теряли подключение.

План-капкан

WiFi красная кнопка

И вот мы вернулись на второй круг, нам нужна надежная красная кнопка, которая работает поверх распространенного радио протокола. И мы выбрали... WiFi! Да, именно WiFi, не удивляйтесь! Сверху вы можете видеть концепт, который в лучших традициях сделан на клочке бумаги. Мы планируем взять микроконтроллер семейства ESP, установить его в приемнике и передатчике, добавить пару светодиодов, небольшой экран для удобства и большую красную кнопку. Питание будет от стандартного пальчикового аккумулятора. В качестве протокола мы будем использовать ESP-NOW. Это протокол беспроводной связи, который обеспечивает прямое и быстрое соединение с другим устройством поверх Wi-Fi или Bluetooth. Мы ожидаем низкие задержки в районе нескольких миллисекунд и высокую энергоэффективность, потому что протокол низкого уровна (data link layer). Если все пройдет удачно, то на основе полученного опыта можно будет сделать собственный беспроводной пульт.

Заключение

Мы идем методом проб и ошибок, пытаясь создавать прототипы как можно раньше. Эволюционно мы часто приходим к вещам, которые концептуально похожи на что-то уже существующее в мире. Это проявляется во многих мелочах, к примеру, беспроводная красная кнопка чем-то напоминает контроллер от DJI (может стоит добавить IMU и сделать контроллер для машинки). Или наш сетап из планшета и контроллера ipega очень похож на Steam deck. Кажется, история наших инструментов удаленного управления только начинается... может быть кто-то из читателей готов присоединиться к нам и сделать аналог пульта от DJI? Давайте делать роботов вместе!