Robot Rabbit

Robot Rabbit

translated from Russian via ChatGPT RU EN
#156

Решил по быстрому накидать блог на английском чтобы был. Буду туда дублировать все посты отсюда. https://xrabbit.dev

...
#155

У меня прям горит от того что NVIDIA выпилила аппаратный энкодер h264 из jetson хотя позиционирует его как edge ai device с двумя csi портами под камеры. Софтварным кодеком нагрузка на CPU на 1080p@30fps доходит до 40% и потребление ватт сильно взлетает.

Немного изучив топик сложилось ощущение что rapsberry pi 5 тоже лишился аппаратного энкодера из за шортэджа кристаллов, но rpi4 все еще имеет его. У меня кстати он есть и использовался в роботе пока я не переработал его на jetson. На том же разрешении и частоте кадров rpi4 потребляет на больше 5W и загрузка CPU не больше 5% переваривая поток без затыков.

Теперь появляются мысли о том, что разгрузить jetson перенеся все узлы для контроля механикой и стриминг камеры с jetson на rpi объединив их в кластер не такая уж и плохая идея. Кажется что дополнительные 5W погоду не сделают но освободят все ресурсы для Хуанга.

Возникает вопрос как объединить их вместе так как где то должен подниматься сервер NATS. Ethernet + мини свитч или ethernet over usb?

...
#154

Из за того что baseline стереопары довольно широкий она может измерять глубину только от 30см. Что создает слепой участок перед роботом. Терпимо но не очень приятно. Возможно можно подумать в сторону лидара или или проксимити сенсора для obsticle avoidance.

...
#153

Не удержался и решил поиграться с points cloud и depth measurment. Пока попробовал самую легкую модель.

То что на экране снизу это еще не SLAM а просто stateless point cloud который с частотой 30hz паблишится из робота в nats и рисуется с помощью treejs в браузере. Чем дальше точка тем ближе она к зеленому. Это всего лишь для удобства но в кода это просто 3 или 4 мерная матрица (4 если хочется сохранить оригинальный цвет с камеры)

Из сложного оказалось что 1280x720 слишком тяжело и просто байтовый блоб этой матрицы весит 70+Mb. Прокачивать такой массив 30 раз в секунду невозможно из за ограничения в 64Mb на сообщение и ограничения канала. Уменьшив разрешения до 320p и сжав его zlib получилось получить пару сотен килобайт что выглядит ок. Плюс эта матрица sparse поэтому можно еще выкинуть нули из нее. Хотя может и нет смысла если все равно сжимать.

Click to Play
Preview
...
#152

Теперь приходится схлопнуть все обратно в один узел который эксклюзивно имеет доступ к камере и делает все.

...
#151

Из за этого идея вытекают несколько других проблем. Изначально я думал сделать несколько узлов которые работают с камерой. Из за того что к камере может иметь доступ только один процесс я подумал о локальном стриминге через ZED SDK. То есть к камере коннектится один процесс и стримит пожатый h264 поток. Так же SDK позволяет и читать все другие параметры через стриминг словно используешь камеру локально. Но проблема в том что стриминг через SDK сильно завязан на аппаратное сжатие и без него крашится и не работает.

...
#150

Очередное разочарование, в NVIDIA Jetson Orin nano нет аппаратного сжатия h264.

...
#149

Сегодня поймал себя на мысли что столько классных идей которые хочется попробовать реализировать при этом уже куча технического долга который тоже бы по хорошему решить сейчас.

Как минимум хочется прямо сейчас закончить механику чтобы перейти к perception.

  • переделать руль
  • укрепить второй этаж (нарезать лазером акриловую пластину и пересобрать на новой площадке)
  • поменять задние моторы или поднять немного оси и купить колеса побольше
  • подрегулировать ускорение или распределить весь лучше (сейчас рэббит слегка подпрыгивает при резком ускорении)
...
#148

Большой мэилстоун. Он может передвигаться и управляться удаленно.

  • работает от батареи
  • видео стримится в реалтайме в 720p@30
  • задержки контроллера минимальные

Из проблем:

  • руль очень нервный
  • передаточное число редукторов слишком больше и робот очень медленный и шумный (bldc?)
  • видео не сжато h264, я беру каждый кадр и сжимаю в jpeg из за чего перегоняться много гигабайт, что не будет работать в 4g
  • углы руля очень маленькие, надо переделывать ступицу и линки
Click to Play
Preview
...
#147

Сегодня развел все провода и компоненты. Пришлось 5 раз его разобрать и собрать заного потому что каждый раз какая то новая херня возникала.

Из хорошего батарея вообще огонь. Во первых может пропускать ток когда подключена к зарядки и может заряжаться и питать робот одновременно.

Preview
...
#146

Завайрил контроллер задних моторов, сенсор напряжения, 2 step down регулятора, один для серво руля, другой для моторов и контроллера и запустил от батареи. Кажется ничего не задымилось, хороший знак.

Preview
...
#145

Перфекционизм - главный враг продуктивности

Preview
...
#144

Слегка напоминает на робота из фильма «ВАЛЛ-И». В целом я доволен как выглядит и как все влезло. Теперь надо подключить провода и проверить что все работает.

Preview
...
#143

Батарея конечно делает его горбатеньким а стереокамера добавляет выражение лица. С рукой будет еще забавнее смотреться. Перед немного пустоват но там будет контроллер руки. В будущем еще будет лидар но это чуть позже. Проблема что камера имеет предел измерения глубины от 30см, то есть прям перед роботом у него слепая зона. Эту проблему надо будет тоже как то решать.

Preview Preview Preview Preview Preview Preview
...
#142

Собрал все вместе но еще не соединял провода. Хотел увидеть как это будет смотреться в сборке. Пока без руки, ее добавлю чуть позже или пока вообще отложу до следующего мейлстоуна.

Preview
...
#141

Дальше четырехканальная INA. Про нее чуть позже напишу. Сегодня запаял 4 шунта по 0.01 Ом для измерения тока и напряжения на разных узлах.

Preview Preview Preview
...
#140

С jetson чуть посложнее так как у него нет отверстий на dev board. Пришлось просверлить дырки, надеюсь ничего не задел и он все еще работает.

Preview Preview Preview
...
#139

Получилась такая пластина со стендоффами на которые буду монтировать компоненты.

Preview Preview Preview
...
#138

После этого нарезал резьбу чтобы не закручивать гайки с обратной стороны.

Preview Preview
...
#137

CAD я не осилил и решил все разрисовать в Figma. Почти на все компоненты были даташиты с размерами но некоторые пришлось измерять вручную чтобы точно разместить отверстия. Потом сходил к Денису и распечатал расположение компонентов и дырок. Приклеил к листам которые нарезал лазером и просверлил отверстия.

Preview Preview Preview
...
#136

Сегодня весь день не выходил из дома и занимался роботом. После 2 недель без прогресса снова загорелся и продвинулся неплохо так вперед. Нашел оптимальный лейаут компонентов чтобы минимизировать провода и уместить все компакненько.

Preview
...
#135

Весь робот в сборке будет около 3.5кг. Нифигово так конечно.

Preview
...
#134

Медитативное занятие нарезание резьбы.

Click to Play
Preview
...
#133

Есть конечно еще шанс что спеки батареи врут и в реальности она отдает гораздо меньше. Очень не хочется этого потому что возвращаться на RC lipo с большой токотдачей из за возни с зарядкой BMS и всякими другими защитами и безопасностью.

...
#132

Попробовал еще несколько heavy workloads. Jetson стабильно репортит «System throttled due to over-current». Я сомневаюсь что она жалуется на слишком большой ток вызванный включение GPU. Скорее всего это просто стандартная ошибка защиты и реальная проблема - under voltage. Батарея по спекам должна спокойно отдавать 10A а в пике даже больше что должно хватить за глаза джетсону. Прична может быть в слишком тонких и длинных проводах. Я купил barrel jack не глядя на толщину кабелей. Приехали AWG22 метровой длины. Падение напряжения на таком сетапе при скачках тока может доходить до 1V что точно будет заметно и скорее всего jetson включает throttling даже несмотря на то, что напряжения ему хватает.

На выходных попробую померить токи и напряжения при разной нагрузке. В лучшем случае обрежу провода. Если не поможет и причина реально в проводах то надо будет уже в 4 раз заказать новый barrel jack с AWG18.

...
#131

В SDK есть модели для построения point cloud которые будут полезны для SLAM (одновременная локализация и маппинг) когда робот определяет свое положение и поддерживает карту местности.

Click to Play
Preview
...
#130

В камере еще есть IMU. Акселерометр гироскоп и магнитометр.

Click to Play
Preview
...
...
#128

При устанвке ZED SDK он решил что надо оптимизировать neural depth models что повысило потребление до 7W и 1.4A

Preview
...
#127

При минимальной нагрузке на режиме питания MAXN_SUPER потребление не больше 1A. Попробую нагрузить его камерой и посмотреть сколько он один проработает от батареи.

Preview
...
#126

С 3 раза заказал правильный барель джек для питания и dupont коннекторы. По быстрому обжал и проверил как оно работать. По спеке dev борда может питаться 9-20V. Батарея на 96% выдает 16.2V что в пределах поэтому можно питать без step down конверторов.

...
#125

Как же бесит что nvidia так хреново тестирует jetpack. Вчера я окончательно сломал свой jetson и решил заново его прошить. После часа свежий jetpack не смог запустить chrome и любой другой браузер. После пары часов разговоров с chat gpt и claude ни к чему не пришел кроме как установить chrome из flatpak.

Решил попробовать gemini + deep research сегодня с утра и оно прям 🔥. Проблема в snap и самый простой способ решить ее откатом snap на версию назад. Это уже второй раз когда очень простой юзкейс ломается в jetpack и решается простым откатом версий.

Preview
...
#124

Из других обновлений так же дождался 5G гейтвей. Уже разобрал так он более компактный и удобнее крепить плату на стендоффы на корпус робота. Думал в комплекте будут GNSS и 5G антенны но их не оказалось, придется заказывать отдельно.

Preview
...
#123

Забрал сегодя послыку из штатов в которой пришла стереокамера ZED 2i. Выглядит она конечно офигенно. Моя версия с фокусным расстоянием 2.1mm, я подумал что в помещении это будет чуть лучше чем 4mm. Из интересных оснобенностей:

  • SDK не работает в parallels так как собрано только x86 и не работает на windows arm
  • SDK надо качать с сайта и его нет в репозиториях питона что не очень удобно, чтобы запустить простой захват изображения надо тоже помучаться но из хорошего у них уже есть готовый docker образ под l4t и jetpack
  • она откзалась работать со всеми USB кабелями кроме родного а это прям бесит потому что ты дебажишь софтовую часть и в последнюю очередь думаешь о usb кабелях
  • не сказать что я в восторге от качества но у нее очень много других плюсов, прямо в ней есть IMU и fusion и несколько других сесоров и с ними достаточно просто работать
  • в итоге посидев 4 часа я завел ее и застримил картинку и телеметрию с сенсоров через nats в браузер
Preview
...
#122

Решил немного обновить интерфейс и порефакторить кода. Хочу сделать UI в ретро стиле и немного пиксель арта. Накидал базовых компонентов, определился с шрифтами, накидал встроенный отладочный терминал (думаю использовать его для отправки кастомных сообщений в nats) и добавил няшный лоадер.

Click to Play
Preview
Preview
...
#121

Плюс для сенсоров и телеметрии nats -> telegraf -> influxdb -> grafana просто офигенно просто

...
#120

После пары дней которые я просидел с nats я в восторге от него. Настолько простой, легкий и удобный что я не понимаю как я до сих пор не пересекался с ним. У меня ощущение что это nginx из мира pubsub.

...
#119

Вздохнул свежим воздухом и перешел полностью на nats. Это мне дало:

  • выкинул webrtc (это прям гигантский кусок)

  • сигналинг сервер для webrtc

  • ros2 (куча кода)

  • странные билд скрипты для того чтобы запускать ros2 в докере и локально

  • на клиенте теперь websocket и nats

  • доступ ко всем топикам на клиенте

  • отсутствие сборки кастомных сообщений

  • видео передаются как кадры отдельными сообщениями

  • все отлично работает в докере и мониторится стандартными средствами типо prometheus и influxdb

  • узлы робота на любом языке в том числе typescript

  • кода стало в разы меньше, нет непонятных автосгенерированных файлов, все чистенько и аккуратно

  • выкинуть ros2 стало лучшим решением

  • почти все библиотеки обработки изображений, slam и навигации доступны как библиотеки и не привязаны к ros2 что не будет блогером их использования

  • из минусов пришлось отказаться от foxglove, но я думаю что попробу написать для него bridge

...
#118

Может быть когда нибудь я сформулирую свои мысли и постараюсь максимально нейтрально описать все свои претензии к нему но пока мне лень.

Вчера я удалил полностью из репозитория весь код который я и ллм написали за неделю (несколько тысяч строк).

...
#117

Спустя примерно неделю изучения и ROS2 как фреимворка и экосистемы я сдался и пока забил на него. Меня удивляет как это стало стандартом индустрии. Я попробовал отделить ощущения которые я испытывал из за отвержения чего то нового от реальных сложностей которые новички испытывают при изучении ROS2.

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

...
#116

Начинается веселье с jetson orin nano. Свежий docker не работает и падает с ошибкой:

failed to solve: process "/bin/sh -c uv sync" did not complete successfully: failed to create endpoint laixim2p0a4udq2v8p15ez4p2 on network bridge: Unable to enable DIRECT ACCESS FILTERING - DROP rule:  (iptables failed: iptables --wait -t raw -A PREROUTING -d 172.17.0.2 ! -i docker0 -j DROP: iptables v1.8.7 (legacy): can't initialize iptables table `raw': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

https://forums.developer.nvidia.com/t/iptables-error-message/333007

Советуют

downgrade the docker to avoid the error

...
...
#114

На сегодня пока все. Он все еще не ездит но кажется что следующий мэилстон уже виден.

Preview Preview Preview
...
#113

При этом серво руля подключается через PCA9685 и напрямую к пинам jetson. Но распаивать много проводов не очень хочется поэтому купил i2c expansion board. Удобно еще добавлю i2c. К тому же ground гребенка оказалась очень удобной чтобы замкнуть все GND вместе на всех платках.

Preview
...
#112

Хочу 4 таких сенсора. Один между роботом и батареей, и 3 других после step down dc конверторов:

  • задние моторы
  • nvidia jetson
  • все серво приводы (рука и руль) но может разделю их потом

4 сенсора и все они по умолчанию имеют один и тот же i2c адрес. Это можно поменять запаяв перемычки на breakout плате. Но мне не очень нравится. Поэтому я купил i2c multiplexer. Изначально я думал что этот мультиплексор работает как роутер и поддерживает виртуальные адреса. То есть например сам мультиплексор имеет адрес 0x40 и поддерживает внутреннее виртуальные пространство адресов и позволяет подключать чипы с одними именами обращаясь к ним по индексам групп пинов при этом можно писать и читать во все устройства одновременно. Но это работает не так. По сути это просто 8 канальный свитч который программно можно переключать. Но это тоже не проблема потому что чтение со всех сенсоров можно очень просто реализовать циклом который проходит по всем включенным каналом читает показание с одного и того же адреса и записывает в ros2 топик и потом в influxdb. Все это примерно 20 строк на питоне и можно запустить в отдельном докер контейнере.

...
#111

Разобрался как работает ina226 - сенсор тока который можно читать по i2c. Все достаточно несложно но по умолчанию в китайской breakout board идет R100 шунт что слишком много для измерения токов больших 819.175 mA. Хотя мощности хватает и с ним ничего не будет но данные будут отрезаны. Но это очень просто пофиксить перепаяв шунт на R010 (мΩ). После этого за счет падения точности можно будет мерить токи до 8.2A. Это конечно оверкилл то но 0.8A тоже слишком мало. Заказал R010 2512 (в SMD форм факторе) на алике потому что в jaycar как обычно ничего нету.

Preview Preview
...
...
#109

Заказал новые с Амазона уже нужного размера. Через несколько дней пришли такого же размера🤦‍♂️ как блин так получается?

...
#108

Надо написать setup.sh чтобы бутстрапить робота с нуля. В четвертый раз настраивать ssh, wg и все пакеты я не осилю.

...
#107

Прикинул все платы на акриле и закрепил некоторые из них на стендоффы. Вроде все влезло, но надо будет еще подумать над лейаутом.

Preview Preview Preview
...
#106

Еще сегодня забрал порезанный лазером акрил. Получилось идеально и очень аккуратно. Для этой версии буду сверлить отверстия вручную, а для следующий версии разрисую в CAD все отверстия чтобы все получилось идеально.

Preview Preview Preview Preview
...
#105

Пытался подружить камеру от rpi с jetson но ничего не получилось. Ну да ладно, дождусь zed и тогда уже сделаю нормально.

Preview Preview Preview
...
#104

Доехала литиевая смазка. Смазал все двигающие части.

Preview Preview
...
#103

Купил мини дрель чтобы быстро сверлить отверстия.

Click to Play
Preview
...
#102

Чет не очень нравится как получается резать листы акрилла лобизком. Решил попробовать заказать лазерную резку.

Preview
...
#101

Поменял пластиковые ступицы рулевого управления на алюминиевые и под цвет механической руки.

Preview Preview Preview
...
#100

На сегодня все, вот так это пока выглядит, но будет еще будет еще промежуточный этаж где будет находится nvidia jetson и пара других плат.

Preview
...
#99

Дальше хочу разместить все платы на акриловых пластинах. Выпилил лобзиком нужную форму, просверлил дырки и нарезал резьбу чтобы вкрутить стендоффы.

Preview Preview Preview Preview Preview
...
#98

Вот так это выгляди в первом приближении. Основание яуть позже подпилю чтобы углы не выпирали так сильно.

Click to Play
Preview
...
#97

Очень повезло с тем что отверстия на металлической пластине почти идеально совпали с v plate. Единственное для надежности просверлил пару дырок M4.

Preview Preview
...
#96

Разобрал полностью робота и начал собирать руку

Preview Preview Preview Preview Preview Preview
...
#95

Кажется пришла пора разбирать первый прототип и начать собирать новый v0.0.2

Preview
...
#94

И последнее - диски по металлу и тапы для нарезания резьбы. Попробую разместить все электронику компактно и надежно.

Preview
...
#93

И наконец доехали шариковые наконечники для рулевого линка. Сам линк и хабы пока не доехали. Не помню писал или нет но хочу заменить весь пластик этими металлическими апгрейдами.

Preview
...
#92

Так как i2c поддерживает адресацию можно просто распараллелить пины поменяв адреса устройств. Для этого есть такой маленький и удобный 10 канальный девайс.

Preview
...
#91

Из более интересного - ina226 i2c. Простыми словами сенсор напряжения чтобы читать напряжение и ток по i2c и выводить напряжение на дешборде робота. Телеметрии никогда не бывает много.

Preview
...
#90

Так же продолжался с barel jack для питания jetson. Приехал не тот диаметр 🤦‍♂️

Preview
...
#89

Так же доехали короткие провода dupont и разноцветные пины. Не терпится уже начать сборку версии 0.0.2

Preview
...
#88

Каждый раз заказывая с AliExpress я получаю что то не то. Это уже становится смешно. Я хотел чуть получше развести gpio пины и заказ 40 пиновый хедер. Но вместо это получил хедер с двумя рядами по 40 вместо 40 суммарно. Окей, til.

Preview
...
#87

А это безумный контроллер моторов roboclaw 2x30 который поддерживает до 30 ампер и может работать с энкодерами через uart или usb. Можно было бы наверное обойтись чем то попроще но выглядит он конечно внушительно и классно.

Preview
...
#86

Силиконовые standoffs оказались невероятно удобными для монтажа плат на роботе.

Preview
...
#85

Просто незаменимая вещь при прототипировании. Даже не знаю что бы без нее делал.

Preview
...
#84

Немного еще фоток которые забыл запостить в самом начале процесса

Preview
...
#83

Вот кстати зарядник с балансировкой для lipo который мне уже не нужен. Может быть когда нибудь займусь дронами или rc машинами тогда может еще пригодиться.

Preview
...
#82

Спустя 2 дня разобрался с webrtc протоколам который собираюсь использовать для стрима картинки с камеры робота и управления роботом из браузера. Конечно это не просто http сервер с запросами и ответами. К этому моменту уже наткнулся на кучу эджкейсов и поведении при реконнектах и перезагрузках. Начинал с умного сигналинг сервера но пришел к тупому бродкасту сообщение через websocket.

Результат на экране. Терминал снизу слева это скрипт на питоне который шлет offer, браузер слева - ui робота к которому подключен dualsense. После установки соединения команды с джойстика отправляются через webrtc в python скрипт через data channel и там пока просто логируются.

Click to Play
Preview
...
#81

Очень долго пытался подружить эти rpi csi камеру с ubuntu но нифига не получилось. Решил попробовать с официальным линуксом для rpi и все завелось с первого раза. Видимо долго еще я буду с ней мучаться пока не накоплю денег на zed 2i. Плюс у jetson немного другой разъем под csi и придется заказывать переходник.

Click to Play
Preview
...
#80

GPD WIN4 выглядит как идеальный контроллер для робота. Цена конечно конская но полноценный компьютер с клавой довольно привлекательный.

Preview
...
#79

Вот кстати jetson в recovery mode при перепрошивке. Для перевода в этот режим надо замкнуть 2 контакта.

Preview
...
#78

Она довольно тяжелая и высокая, поэтому придется завести ее на 3 этаж. Для установки PCB купил оргстекло и вырезал лобзиком такую же форму что и металлические пластины чтобы можно было просверлить дырки просто в любых местах.

Preview Preview
...
#77

Так же я взял V plate к ней чтобы надежно закрепить его на роботе.

Preview Preview Preview
...
#76

Насчет питания. Изначально я думал использовать rc lipo на 7000mah но решил отойти от этой идеи. Меня немного напрягает что эти батареи могут быть (хотя и маловероятно) довольно опасными. Заряжать их надо под присмотром, в них нет встроенного BMS. Но они дают куда больший ток разрядки (мне скорее всего не надо будет > 10А) и намного легче чем стопка 18650. Долго выбирал и в итоге наткнулся на V mount батареи которые используются в профессиональной видеосъемке. Это уже собранные аккумы 18650 со встроенной BMS. Они могут выжать 14.45В при 14А что выглядит более чем достаточно при этом имеют очень неплохой объем.

Preview
...
#75

В конечном итоге увидел этот заветный экран. В итоге система грузится с nvme и кажется все работает. Теперь надо перенести все что есть на новую платформу и подключить и распаять все провода.

Preview
...
#74

Смог прошить его только с 3 раза, при этом каждый раз это занимало минут 30. Каждый раз отваливалось что то новые. Оказалось проблемы были из за wireguard, ufw то ssh отвалится.

Preview
...
#73

В итоге вернулся к варианту с nvidia sdk manager

Preview
...
#72

Для этого использовал свой cube с ubuntu. Из за того что у cube только 1 слот под nvme m.2 пришлось загружать систему со флешки используя try ubuntu. После этого поправил конфиги лоадера и bios. Но система отказывалась загружаться. Посидев часа 2 с ChatGPT так и не смог пофиксить это.

Preview
...
#71

Потратил 2 дня чтобы поставить L4T на jetson. Это оказалось куда сложнее чем я думал. Сначала наивно полагал что смогу просто нарезать образ для SD карты на nvme и подправить BIOS чтобы загрузиться с него но это не получилось.

Preview Preview
...
#70

Обзовется NVIDIA Jetson Orin Nano super dev kit. Пока не столько из за того что уперся в потолок rpi4 а скорее чтобы представлять размер и будущее расположение печатных плат на роботе.

Preview
...
#69

Расписал и разрисовал немого схему и план того что делаю чтобы не теряться во всем этом

Preview
...
...
#67

Чтобы понимать примерно лейаут располжения компонентов надо было примерно определиться с батарей. Пока остановился на следующих моделях из котрыйх скорее всего посмотрю на Gens Ace Redline 4S от 5000mAh с bullet разъемом. Хотя мне не надо такой большой ток разрадки но найти что то меньше с похожим объекмом сложно. Gens Ace Redline 4S

...
#66

Кривая разряда батарей не совсем линейная но тем не менее можно примерно оценить оставшийся заряд в процентах. Этот экран будет стоять на роботе чтобы примерно представлять не глядя в UI. Для отображения телеметрии на дешборде надо будет добавить делитель напряжения и АЦП. Он будет через I2C отправлять данные на rpi где уже будет простая математика чтобы посчитать проценты по вольтажу и отправлять данные в топик ros2. Откуда оно уже будет читаться дешбордами или контролплейном.

Preview
...
#65

На реле можно задать параметры напряжения UP/DOWN. Реле включается если напряжение больше 11.4V и выключается при напряжении ниже 10.5V. Такой своеобразный гистерезис чтобы не мигать при переходе через порог.

Click to Play
Preview
...
#64

Возвращаясь к электрике. Собрал на коленке то, как хочу сделать электрику. Идея использовать реле для отключения и включения цепи только в пределах каких то порогах чтобы предотвратить переразряд батареи. И для бонуса отдельно включать каждый компонент независимо для облегчения тестирования и прототипирования.

Preview
...
#63

Еще одна рандомная мысль что можно загонять машину в дрифт за счет этого. Никогда раньше об этом не задумывался но когда делаешь это своими руками приходит осознание вещей которые раньше казались банальными.

...
#62

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

...
#61

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

...
#60

Будет классно конечно переделать весь руль и избавиться от пластика совсем

...
#59

С линками тоже нет проблем и стоят копейки

Preview
...
#58

Надо посмотреть по размер и форме но найти алюминиевый или медный кулачок вроде не проблема.

Preview
...
#57

Немного подбешивает что steering knuckle и steering linkage пластиковые и хлипкие. Особенно кулачок в steering linkage. Мне кажется я уже сорвал с него резьбу пока несколько раз разбирал рулевой механизм пока настраивал и менял серво. Решил посмотреть что есть на алике и открыл для себя целый новый мир.

...
#56

Ах да, пока не забыл надо будет в баннингс купить какой нить металлический бокс для хранения lipo и обшить его огнеупорным материалом. Просто чтобы успокоить моего параноика.

...
#55

Думаю купить несколько акриловых пластин и вырезать в аккурат с этой пластиной чтобы было аккуратнее и сделать многослойную вафлю и маунтить компоненты с обоих сторон.

Preview
...
#54

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

Preview
...
#53

Так же дождался наконец то с алика 3 штуки которые хотел спаять до перевода робота на lipo 4s

Слево discharge контроллер с экраном на который можно вывести напряжение и процент заряда и эстимейт по времени если задать параметры батареи. При достижении нижнего порога реле обесточивает цепь чтобы не переразряжать батарею. Это не очень полезно для lipo.

Снизу просто массив выключателей чтобы можно было питать все ноды по отдельности и выключать некоторые при необходимости. Их уже сейчас 4 а скоро будет минимум 8.

И справа АЦП (ADC) чтобы воткнуть его в цепь уже считывать напряжение на rpi и слать в топик ros2. Чтобы няшно отображать уровень батареи в UI.

Preview
...
#52

Как видно отзывчивость руля в разы увеличилась. Так же bldc намного тише.

Preview
Click to Play
Preview
...
#51

Заменил дешевый серво новым от гоночного rc для более быстрого и точного руля.

Click to Play
Preview
Click to Play
Preview
...
...
#49

Список покупок:

  • pan tilt servo kit
  • xArm ESP32 Bus Servo Robotic Arm
...
#48

Как раз у меня еще много свободных пинов в в PCA9685.

...
#47

Идея разместить ее на 2 серво чтобы управлять обзором через стик джоя. Называется это pan tilt servo kit.

...
#46

Нашел у себя CSI камеру для rpi которую купил для какого то проекта но никогда не использовал. Попробовал подключить и написать простенький webrtc сервер чтобы стримить поток в браузер на девайс с джоем. После 3 часов пока что получил только зеленый экран.

...
#45

Dualsense отличный джой но там нет экрана что не очень удобно. Кажется неплохой кандидат - анберник на линуксе и запуск UI в вебе rg552

...
#44

На следующей неделе попробую перевести проект на ros2 но без их сборщика и структуры проекта. Попробую использовать docker и ros2 как библиотеку.

...
#43

Идея что джой шлет события в трубу и другие ноды просто подписываются на топики и реагирует прекрасна.

...
#42

Вообще приходит потихонечку осознание причин по который ros2 похож на микросервисы с трубами. В моем скрипте не очень удобно что компоненты сильно зависят друг от друга и знают все обо всех.

...
#41

Есть еще docker compose watch mode но пока чет не разобрался с ним, может вернусь попозже

...
#40

Перевел весть проект на docker compose и uv стало попроще менеджить зависимости и можно удобно прокнить девайсы через маппинг:

services:
  rabbit:
    build: .
    volumes:
      - ./src:/app/src
    devices:
      - '/dev/input/event0:/dev/joy'
      - '/dev/ttyAMA0:/dev/roboclaw'
    privileged: true
    command: uv run /app/src/main.py
    stdin_open: true
    tty: true
...
#39

Надо бы закрепить PCBишки на vertical/horizontal mount на акрилловую или другую пластину на которой можно будет легко сверлить отверстия и прикрутить к ней другие компоненты. При этом шасси робота не будет сверлиться и не будет повреждено в случае переделки.

...
#38

По идее можно заменить моторы и поставить bldc но надо будет менять контроллер.

...
#37

Первая поездка. Руль немного не сбалансирован, угол поворота слишком маленький, надо бы увеличить и подрегулировать импульсы pwm. Моторы чет медленные, надо или увеличить колеса или взять другие редукторы. Но в целом очень рад что он поехал.

Click to Play
Preview
...
#36

Сервы я уже тестировал до этого но сейчас нормально подключил к контроллеру и допили питон скрипт.

Click to Play
Preview
...
#35

Для питания LM2596 step down dc dc на 6V

Preview
...
#34

Управлять сервой буду через PWM, i2c и PCA9685

...
#33

Серво у меня 1501MG довольно дешевая и громкая. Как придет поменяю но пока что есть.

...
#32

А да, я сначала начал писать код прямо на rpi через ssh но многие вещи не работали нормально в vscode поэтому решил разрабатывать локально на mac но синкать файлы с помощью mutagen. Довольно простая и классная тулза. Еще один инструмент в тулбокс.

...
#31

Теперь надо заняться серво и подружить его со стиками.

...
#30

Я добавил настроку в 1с таймаута в roboclaw чтобы моторы останавливался если контроллер не получал команды в течении 1 секунды. Это надо чтобы избежать залипаний если вдруг программа крашится или есть как то баг.

...
#29

В итоге получился просто питон скрипт с 3 классами (rabbit, joy и roboclaw) и 2 треда с циклами (один слушает джой обновляя стейт, другой посылает команды в бесконечном цикле в roboclaw по UART)

...
#28

При подключении всего робот поехал назад а не вперед, но исправляется просто умножением на -1 или перестановкой проводов.

...
#27

Подключить контроллер оказалось просто и завелось все с первого раза. На R2 курок думаю сделать движение вперед. Диапазон значений от 0 до 255 можно нормализовать для диапазона для roboclaw (-32767, 32767) простой формулой.

...
#26

Для управления через PS5 dualsense пока решил не заморачиваться с bluetooth тем более что конечная цель - управление через интернет для bluetooth.

...
#25

Вообще интересно вспоминать все что когда проходил в школе, универе и слышал от папы и применять это в реальном мире.

...
#24

Резисторы для 5V -> 3.3V делителя. Пришлось вспомнить закон Ома 🤔

Preview Preview
...
#23

Первый запуск прошел не очень удачно так как один провод был плохо спаян и долго искал проблему но после прозванивая мультиметром нашел косяк и все завелось.

Click to Play
Preview
...
#22

Сначала думал питать rpi напрямую от gpio 2 или 4 но решил отказаться от этой идеи чтобы случайно не спалить. В итоге взял степ даун регулятор polou 5V D24V90F5 и распаял usbc кабель чтобы соединить их. Наверное это тоже можно сделать чуть аккуратнее.

Preview
...
#21

До этого еще распаял делитель напряжения чтобы соединить RX rpi и roboclaw из за того что они работают на разных уровнях: 3V и 5V. Но уже заменил на понижайку.

Preview
...
#20

Для сервы добавил LM2596 и настроил его на 6В как посоветовал папа. Надо будет заказать еще несколько таких только с экранчиком чтобы было удобно мониторить вольтаж без мультиметра.

Click to Play
Preview
...
#19

Распаял общий GND для всех элементов по дупонт пины

Preview Preview
...
#18

Немного пришлось увеличить дырки под M3

Preview
...
#17

rpi я разобрал сняв с него heating sink но наклеив радиаторы

Preview
...
#16

Возвращаясь назад к плате. Я очень удачно заказал с амазона нейлоновые стендоффы. Во первых я пофиксил рулевой механизм немного удлинив плечи. Во вторых с помощью них очень удобно разместить все pcbишки на прототипной борде.

Preview Preview Preview
...
#15

Про это немного позже, но оказалось что забыл повысить ограничение по току в блоке питания когда тестировал запуск робота в первый раз. В итоге при тестировании джойстика когда резко ражимал на курок ток скакал и rpi вырубалась. Немного посидев с логами нашел:

May 25 01:36:39 rabbit kernel: hwmon hwmon2: Undervoltage detected!
May 25 01:36:41 rabbit kernel: hwmon hwmon2: Voltage normalised

что говорит о проблеме. Попробую поднять максимум до 3 - 4 А и посмотрим как пойдет дело.

Click to Play
Preview
...
#14

Сегодня прям неплохой прогресс. Купил 3 прототайп борты и соединил вместе.

Preview
...
#13

Пока думаю остановиться на prototype board и пока все собрать на ней. Хотя бы будет понятен лейаут и будет чуть проще потом разложить все.

...
#12

Начал задумываться над кастомной PCB и расчехлить лазерный утюг. Посидел с KiCad и понял, что пока рано - слишком много деталей я пока не понимаю. Отложу, пока не появятся MCP для PCB-CAD или не созрею окончательно. Может, Claude когда-нибудь научится разводить платы.

...
#11

Серво тоже работает, но жду более тихий и точный brushless-серво с AliExpress. Как приедет - заменю.

Click to Play
Preview
...
#10

Пока конечно все на соплях и макетке - надо наверное все это распаять на нормальном текстолите с правильными дорожками вместо проводов. Но сначала надо хотя бы заставить это все ехать. Один шаг за раз!

...
#9

В итоге закажу TXS0108E или по-быстрому накидаю делитель напряжения на резисторах, но надо сходить в Jaycar за резисторами.

...
#8

Проблема была в том, что я по глупости купил TXB0104, думая, что этот преобразователь уровней заработает с UART и позволит подключить RX RoboClaw (который работает на 5V), но не получилось. Отключил и оставил только TX 3.3V от Raspberry Pi.

...
#7

Наконец-то запустил двигатели через UART! Первый признак жизни.

Click to Play
Preview
...
#6

RoboClaw не останавливается, если скрипт крашнулся - опасно! Надо обязательно включать RC timeout и слать команды в цикле.

...
#5

Узнал, что есть 2 способа работать с DualSense из браузера: Gamepad API (стандартный, но ограниченный) и WebHID API (полный доступ к всем фичам).

...
#4

Как оказалось, у Raspberry Pi всего один PWM-выход, что ОК для тестов, но я все-таки заказал 16-канальный PWM-драйвер PCA9685, чтобы уж наверняка на случай, если еще добавлю серво. Лучше переборщить, чем потом паять костыли.

...
#3

Планировал сегодня запустить рулевой серво и попробовать его повернуть через Raspberry Pi, но Amazon не довез олово, и придется подождать с пайкой.

...
#2

Заказал с AliExpress и Amazon некоторые базовые компоненты и инструменты для сборки.

Preview
...
#1

Решил немного вспомнить, как держать в руках паяльник, и совместить это с теми знаниями, которые накопил, работая фулстеком. Хочу построить робота с управлением через интернет и рулевым управлением Аккермана. Вторым шагом - поглубже погрузиться в ROS2 и автономную навигацию.