Аналог микрогонки и гонки тарантасов. Оба этих проекта заглохли, по тем или иным причинам.
Начал я подбирать одноплатник, который бы наиболее подошел для данного проекта. Можно было бы использовать virt2real или Raspberry PI, ну или на крайний случай tp-link tl-mr3020 c CyberWRT на борту.
Но мне на глаза попалась плата NanoPi2, которая, как я подумал тогда, является полным клоном Raspberry PI, только по размерам поменьше, ну и с WI-FI на борту.
Заказал я плату в количестве 2-х штук и стал ожидать, когда же они придут, продавец оказался из Благовещенска не очень порядочный и сперва говорил мне одно, потом другое, обещал различные плюшки в виде подарков.
Но худо-бедно через 1,5 месяца платы пришли ко мне. Хочу отдать должное китайцам, когда я заказывал у них дополнительно камеры к данной плате, они пришли за 1,5 недели.
Собственно, когда пришли платы, я начал устанавливать модули для своего проекта.
Первое глубокое разочарование меня постигло, когда я не смог подключить камеру Logitech c270. Я пробовал различные программы под Debian, который у меня установлен в качестве операционной системы. В конце концов, я добился трансляции видеопотока в сетку, оказалось что в программе Motion изменился конфигурационный файл, и те переменные которые надо было изменять назывались уже по другому. Рабочий конфигурационный файл для Motion выкладываю тут
Установка motion проста до безобразия.
-----------
Обновляемся
-----------
# apt-get update
# apt-get upgrade
-----------
Устанавливаем Motion
-----------
# apt-get install motion
-----------
Проверяем, подключена ли камера (рекомендую самую простую Logitech c270).
-----------
#lsusb
-----------
Консоль выдает нам что-то типа этого.
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Где 2-я строка показывает нам, что камера подключена к нашему компьютеру.
Дальше нам следует исправить конфигурационный файл.
Проходим в папку /etc/motion и заменяем файл motion.conf (тем, который я выложил выше по ссылке). Для этого я использую WinSCP.
Ну а дальше началось самое интересное, нужно было как-то управлять выходами GPIO. Как я и написал раньше, плата оказалась неполным клоном Raspberry Pi. Так что все библиотеки для работы с GPIO, от малинки оказались за бортом.
Я нашел 2 библиотеки matrix-python и matrix. Но к сожалению обе библиотеки мне не очень подошли.
В первой был функционал для работы с GPIO, но не было функционала работы с PWM для подключения сервопривода. Вторая же вовсе оказалась на Си, а я с сями не очень дружу.
В общем начал разбираться с ctypes, сразу скажу копий было переломано немало, подключится к библиотеке получилось, но вызовы функций, возвращали различные ошибки типа контакт не может быть использован. Я даже начал искать фрилансера, который бы мне помог сделать обертку для библиотеки matrix, пару человек нашел но они были заняты и у меня ни как не было времени конкретно переговорить с человеком по скайпу. И тут меня осенило, надо полностью повторить код, который приводился в качестве примера на С.
Первая же попытка даже без одной из функций увенчалась успехом, ну не думал я, что функция boardInit() фактически инициализирует библиотеку. И вот чего из этого получилось.
Программа работы с PWM на Python.
import os
import time
from ctypes import *
lib = cdll.LoadLibrary('/root/matrix-master/lib/libfahw.so')
lib.boardInit()
os.system("modprobe matrix_pwm")
lib.PWMPlay(0, 1000, 1)
time.sleep(5)
i = 1
while i < 1000:
print(i)
i = i + 10
time.sleep(1)
lib.PWMPlay(0, 1000, i)
lib.PWMStop(0)
Программа работы с GPIO на Python.
import os
import time
from ctypes import *
lib = cdll.LoadLibrary('/root/matrix-master/lib/libfahw.so')
lib.boardInit()
os.system("modprobe matrix_gpio_int")
lib.exportGPIOPin(22)
lib.setGPIODirection(22, 2)
lib.setGPIOValue(22, 1)
time.sleep(5)
lib.setGPIOValue(22, 0)
lib.unexportGPIOPin(22)
print 222
Соответственно, чтобы начать работать с библиотекой, надо её скачать с сайта и инсталлировать.
На данный момент уже развернул сервер на Flask, на NanoPi2 и уже приступаю к подключению сервопривода и двигателя сломанной машинки сына.
Комментарии (36)
stDistarik
27.08.2016 22:06Разрешение камеры у Вас указано какое-то странное — 640х240, так должно быть?
И почему выбран мошион, он тяжёлый, может лучше mjpg-streamer?DEM_dwg
27.08.2016 22:14Разрешение у камеры нормальное, это просто подбирал какое лучше разрешение, будет лучше выглядеть на экране. У меня уже и веб морда на Flask почти готова.
mjpg-streamer запустить не удалось. Motion не так уж и много ресурсов кушает… Памяти вполне хватает и на Flask
imhoil
27.08.2016 22:28+7Вот действительно? «по меньше», «не мало» и т.д.
Неужели это новый уровень хабра?Imp5
28.08.2016 00:14+8А по-моему, что-то в этом есть, полирует атмосферу декадентства, которое идёт через всю статью.
Человек плохо знающий язык «C» и русский язык, загорается желанием сделать управление машинками через интернет, невзирая на то, что аналогичные проекты умерли. Заказав устройство, сталкивается сначала с обманом продавца, а затем его постигает глубокое разочарование при попытке подключить камеру. Продираясь через терни настройки видеопотока и GPIO, он готов уже обратиться к фрилансерам, но они заняты и отказывают ему в помощи. И в итоге, пройдя все испытания, автор замеряет задержку управления и получает 0.2 секунды, с которыми будет крайне сложно управлять машинкой.
В завершении мы узнаём о сломанной игрушке его сына, которая послужила донором для проекта и не дала умереть надежде.DEM_dwg
28.08.2016 06:381. На аналогичных проектах, задержка потока была не меньше, при 0,5 сек действительно будет сложно управлять.
2. Машинку вчера купил, сыну и себе.
BurlakovSG
28.08.2016 06:29На плате есть разъём для камеры — подойдёт камера от малины?
Я давно хочу собрать машинку, которой можно управлять по сети. Купил колёса большие от бигфута (12 см в диаметре), малина давно первая лежит, камера к ней, корпус электрический распределительный, моторы, драйвер двигателей, корпус купольной камеры. Осталось купить Wi-Fi адаптер, только никак не найду такой, чтобы был без корпуса, с двумя антеннами, которые подключаются пиг-тейлами. Ещё надо купить аккумуляторы и плату защиты/балансировки.
Правда частенько думаю, что может эту первую малину заменить на последнюю или эту из обзора, ведь у них уже есть Wi-Fi.DEM_dwg
28.08.2016 06:41С камерой которая подключается по 24pin разъему, к сожалению пока не разобрался.
Камеры 2 шт. купил, но поток не идёт.
Konachan700
28.08.2016 12:39Автор, как плата по нагреву? При кодировании видео не раскаляется, как тот же i.IMX6d/q? Без активного охлаждения можно использовать?
А вот usb-камеры взяты зря — все кодирование видео с них будет софтовым, с соответствующей задержкой. Лучше разобраться с родными камерами, ибо с них можно получать поток куда более быстро в силу аппаратного кодирования (если, конечно, китайцы дают драйвер для линукса — если нет, ставить андроид, под который есть всё и стримить с него).DEM_dwg
28.08.2016 12:501. Плата не сильно грелась, была включена несколько суток, в режиме онлайн трансляции.
2. Я взял уже радиатор
3. Постараюсь разобраться в чем же дело, вполне возможно в motion какую то переменную следует исправить. Я пока менял только одну video0.
Меня сейчас больше интересует сборка прототипа.Konachan700
28.08.2016 12:58Почитал вики. Родная камера, скорее всего, на линуксах не заработает ввиду отсутствия драйверов для кодеков. На вики не сказано как ее в дебиане запустить, да и продают usb-камеры там же, на сайте — ой неспроста… Скорее всего, для запуска той камеры надо будет ставить андроид.
DEM_dwg
28.08.2016 13:00В вики есть пример работы с данной камерой.
Там устанавливается Open CV и прогоняется тестовый пример. Я еще не пробовал этот пример запустить.Konachan700
28.08.2016 13:03When the NanoPi M3 runs Debian users can use OpenCV APIs to access a USB Camera device
Прямо не говорят, но по тексту понятно, что пример работает только с USB-камерами…DEM_dwg
28.08.2016 13:05Возможно.
Еще по ковыряю, но с камерой на 24 пина было бы тоже классно.
Все таки она очень миниатюрная.
Celtis
28.08.2016 13:20Для работы с GPIO стоит попробовать WiringPi, если еще не пробовали. Работает и с несовсем_клонами, вроде большинства разновидностей бананов и апельсинов.
Или эта библиотека тоже не заработала?
DEM_dwg
28.08.2016 15:03WiringPi
Эта точно не заработала, пробовал её несколько раз.stDistarik
28.08.2016 19:03В чём выражается — не заработало, wiringpi2 не установился или прога не робит, покажите какие-либо выхлопы.
DEM_dwg
28.08.2016 19:08Я четко прям так не помню какие сообщения в консоли были.
Что то вроде Платформа не поддерживается, на английском.
Могу попробовать еще раз.
По просьбе юзеров, сперва подготовлю статью по стриму.stDistarik
28.08.2016 19:35Если сопоставить это — «Платформа не поддерживается» и это — Samsung S5P4418, тогда всё становится на свои места ).
На СИ видимо будет тот же результат. (имею ввиду библиотеку bcm2835)
beeruser
28.08.2016 19:10+2>> как я подумал тогда, является полным клоном Raspberry PI, только по размерам поменьше, ну и с WI-FI на борту.
>> Как я и написал раньше, плата оказалась неполным клоном Raspberry Pi.
А разве из описания не ясно, что она не то, что не является клоном, а вообще ничего общего не имеет с R-PI?
Вас вообще не смутил тот факт, что используются совсем разные SoC — Broadcom 283x и Samsung S5P4418?DEM_dwg
28.08.2016 19:39+1Тогда я ещё не очень хорошо в этом разбирался.
Зы. Я даже рад, что пришлось разобраться с этим всем делом.
dkv
28.08.2016 21:07https://geektimes.ru/post/265186/ — ознакомьтесь
DEM_dwg
28.08.2016 22:00Хммм. Вы знаете результаты в данной статье хуже чем у меня.
Постараюсь во вторник сделать тесты, по внутренней сетке и через мобильный интернет.
По крайней мере светодиод, загарается практически мгновенно, когда я его включаю через интернет по yote.dkv
28.08.2016 22:09К сожалению, по вашей статье сложно понять, какие в итоге результаты были достигнуты. Способ оценить задержку выше уже описали. Напишите вторую часть статьи с полным описанием того, что в итоге вышло, как управляется, какие задержки при передаче видео и через какие девайсы это видео просматривается.
tmg
какую задержку видео при трансляции удалось достичь?
DEM_dwg
Около 0.2 если не меньше.
Надо как то проверить, даже не знаю как.
Дома по внутренней сетке меньше 0.1
tmg
0.2 сек? — 200мс
измерить просто — снимаете RPi таймер с миллисекундами, бегущий на мониторе и на этот же компьютер стримите видео, выводите на этот же монитор видео-стрим.
Делаете снимок экрана телефоном — разница в цифрах между таймером и таймером который показан на видео и есть задержка.
Вот пример на youtube https://www.youtube.com/watch?v=0nqXGWzH2-s&ab_channel=AldoVargas
DEM_dwg
На днях попробую и выложу результат.
Могу и более развернутую статью по motion сделать.
Там с фреймом тоже надо по играть, чтобы получить оптимальную скорость потока.
tmg
если результат меньше 100мс — то конечно давайте
rPman
А есть ли технологии, способные дать меньше лаг? По крайней мере с ценами оборудования уровня малинка и относительно дешевая камера? Или вариант только FPGA модуль?
tmg
аналоговая FPV камера + трансмиттер \ ресивер на компе и с компа уже паковать и стримить
про HD качество — это или дорого или рукастым надо быть, пробовать разное
Тут чувак патчит ядро rpi — чтобы добиться 50-70 мс задержки через Wifi 720p https://befinitiv.wordpress.com/2015/09/10/latency-analysis-of-the-raspberry-camera/
из готового, без танцев с бубном — купил, втыкнул разьемы — virt2real