Между прочим, Жорик — робот-пацифист, призванный освободить нас от бренных оболочек и наделённый жизнью моим сумрачным гением — ещё не помер. Каюсь, ипотека, лень и другие поводы обратиться к психиатру несколько отодвинули жориковые нужды на задний план, но не насовсем. Более того, я просмотрел свои последние посты о нём, и, оказывается, львиная доля его эволюции осталась за кадром! Так что, прежде чем описать, почему пришло время разбудить демона, зачем он вообще уснул, и куда теперь двинется дальше, расскажу-ка я, что из себя Жорик-Аннигилятор представляет прямо сейчас.
Что есть сейчас
Изменилось на самом деле многое. Шасси, моторчики и даже «мозжечок» — ESP32 контроллер — остались прежними, но я навесил кучу дополнительных сенсоров и даже «фронтальный кортекс» — Jetson Nano. Теперь Жорику можно щёлкнуть тумблером, нажать дополнительную кнопку, и в довесок к Real-time Operating System (RTOS) на микроконтроллере, на Jetson поднимется самая настоящая Ubuntu, которой можно скармливать обычный Python, подключать монитор, и вообще учить Жорика жизни. Правда, кроме простейших «едь вперёд две секунды, развернись и сфотографируй то, что видишь», дальше дело пока не пошло.
Из забавного, мне пришлось поставить на Жорика настоящую Robot Operating System (ROS), и даже, вы будете смеяться, миниатюрную компьютерную сеть. Когда робот получает Python-команду поехать вперёд, он отправляет через ROS сообщение «Мотор левый: 100%, мотор правый: 100%», которое приходит на отвечающий за общение с моторчиками ESP микроконтроллер, и тот уже жонглирует напряжением на нужных электронных лапках. Вот как!
В обратную сторону общение тоже работает. Все низкоуровневые сенсоры типа акселерометра и датчика расстояния подключены к ESP32, и данные с них раз в столько-то миллисекунд транслируются в сеть, которую внимательно слушает Jetson. На самом же Jetson потом можно написать print(robot.distance)
, и он реально напечатает количество сантиметров до жертвы. Магия, ёпты.
Наконец, прямо над датчиком расстояния появилась, кажется, восьми-мегапиксельная камера, с которой опять же программно можно считывать либо одиночные кадры, либо вообще писать видео. Под камерой торчит сервомотор, так что «головой» можно ещё и мотать по сторонам. Ну и верх магии — Жорика можно подключить к джойстику, включить камеру на бродкаст видеопотока, и кататься по второму этажу удалённо.
Проблемы
И это нас подводит к стайке проблем, на которых эволюция терминатора застопорилась. Во-первых, чисто программное общение с Жириком, пускай и через Jupiter Notebooks — любимую игрушку дата-сайентистов и машинных обучателей, не есть самое удобное общение. «Едь вперёд, едь назад» ещё написать можно, но что-то более сложное — уже как-то через боль.
Потом, считывание данных с сенсоров тоже как-то хромает. То есть что угодно можно считать когда угодно, но для нормальной «охоться-за-человеками» логики нужны более или менее стандартизированные потоки данных, и вот это самое превращение единичных показателей в потоки я как-то ещё не доисследовал.
Затем, раздача видео по сети — тормозит. Даже не знаю почему. На более слабом Rasbperry Pi 4 та же самая камера раздаёт Full HD картинку по вайфаю практически без тормозов. Заточенный же под обработку видео Jetson Nano тупит над слайд-шоу неимоверно. Но при этом спокойно пишет качественное видео локально. Возможно, это как-то связано с питанием, и с последним действительно море проблем.
Как я и планировал, на роботе есть два источника питания — массив обычных перезаряжаемых батарей, которые питают моторы, и пауэрбанк, которому полагается питать исключительно жадного до Ампер и Ватт Jetson. Включается вся эта монструозность сложно. Сначала я щёлкаю выключателем, который подаёт питание на микроконтроллер. Тот грузится, и начитает счастливо слушать сенсоры и даже джойстик. Если щёлкнуть вторым выключателем, то питание уже подастся на моторы, так что если ESP захочет куда-нибудь поехать — теперь он действительно сможет. Этот дополнительный выключатель нужен, чтобы была возможность экспериментировать с логикой моторов без, собственно, шевеления моторами.
Ну и последняя кнопка запускает Jetson Nano. Держать его выключенным — хорошая идея, потому что жрёт он электричества неимоверно, а для простейших экспериментов нифига не нужен. Но это неудобно, что пипец. Это и пальцем тыкать, и как-то последовательность включения учитывать. А самое обидное, что даже выключенный, Jetson всё равно еле-еле подтягивает питание из пауэр-банка, что заставляет последний думать, будто его где-то закоротило и надо на всякий случай отключить себя намертво. Поэтому, чтобы в следующий раз запустить Жорика нужно сделать аж пять шагов!
- Нажать кнопку на пауэр-банке, чтобы тот перезагрузился и перестал думать, будто его коротнуло.
- Щёлкнуть тумблером, подающим питание на ESP32.
- Щёлкнуть тумблером моторов.
- Нажать кнопку включения Jetson.
- Перегрузить Jetson, потому что там есть какой-то race condition, из-за которого сеть между ESP и Jetson Nano подглючивает.
И с таким космическим протоколом включения дальше экспериментировать сил уже не хватает.
Что дальше
Так что я решил начать новую итерацию эволюции Жорика именно с питания. Сдизайнить умную электрическую схему без риска сжечь дом я не смогу, ибо не спец в электротехнике. Но вместо этого я могу дизайнить код! Так что к уже двум по сути компьютерам Жорика я добавлю третий — контроллер питания на базе Raspberry Pi Pico. Не будет больше тумблеров для включения всего (ну может один, мастер-тумблер, где-нибудь под капотом, для экстренных ситуаций). Pico будет сидеть в глубоком сне до тех пор, пока кто-то не нажмёт стандартную кнопку, как на телефоне, которая его разбудит. Через один мощный транзистор он подаст питание на ESP, через второй — на моторы (здесь, может, тоже можно добавить manual override переключатель), а через третий — включит Jetson.
Когда придёт время выключаться, его снова тыркнут кнопкой (либо отправят сообщение по «сети»), от чего он отрубит ESP и моторы и отправит сообщение Jetson отключиться. Как только тот закончит (либо Pico надоест ждать), контроллер питания отрубит последний тумблер и сам уйдёт в глубокий сон, до следующей кнопки. Да, он будет поджирать немного питания во сне, но там такие смешные цифры, что батарей хватит минимум месяца на четыре.
Вот. В теории это сильно упростит процесс включения-выключения. К тому же я смогу добавить вторую линию питания на Jetson, чтобы тот стал работать на максимальных частотах. А как только эта хрень начнёт включаться с пол оборота, можно и софтом снова заняться. Такой вот план.
Почему сейчас
Да, чего это меня сейчас торкнуло на такие штуки. Работы что ли мало стало?
Фигня в том, что с последними изменениями в искусственном интеллекте, а так же с тем, что сегодняшние умные машинные модели типа ChatGPT за мизерные деньги можно запускать даже локально, можно придумать кучу любопытных игр с роботом, общающимся с GPT напрямую. Типа «я могу ездить вперёд-назад, и сейчас ты видишь вот эту картинку. Скажи мне, что делать, чтобы выехать на солнышко». Ну интересно же. Да и папику всё ещё нужны миллионы долларов на ипотеку. А там глядишь, смогу продать свои наработки местным конторам, решить все свои проблемы, и снова заморочиться каким-нибудь экзистенциальным кризисом.
Такой вот план.