Чебуратор: история робота, который не слышал, не видел и умирал дважды
Пролог: «Зима, скука и желание построить терминатора»
Было это после пеленгатора. Зимой. На улице — классический сибирский пейзаж: снег по колено, солнце появляется раз в неделю по расписанию, и единственное разумное занятие — сидеть дома, пить чай и смотреть в стену.
Но мы — группа RaAm24 — не из тех, кто умеет сидеть спокойно.
К этому моменту за плечами уже были:
— Ротор, который крутил антенну, пока ветер не напомнил нам о существовании физики;
— Пеленгатор, собранный с кровью, потом и перепиской на голландском языке.
Казалось бы, остановись. Отдохни. Порадуйся, что хоть что-то работает.
Но нет.
В одной из переписок в телеграм-канале, когда за окном уже вторую неделю мело, а на календаре был какой-то безымянный зимний вечер, кто-то написал:
— А давайте робота сделаем?
Повисла пауза. Потом ещё одна.
— А что, — ответил другой. — Интересно. Посмотрим, что получится.
Эти две фразы стали приговором. Для наших нервов. Для наших кошельков. Для одной тумбочки, которая ещё не знала, что ей предстоит.
Почему робот?
Ну, во-первых, интересно. Во-вторых, зимой делать нечего. В-третьих, мы уже попробовали себя в «поворотной» и «пеленгаторной» тематиках — пора было расширять горизонты. В-четвёртых, у нас был Raspberry Pi 5, который лежал без дела и, кажется, сам напрашивался на подвиги.
Мы не ставили задачу «собрать терминатора». Ну, почти.
По задумке это должен был быть гусеничный робот, который:
— сам ездит;
— объезжает препятствия;
— реагирует на голосовые команды;
— говорит в ответ;
— видит мир через камеру.
Скромно, правда? Мы тогда ещё не знали, что каждое из этих «сам» обойдётся в пачку нервных клеток и несколько дней мата.
Кто участвовал?
Вся группа RaAm24. Разные взгляды на то, как должен выглядеть робот, сколько у него должно быть проводов и стоит ли вообще его красить.
Кто-то отвечал за механику. Кто-то — за мозги. Кто-то — за голос. Кто-то просто стоял рядом и говорил: «А если сделать вот так?» — после чего все начинали спорить, а потом оказывалось, что он был прав.
Инженеров, как обычно, не было. Только энтузиасты с горящими глазами и полным отсутствием профессионального образования в области робототехники.
Глава первая: «Выбираем компоненты: бюджет, надежда и самообман»
Итак, решение принято: делаем робота. Осталось понять — из чего.
В группе RaAm24 к этому моменту уже сложилась традиция: начинаем с амбициозного плана, потом упираемся в реальность, потом материмся, потом как-то выкручиваемся. Робот не стал исключением.
Первая остановка: готовое шасси
— Давайте купим готовое шасси от детского танка, — предложил кто-то. — Быстро, дёшево, не надо изобретать велосипед.
Мы купили. Быстро. Дёшево.

И сразу поняли, что это была ошибка.
Шасси оказалось… ну, как бы это помягче… слишком детским. Пластик тонкий, гусеницы слетают при малейшем повороте, моторчики такие, что даже офисная крыса не обидится. Для робота с амбициями «сам ездит, видит и говорит» это было примерно как прицепить реактивный двигатель к табуретке.
— Это не годится, — сказали мы хором.
— А что делаем?
— Сами.
И началась эпопея, которую мы потом назвали «3D-печатный ад».
Своё — значит, своё
Кто-то из группы (тот, кто явно не высыпался уже неделю) нарисовал в SolidWorks первую версию корпуса. Она была красивая. Симметричная. С отсеками для аккумуляторов, драйверов и Raspberry Pi.
— Печатаем! — скомандовали мы.
3D-принтер зажужжал. Пластик потек. Мы смотрели на этот процесс с чувством, близким к религиозному экстазу.
Первая деталь готова. Вторая. Третья.
Собираем.
Не сходится.

— Напильник! — закричал кто-то, и мы вспомнили старые времена ротора.
Мы точили, подгоняли, перепечатывали, снова точили. Пластик скрипел, мы матерились. В какой-то момент казалось, что проще вырезать корпус из картона и залить эпоксидкой, чем ждать, пока принтер допечатает пятую версию днища.
Но мы справились. Корпус был готов. Неидеальный, с лёгким перекосом и следами от напильника, но — наш. Сделанный руками. И руками же покорёженный.

Рождение имени
Имя появилось не сразу. Сначала был просто «робот». Потом — «гусеничный товарищ». Потом — «эта чёртова штуковина, которая опять не едет».
А потом кто-то вспомнил песню. Там были слова: «Это Чебуратор был, киборг с большими ушами…»
Мы переглянулись.
— Чебуратор, — сказал кто-то.
— Похоже на терминатора, — добавил другой.
— И уши будут. Динамик — это почти уши.
— А гусеницы — вместо ног.
— А характер — как у Чебурашки: вроде милый, но когда на тумбочку наезжает — страшный.
Имя приклеилось мгновенно. Как клей момент. И так же неотрывно.
Что внутри?
Под капотом у Чебуратора поселились:
Raspberry Pi 5 — главный мозг. Дорогой, мощный, капризный, как оперная дива. Должен был отвечать за зрение, голос и принятие решений.

Arduino — младший брат, который крутил моторами, пока старший думал. Связка «Arduino управляет телом, Raspberry — душой» звучала красиво. На практике оказалось, что душа часто зависает, а тело без неё просто не едет.

Драйверы моторов — несколько штук, потому что первые два сгорели при первой же попытке что-то подключить.

I2S-модуль с динамиком — чтобы робот мог говорить. Сначала — говорить. Потом — издавать звуки. Потом — просто пищать. Потом — молчать, потому что он умер.

Камера — чтобы робот видел. По задумке — видел всё. На практике — видел размытые пятна и иногда принимал тумбочку за человека.
Микрофон — чтобы слышать команды. Пока не включались гусеницы.
Аккумуляторы 18650 — напихали сколько влезло. Хватало на 20–30 минут работы. Ровно столько, чтобы успеть обрадоваться, испугаться и пожалеть.

Глава вторая: «Первый запуск: милота, счастье и ложная надежда»
Корпус напечатан. Компоненты распаяны. Провода соединены — и, чудо, пока ничего не задымилось.
Настал момент истины.
Танцы с бубном вокруг Python
Тут нужно сделать небольшое лирическое отступление, чтобы вы понимали уровень нашего безумия.
Мы решили писать всю логику для Чебуратора на Python. Почему? Потому что «взрослые дяди» в интернете сказали, что для Raspberry Pi это стандарт. Потому что библиотек много. Потому что «на питоне даже дети пишут».
Проблема была только одна: никто из нас не знал Python.
Вообще.
Ну, то есть, кто-то когда-то видел скрипт, который выводит «Hello World». Кто-то слышал, что отступы там важны. Кто-то был уверен, что Python — это разновидность удава.
Но писать на нём — нет.
— Ничего, — сказали мы себе с оптимизмом самоубийц. — Язык простой. Разберёмся.
О, как мы ошибались.
Первая неделя: метод тыка
Мы открыли учебник. Потом второй. Потом десятую вкладку с форумом, где какой-то бородатый мужик объяснял, почему у него не работает импорт библиотеки.
И началось.
— А почему он ругается на отступы?
— Потому что ты поставил пробел, а надо табуляцию.
— А это не одно и то же?
— Нет. И если ты перепутаешь, Python устроит истерику.
Мы матерились. Мы переписывали одни и те же строки по десять раз. Мы копировали код из примеров, и он не работал. Мы переписывали его своими руками, и он тоже не работал, но уже по-другому.
— Может, на C++ переписать?
— Поздно. Мы уже в это вложились.
Джойстик — первый успех
Первая задача была простой: подключить джойстик и заставить Чебуратора ехать.
Это заняло десять дней.
Десять дней мы бились с библиотеками, событиями, циклами и тем, почему Python иногда просто игнорирует нажатие кнопки, потому что ему «не захотелось».
Но на одиннадцатый день случилось чудо.

Я нажал на джойстике «вперёд», и Чебуратор поехал.
Мы смотрели на это, как на магию. Потому что, честно говоря, для нас это и было магией. Код, написанный кривыми руками, на языке, который мы выучили на коленке за несколько бессонных ночей, заставил кусок пластика с моторчиками двигаться.
— Назад! — крикнул кто-то.
Нажал «назад». Чебуратор послушно попятился.
— Вправо! Влево! Кругом!
Мы гоняли его по комнате, как нашкодившего щенка. Он слушался. Он поворачивал. Он не врезался в стены — ну, почти не врезался.
В комнате стоял смех. Не тот нервный смех, которым мы смеялись, когда у ротора сгорал GPS-компас. А нормальный, человеческий. С примесью детского восторга и облегчения человека, который только что понял, что его не выгонят с работы за профнепригодность.
— Оно работает! — сказал кто-то.
— Боже, оно реально работает!
Мы чувствовали себя богами. Повелителями гусениц. Архитекторами движения.
Ложная надежда
Этот момент — он всегда самый опасный.
Потому что когда робот начинает ездить с джойстика, возникает иллюзия, что всё остальное тоже будет просто.
— Ну, голос теперь подключим — и порядок.
— Камеру навесим — будет объезжать препятствия.
— Wi-Fi настроим — вообще красота.
Мы не знали тогда, что «просто» закончилось ровно в ту секунду, когда Чебуратор проехал свой первый успешный метр.
Дальше начинался ад.
Программирование продолжается: адский круговорот
Каждая новая фича — голос, зрение, объезд препятствий — требовала недели танцев с бубном.
Мы писали код. Он не работал.
Мы переписывали. Он работал, но не так.
Мы переписывали ещё раз. Он переставал работать вообще.
Мы откатывали к первой версии. Она тоже больше не работала, хотя раньше же работала!
— Python, сука, — стало нашим неофициальным девизом.
В особо тяжёлые дни кто-то из нас предлагал бросить всё и перейти на C++. Но было поздно. Мы уже были в отношениях с Python. Токсичных, болезненных, но уже неразрывных.
Глава третья: «Голос, зрение и первая кровь»
Итак, Чебуратор научился ездить с джойстика. Python-скрипт работал — ну, то есть, работал, когда ему было настроение. Мы решили, что пора добавлять функционал, ради которого всё и затевалось: голос и зрение.
Спойлер: зря.
Голос: говори, Чебуратор, говори
Для голоса мы купили I2S-модуль с динамиком. Дорогой. Красивый. С надписью «plug and play», которая, как известно, переводится с английского как «а хрен там был».
Подключили. Загрузили тестовый скрипт.
— Привет, Чебуратор, — сказали мы.
Динамик издал звук, похожий на агонию больного кита.
— Может, библиотеку не ту поставили?
— Нет, ту. Всё по инструкции.
— А почему он тогда так умирает?
— Потому что это мы.

Мы провели три дня, пытаясь заставить Чебуратора произнести хотя бы «мяу». Он отказывался. Он хрипел, шипел, издавал звуки, которых нет в природе, но слова — ни одного.
Потом, на четвёртый день, вдруг — бац! — и заработало. Чебуратор чётко, по слогам, с интонацией диктора Центрального телевидения произнёс:
— П-р-и-в-е-т.
Мы чуть не расцеловали динамик.
— Говорить умеем, — сказали мы. — Теперь научим слышать.
Слух: или как Чебуратор оглох от собственных гусениц
Микрофон поставили почти сразу.
Первые тесты в тишине прошли отлично. Чебуратор слышал команды, распознавал их (ну, через раз) и даже пытался выполнять.
— Вперёд! — говорили мы. Чебуратор ехал.
— Стоп! — Чебуратор останавливался.
Мы снова почувствовали себя богами. Ну, почти.
Потом мы включили гусеницы на полную.
Шум стоял такой, что соседи, наверное, думали, что мы открыли цех по переработке металлолома. В этом аду механических звуков микрофон ловил только одно: собственные молитвы Чебуратора о пощаде.
— Вперёд! — орали мы.
Чебуратор не слышал. Или слышал, но делал вид, что нет. Или просто решил, что «вперёд» — это отличная команда, чтобы врезаться в стену.
— Громче! — кричал кто-то.
— Ору уже!
— Не слышит!
— Потому что гусеницы гремят, как ведро с гайками!
Мы перебирали настройки микрофона. Меняли пороги. Писали алгоритмы шумоподавления, которые работали только в теории, а на практике превращали любую команду в «чё-то там».
В итоге Чебуратор слышал голос ровно до тех пор, пока не начинал двигаться. А неподвижный робот, который слушает команды и не едет — это просто статуэтка с микрофоном.
Зрение: вижу размытое пятно, но тумбочку — не гарантирую
Камеру мы прикрутили к корпусу почти сразу. Маленькая, на шлейфе, с разрешением, которое в спецификации называлось «HD», а на практике — «ничё не понятно, но очень старается».
Задача: Чебуратор видит препятствие и объезжает его.
Мы написали скрипт. Запустили. Чебуратор увидел стену и поехал… прямо на неё.
— Почему он не объезжает?!
— Потому что он думает, что стена — это горизонт.
— Камера, блин, искусственный интеллект…
Мы добавили детекцию объектов. Чебуратор научился отличать стену от человека. И от тумбочки. И от кота, который случайно зашёл в комнату и замер в ужасе.
Кота было жалко. Но Чебуратору было всё равно.
Управление жестами: и тумбочка, которой не повезло
Самым амбициозным был режим управления жестами. Чебуратор смотрит камерой, видит руку, понимает жест и едет туда, куда рука показывает.

— Это будет прорыв! — сказали мы.
И это был прорыв. В прямом смысле.
Я встал перед Чебуратором. Поднял руку. Показал жест «вперёд».
Чебуратор понял. Завёл моторы. И поехал.
Прямо на меня.
— Стоп! — заорал я и убрал руку, чтобы отскочить.
Камера потеряла цель. Рука исчезла. Но Чебуратор, видимо, решил, что команда «вперёд» действует бессрочно.
Он промчался мимо меня, пересек комнату и на всех парах врезался в тумбочку.
Грохот был такой, что сосед снизу, наверное, подумал, что нам скинули бетонную плиту. Чебуратор перевернулся на бок, гусеницы продолжали бешено крутиться в воздухе, динамик издал предсмертный хрип.
Мы смотрели на это в полной тишине.
Потом кто-то сказал:
— Ну вот. Теперь он и инвалид.
Чебуратор не пострадал. Тумбочка — да, пострадала. Но главное пострадало — наше чувство собственного величия.
Глава четвертая: «Смерть технологий: I2S и Wi-Fi ушли в лучший мир»
После эпопеи с тумбочкой мы временно отключили управление жестами. Решили сосредоточиться на том, что уже (почти) работало: голос, слух, движение.
Сказано — сделано.
Мы подключили Чебуратора к зарядке, залили обновленную прошивку, проверили все контакты. Всё было тип-топ. Робот включался, пищал динамиком, ловил Wi-Fi, смотрел камерой и ждал команды.
— Сегодня, — сказали мы, — он заговорит.
Акт первый: I2S-модуль тихо умирает
Утром Чебуратор говорил. Не идеально, с хрипотцой и странным акцентом, но говорил. «Привет», «вперёд», «назад» — базовый набор, как у попугая.
К вечеру он начал заикаться.
— П-п-п-привет, — выдавал динамик.
— Может, питание просажено? — предположил кто-то.
Проверили. Питание в норме. Контакты целы. Библиотеки не обновлялись.
— П-п-п-пок-пок-пока, — прохрипел Чебуратор и замолчал.
Навсегда.
Мы перезагружали Raspberry Pi. Перепаивали провода. Меняли библиотеки. Втыкали модуль в другой GPIO. Всё без толку.
I2S-модуль, который ещё утром бодро вещал в эфир, к вечеру превратился в бесполезный кусок кремния с припоем.
— Он умер, — констатировал кто-то.
— Может, отходит?
— Нет. Он мёртв.
Диагноз: причина смерти не установлена. Предположительно — отказ по неизвестным причинам. В народе это называется «всё работало, а потом перестало, и мы не знаем почему».
Мы заменили модуль на новый. Заработало. На три часа. Потом снова молчание.
— Это не модули, — сказал кто-то мудрый. — Это карма.
Акт второй: Wi-Fi сдаётся без боя
Пока мы боролись за голос Чебуратора, произошло нечто ещё более печальное.
Raspberry Pi 5, главный мозг нашего гусеничного друга, перестал видеть Wi-Fi.
Не то чтобы «плохо ловил». Не «периодически отваливался». Он просто. Перестал. Видеть. Сети.
— Может, драйвер слетел?
— Переустановили.
— Антенну проверили?
— Цела.
— А может, он обиделся на нас за тумбочку?
Мы потратили два вечера. Перебирали настройки, лазили по форумам, где такие же несчастные люди задавали один и тот же вопрос: «почему Raspberry Pi не видит Wi-Fi?»
Самый внятный ответ, который мы нашли, был: «потому что».
Мы так и не поняли, почему это случилось. Возможно, отошёл контакт на плате. Возможно, проблема в прошивке. Возможно, Чебуратор просто решил, что беспроводная связь — это слишком сложно для его понимания.
Факт оставался фактом: робот, который должен был быть независимым, теперь был привязан к роутеру проводом.
— Что за робот, за которым тянется шнур? — спросил кто-то.
— Огородное пугало, — ответил другой.
Мы сделали всё возможное. Даже пробовали подключать внешний Wi-Fi-адаптер через USB. Raspberry Pi его видел, но соединяться с сетью всё равно отказывался.
Диагноз: Wi-Fi умер. Причины неизвестны. Вскрытие показало, что пациент всё ещё пытался, но сдался.

Глава пятая: «Долговой ящик: робот, который не слышит и не видит»
Чебуратор молчал. Wi-Fi не работал. Гусеницы гремели так, что микрофон ловил только какофонию. Управление жестами отправилось в корзину истории после эпичной встречи с тумбочкой.
Мы стояли перед выбором.
Вариант первый: продолжать биться головой о стену. Покупать новые модули, переписывать код, искать причину, по которой Raspberry Pi решил, что Wi-Fi — это буржуазный пережиток. В общем, продолжать этот бесконечный марафон самоистязания.
Вариант второй: признать временное поражение. Отложить Чебуратора, выдохнуть и, возможно, когда-нибудь вернуться.
Мы выбрали второй.
Не потому, что сдались. А потому, что у каждого из нас есть работа, семьи, сон (иногда) и другие проекты, которые требуют внимания. Робот — это было хобби. Весёлое, дорогое и безумное хобби, которое начало пожирать слишком много ресурсов.
— В долговой ящик, — сказал кто-то.
И Чебуратор отправился туда.
Что такое «долговой ящик»?
Это святое место в мастерской. Туда попадают проекты, которые не умерли, но и не живут. Они просто… ждут.
Ждут, когда у кого-то поднимется рука снова их коснуться.
Ждут, когда появится свободный вечер.
Ждут, когда Wi-Fi на Raspberry Pi вдруг решит воскреснуть (технологическое чудо, которое мы не исключаем).
Чебуратор лёг в этот ящик целиком. С корпусом, гусеницами, проводами, динамиком, который больше не говорит, и камерой, которая иногда видит тумбочку.
Иногда мы открываем ящик. Смотрим. Вздыхаем. Закрываем обратно.
— Когда-нибудь, — говорим мы. — Когда-нибудь.
Что мы поняли?
Мы поняли, что робототехника — это не только про «взял и сделал». Это про бесконечное терпение. Про умение признавать, что сейчас не время. Про то, что даже если ты заплатил за Raspberry Pi 5 как за подержанный автомобиль, это не значит, что он будет работать так, как ты хочешь.
Мы поняли, что Python — это зло, с которым можно подружиться, но дружба эта будет токсичной.
Мы поняли, что I2S-модули умирают так же внезапно, как надежды на светлое будущее.
И мы поняли, что даже неудачный робот — это опыт. Кривой, болезненный, дорогой опыт, который останется с тобой навсегда. Как шрам от фрезы. Как воспоминание о тумбочке. Как песня, которая теперь при слове «Чебуратор» играет в голове автоматически.

Эпилог: «Чебуратор жив? Легенда, которая ждёт продолжения»
Чебуратор не умер.
Он просто спит. В коробке. Среди других проектов, которые когда-то казались нам гениальными.
Мы не знаем, вернёмся ли мы к нему. Может быть, когда-нибудь зимой, когда делать будет нечего, мы откроем долговой ящик, вытряхнем пыль, перепишем код снова и — о чудо! — всё заработает.
А может, не заработает.
Но это не важно.
Потому что Чебуратор уже сделал главное: он подарил нам несколько вечеров чистого, незамутнённого счастья. Когда он впервые поехал с джойстика. Когда он сказал «привет». Когда мы смотрели на него, перепачканные флюсом и уставшие, и понимали: мы это сделали.
Да, он кривой. Да, он не умеет говорить в движении. Да, его Wi-Fi скончался при загадочных обстоятельствах.
Но он — наш.
И когда кто-нибудь в телеграм-канале спросит: «А что там с роботом?», мы ответим:
— Лежит в долговом ящике. Ждёт своего часа.
И, может быть, этот час когда-нибудь настанет.
А пока — спи, Чебуратор. Ты заслужил.
P.S. Если у кого-то есть рабочий I2S-модуль и запасной Raspberry Pi 5 с живым Wi-Fi — мы слушаем. Предложения в личку. Чебуратор ждёт.
