Идея создания rc-car, которой можно управлять из любой точки земного шара по интернету (4g), была реализована в железе и софте. Однако, в дальнейшем проект вошел в фазу «а что дальше с этим делать» и был заморожен. Кроме того, остались некоторые моменты, которые необходимо еще «доработать напильником». Возможно, данный проект вдохновит кого-то, а автор «передаст свою соль в поезде», как в старом анекдоте.
Итак, как переделать rc-car для управления через интернет? Да и еще «чтобы видео смотреть»?
Железо
Про типы rc-car есть хорошая статья.
Машинка, из тех, что имелись в наличии, скорее подходит под определение «buggy»:
Силовой элемент — электромотор.
Пульт управления — стандартный для такого типа игрушек:
И первый вопрос был: как отвязать машинку от пульта?
Первоначально мысли были перехватить сигнал чем-либо и в дальнейшем этот сигнал просто дублировать. Такой подход позволил бы не ломать машинку на части, копаясь в ее внутренностях.
Но это не наш путь. Если «врач сказал ломать, значить — ломать». Поэтому rc-car подверглась радикальной переделке.
Шутки шутками, но в сети попадались проекты, где именно через дублирование сигналов было реализовано управление. Однако, у автора в руках на тот момент были только «молоток и гвозди».
Так как ранее имелась практика работы с raspberry pi, то именно она и легла в основу управления rc-car. К тому же, решился вопрос, как установить камеру видеонаблюдения для трансляции видео.
При изучении устройства машинки, было установлено, что она общается с пультом управления через так называемый драйвер (да простят меня любители rc-car за названия). Если выломать этот драйвер из машинки, и заменить его на что-то другое, то вопрос с управлением будет решен. Наверно.
Проблема в том, что данный драйвер, по сути замыкает на себя управление и мотором, и сервой, которая, в свою очередь, управляет передними колесами влево-вправо.
Таким образом, нужно что-то, что управляет мотором и что-то, что управляет сервой:
*фото для наглядности что есть что взято из ранее упомянутой статьи.
Еще одна проблема — достаточно малые размеры машинки, чтобы в ней можно было разместить что-то массивное.
Итак, учитывая все вышеизложенное, raspberry pi стала сердцем управления машинкой, драйвер был заменен на другой драйвер — bts7960, которому по силам было выдержать те немалые токи, которые гуляют в rc-car при разгоне и движении.
Управление сервой было отдано ногам raspberry pi (сигнальный провод), а питание сервы (5V) через dc-dc преобразователь от бортового блока питания. Питание сервы напрямую от ног raspberry, последняя не пережила бы.
Камера
Была взята стандартная шлейфовая ov5647 noir, так как обычная камера raspberry pi даже в сумерках уже ничего не видит. Да и noir, тоже ничего не видит. Лучше брать imx462 sony. У нее все же «отношение к темноте» лучше (WDR).
Как выяснилось в дальнейшем, при эксплуатации неплохо бы еще иметь какое-то подобие gimbal, чтобы минимизировать тряску при движении. Но это уже «вкусовщина».
Питание
Так как питание от батарей машинки (литий-полимерный аккумулятор) для целей raspberry pi вызывало опасения, да и в целях оперативной смены самих батарей машины без необходимости отключения по питанию одноплатника, было решено запитать логику отдельно от двигателя.
Ups-hat для raspberry pi относительно дорогие, хотя и удобные, тем не менее были выбраны обычные держатели батарей 18650 с защитой, по типу таких:
Модем
4g модем выбирался из числа usb стиков для экономии пространства. Немаловажным фактором, повлиявшим на выбор, являлось наличие внешних антенн связи. Данные антенны «по идее» должны крепиться к usb модему. Но, как выяснилось в дальнейшем, это практически не реализуемо для машинки. Видимо, создатели usb-стика c внешними антеннами ориентировались на то, что сам модем будет надежно закреплен, от него очень аккуратно будут отходить две антенны в комплекте и в дальнейшем всю эту конструкцию никто не будет трогать. Иначе нельзя объяснить столь хлипкое крепление антенн на корпусе модема.
Что-то еще
Конечно же советский конструктор! Составные части которого позволяют создать не только телескопическую палку для камеры над машинкой, но и закрепить на ней то, что невозможно закрепить.
Продолжение следует.
Комментарии (14)
buldo
02.09.2024 11:43У вас на фото стрелочка "драйвер" указывает на ESC, который к управлению сервой вообще не имеет отношения
zoldaten Автор
02.09.2024 11:43с чего вы взяли, что не имеет отношения ? вот провод от драйвера (esc) на серву.
buldo
02.09.2024 11:43Этот провод идёт на приёмник. Питает его и серву. И сигнал с приёмника идёт по этому же проводу на esc
buldo
02.09.2024 11:43А, кажется я понял. На фото с подписью не ваша машина. Там видно ESC, приёмник и серву. На вашей машине мог быть ESC совмещённый с приёмником. Ну и bts7960 не смог бы управлять двигателям с того фото.
buldo
02.09.2024 11:43И главный вопрос. У вас получилось нормально ездить на ней? Такие машинки медленно не ездят. А у вас тормозная камера и тормозной энкодер, которые сами по себе дают задержку около 50мс...
zoldaten Автор
02.09.2024 11:43Нормально ездить получилось, но есть нюанс. Камера, не высокоскоростная, это факт. А что про энкодер вы имели в виду ?
buldo
02.09.2024 11:43Обычно в таких системах измеряется время glass to glass - от момента начала сканирования матрицы до вывода полного кадра или первого пикселя.
Выбранная вами камера медленно сканирует и отдаёт картинку. А HW видео энкодер во всех raspberry до жути медленно кодирует каждый кадр. То есть он успевает реалтаймово кодировать, но это слишком долго и вносит существенную задержку
vagon333
02.09.2024 11:43Интересуюсь для личных задач: хорошо бы иметь удаленное управление машинки типа Go-Getter, "пойди-принеси" на разные задачи.
Вопрос к размерам и ходовой: почему использовали маленький размер корпуса и ходовой? Ведь, если нужно полностью автономное управление, это ненадежная конструкция. Перевернулся и все.
Насчет автономности: были ли мысли добавить зарядное устройство для подзарядки батарей? Типа как на автономных пылесосах.
Насчет удаленного управления: использовать симку накладно.
А что если врезаться в ближайший Wi-Fi?
https://habr.com/ru/articles/814495/zoldaten Автор
02.09.2024 11:43Нет, конструкция не подразумевает полностью автономное управление.
Мысли добавить зарядное устройство были, но размер солнечной панели не устроил. Да и цели не те.
Про симку постараюсь во второй части не забыть.
За врезаться в ближайший wifi по ссылке в статье, если он к тому же чужой, можно получить а-та-та.
buldo
02.09.2024 11:43Вам надо связку ardurower + ros. Там и поддержка лидаров и всякого разного есть
Klochko
02.09.2024 11:43Сразу оговорюсь: я не настоящий механик.
Но позволю вставить свою 5 копеек. Как по мне, одноплатник (почти любой подходящий) стоит довольно дорого. И в то же время весьма тормознутые они. Я бы взял какой-то Android-смартфон. Здесь на борту уже и более менее вменяемая камера, модем и GPS. И стоимость такого на вторичном рынке близка к стоимости одноплатников, даже б/у. А по производительности и функциональности они существенно лучше.
Связь с машинкой можно организовать как по Bluetooth, так и по надежнее, используя USB-OTG.
Возможно я ошибаюсь, но в целом не сильно сложно захватить поток с камеры и выдать наружу по rtmp. Да хоть в Zoom или напрямую на YouTube/Rutube. Попутно по WebSocket туда/обратно гонять пакеты с координатами, управлением, скоростью, зарядом батареи и т.п
Для работы с USB я бы выбрал что-то типа STM32F103 (F401?), у этих камней и производительности за глаза и аппаратный USB с поддержкой Custom HID. Это чуть ли не единственный довольно простой способ обмена по USB в плане разработки ПО для камня и для Android.
Бонусом можно получить даже обе камеры (основную и фронтальную) и видеть, что происходит за машинкой. Мало ли кому в голову взбредет за ней погнаться или что-то сделать. Или те же животное часто не здоровый интерес проявляют к такого рода объектам.
Возможно смартфон можно и раздеть (по типу как делают т.н naked GoPro) и тогда все это дело будет к тому же компактным.
NetBUG
Поставлю плюс, но хочу порекламировать
немного селфдрайвинга https://github.com/fubarlabs/foocars
свой опыт изготовления масси с минимизацией покупных компонентов (только подшипники, болты и двигло) https://github.com/fablab77/printed-car-chassis/tree/v1
zoldaten Автор
Если не ошибаюсь, то видел ваш проект. Но там teensy, которую и раньше не просто было достать и tensorflow 1x версий.
Возможно, он (проект) уже шагнул дальше. А так - задел большой!
NetBUG
В опубликованном – да.
foocars я не мейнтейню, но сделать форк на TF2 / pytorch можно (и даже нужно).
С Teensy без проблем можно перейти на атмегу32 (опубликую, оно уже готово) или BluePill (с кодом чуть поаккуратнее нужно будет быть). К счастью, оно всё в Platformio давно, и никуда там не упирается в ресурсы
Задел кое-какой есть, но проект принципиально учебный (одна моделька между камерой и управляющими командами Speed/Turn). В реальном селфдрайвинге всегда архитектурный ад разводят, будь то ROS, TCS-AD или что-то менее публичное. Но оно позволяет ряд ситуаций отработать по жёсткой логике, а остальное – предсказуемо изолированно обучать.