И снова наступила та пора года, когда я хожу с задумчивым видом по Канаде и размышляю, правильными ли делами занимаюсь по жизни. После прошлогодней поездки в Аризону подобные размышления привели к смене работы, и, хотя перемены определённо удались, вселенское счастье-таки не достигло своего апогея, и, следовательно, нужно сделать что-то ещё.
Экзистенциальный зуд в заднице
Теоретически, всё упирается в достаточно простой вопрос — а какое занятие в принципе стоит того, чтобы на него тратить свою жизнь? Вот, например, мне нравится программировать. Но дай мне тыщу миллионов денег, я бы тут же отошёл от дел и стал бы занимался этим только в качестве хобби и иногда. Значит, близко, но не то.
С моей текущей работой — консалтингом — всё ещё проще. Тест на тыщу миллионов говорит, что я не буду им заниматься даже в качестве хобби. Людям помогать — это хорошо. Но, чтобы закрыть этот гештальт, достаточно просто бабушку через дорогу перевести. Не устраивать же из-за этого карьеру. В общем, тоже не достойное жизни действо.
А вот смог бы я придумать что-нибудь такое, чем захотелось бы заниматься даже с кучей денег за пазухой? Ну кроме очевидного жрат-спат-размножатся.
И вот что пришло в голову. Если очень теоретически и исключительно помечтать, то я бы хотел делать роботов. Даже будучи богатым. Не тех роботов, которые дилдо в амазоновских складах сортируют, а полезных. Которые бы мусор вдоль рек собирали, или сортировали его по домам, или дороги ремонтировали, или всякие там сарайчики для пони возводили, или территории исследовали и карты по ним составляли. Дело выглядит настолько полезным и занимательным, что я бы по такому поводу даже в предприниматели пошёл.
Но это конечно всё очень абстрактно, технически сложно, и имеет какую-то нарциссическую привлекательность только тогда, когда я уже что-то реально сделал, и теперь решаю более глобальные проблемы на базе уже решённых маленьких. Ну вот я решил сделать какого-нибудь мелкого робота, развить его насколько хватит фантазии, и посмотреть, интересно ли этим заниматься вживую.
Мини-терминатор
Итак, знакомьтесь, это Жорик. Он будет выслеживать людей, которые обижали меня в школе, и сопровождать их в лучший из миров.
Акей, это не Жорик, и, кроме как ездить по заданному маршруту и буксовать в кровать, он нихрена не умеет, но эту штуку я ковыряю уже недели две, впереди вообще тьма работы, и это просто не передать, как интересно.
Для того, чтобы собирать эту штуку, у меня уже практически всё было: сенсоры, микроконтроллеры, провода, драйвер мотора и даже сами моторчики. Но я решил докупить более или менее качественное шасси с нормальными двигателями, и вешать остальное уже поверху.
Макси-лего
Шасси на амазоне стоят каких-то конских денег, выглядя при этом как китайская поделка за пятак, но в результате я нашёл образчик от OSEPP где-то за 119 канадских даляров. В чудесном багрово-аллюминиевом исполнении, с гусеницами и даже сервоприводом для вращения механической головой.
Хотя жаба поначалу и душила, но, получив заветную коробку, я понял, что оно того стоило. На моторах чувствовалась заводская смазка, гусеницы были сделаны из очень качественной резины, болтов и комплектухи было с запасом, и вживую агрегат выглядел намного симпатичнее, чем на картинке.
Аккумуляторы и плата драйвера для моторов у меня уже были, и тут же появилась первая по-настоящему интересная задача: из чего делать «мозги»? Те самые, которые будут отправлять сигнал на драйвер «моторы вперёд» и заодно ориентироваться в пространстве. Выбор ведь на самом деле внушительный.
Arduino, хотя и самая простая в использовании, отпадает хотя бы потому, что обработку изображений и машинное обучение они в жизни не потянет.
Какой-нибудь Raspberry PI Zero — уже получше. Да и пятимегапиксельная камера к нему у меня есть. Но я всё ещё не уверен, что она нормально потянет обработку видео. Ну и совмещать низкоуровневые железные команды («подать ток на левый мотор») с высокоуровневыми («снять изображение с камеры и отправить в TensorFlow») почему-то не выглядит хорошей идеей.
Есть штуки и помощнее, вроде Asus TinkerBoard, который раза в два мощнее Raspberry, при тех же размерах, и даже Jetson Nano от NVidia, который порвёт в тряпки и машинное обучение, и батарейки, к которым его подключат. Но всё равно совмещать низкоуровневую и высокоуровневую логику не выглядит правильным, и поэтому я решил выпендриться.
«Мозгов» будет не один, а два! Первый — какой-нибудь энергоэффективный микроконтроллер, который будет общаться с сенсорами и моторами напрямую, и второй, мощнее, прожорливее, который будет исключительно думать, а не заморачиваться всякими токами и датчиками. Будет сразу говорить младшему «мозгу» «едем вперёд». А когда наступит батареечный голод, младший скажет «так, хватит думать», и отрубит старшему питание. Всё как у людей.
В качестве младшего «мозга» я взял ESP32, про который уже вскользь упоминал когда-то. Там есть bluetooth, wifi, много лапок для подключения сенсоров и достаточно мегагерц, чтобы он мог научиться объезжать какие-нибудь базовые препятствия.
А второй «мозг» даже выбирать сейчас не надо — когда первый будет готов, с ним удалённо по WiFI/BT/UART сможет работать всё, что угодно, и когда придёт время, можно будет выбрать что-нибудь конкретное.
Вторая прикольная задача пришла тут же: как это всё монтировать на корпус? Железок и проводов будет много, места мало, и важно, чтобы это всё плотно сидело и не телепалось из стороны в стороны. И интуитивно вроде понятно, как оно должно быть, но физически я же такого никогда не делал!
Через несколько дней размышлений о природе вещей я-таки научился обжимать dupont кабеля, решился сверлить текстолит, распаял маленькую плату с переходниками, нашёл на амазоне особой приятности болтики, и оно как-то получилось! Это так странно, заниматься дизайном реальных вещей после дизайна программного, что даже вдвойне интересно.
А пока что я подвис на следующем: эта адская машина ездит по строго заданной программе: вперёд, назад, развернуться, задавить ребёнка, повторить. Всё-таки прежде, чем обвешать её сенсорами и научить любви, надо бы научиться управлять ей удалённо. Самый простой способ — подключить её к домашнему вайфаю и вписать внутрь маленький веб-сервер с API для удалённого контроля за начинкой. Я уже делал что-то похожее для домашнего термометра, и ничего нового тут нет. Тем более «я ж программист!». Но что-то прокрастинирую.
Но даже сейчас это, блин, прикольно. Делать что-то настоящее, своими руками, и по всему стеку технологий — от какого-то дизайна и монтажа плат, до C++ и потенциально Python с TensorFlow. И это при том, что по паспорту я — фронтендер, пускай и работаю облачным консультантом.
А потом, глядишь, доделаю этого бедолагу, поставлю производство терминаторов на поток, и вот оно, богатство и мировое доминирование. Муа-ха-ха!
Кросавчег.
Какова текущая стоимость даннного проекта? В плане сколько уже потрачено даляров? Может и себе заняться…
Блин, я даже боюсь представить, сколько денег на это всё задействовал. Если продавать Жорика на запчасти, то, может, сотни полторы выйдет. Но я же покупал всё пачками, на всякий случай и часто про запас, так что там будет сильно больше 🙂 Правда, всё это сильно растянуто по времени. Например, драйвер мотора я купил году в 2014м, ESP32 — где-то в феврале, а шасси — две недели назад. Можно сделать и очень бюджетный вариант — купить микроконтроллер и какую-нибудь детскую радиоуправляемую машинку на запчасти.
Порог входа очень мастшабируем
Хууух…. хорошо, что мы дружили в школе))) А то кто его знает, что будет уметь Жорик через год!;)
Нужно будет потом do-not-kill-list.txt составить 🙂
Эй! Эй! 🙂 Меня с Юлей и Катькой не забудь в него включить! И пермишны на файлик корректно выставить… :-X
Слу, ну само собой. Я тебя в sudoers добавлю, если нужно будет Жорика на выходных по делам отдолжить. Заводи свой список