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

Аналог микрогонки и гонки тарантасов. Оба этих проекта заглохли, по тем или иным причинам.

Начал я подбирать одноплатник, который бы наиболее подошел для данного проекта. Можно было бы использовать 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)


  1. tmg
    27.08.2016 21:56

    какую задержку видео при трансляции удалось достичь?


    1. DEM_dwg
      27.08.2016 21:59

      Около 0.2 если не меньше.
      Надо как то проверить, даже не знаю как.
      Дома по внутренней сетке меньше 0.1


      1. tmg
        27.08.2016 22:13
        +2

        0.2 сек? — 200мс
        измерить просто — снимаете RPi таймер с миллисекундами, бегущий на мониторе и на этот же компьютер стримите видео, выводите на этот же монитор видео-стрим.
        Делаете снимок экрана телефоном — разница в цифрах между таймером и таймером который показан на видео и есть задержка.
        Вот пример на youtube https://www.youtube.com/watch?v=0nqXGWzH2-s&ab_channel=AldoVargas


        1. DEM_dwg
          27.08.2016 22:23

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


          1. tmg
            27.08.2016 22:30

            если результат меньше 100мс — то конечно давайте


            1. rPman
              28.08.2016 23:02

              А есть ли технологии, способные дать меньше лаг? По крайней мере с ценами оборудования уровня малинка и относительно дешевая камера? Или вариант только FPGA модуль?


              1. tmg
                29.08.2016 01:00
                +1

                аналоговая FPV камера + трансмиттер \ ресивер на компе и с компа уже паковать и стримить

                про HD качество — это или дорого или рукастым надо быть, пробовать разное
                Тут чувак патчит ядро rpi — чтобы добиться 50-70 мс задержки через Wifi 720p https://befinitiv.wordpress.com/2015/09/10/latency-analysis-of-the-raspberry-camera/

                из готового, без танцев с бубном — купил, втыкнул разьемы — virt2real


  1. stDistarik
    27.08.2016 22:06

    Разрешение камеры у Вас указано какое-то странное — 640х240, так должно быть?

    И почему выбран мошион, он тяжёлый, может лучше mjpg-streamer?


    1. DEM_dwg
      27.08.2016 22:14

      Разрешение у камеры нормальное, это просто подбирал какое лучше разрешение, будет лучше выглядеть на экране. У меня уже и веб морда на Flask почти готова.
      mjpg-streamer запустить не удалось. Motion не так уж и много ресурсов кушает… Памяти вполне хватает и на Flask


      1. stDistarik
        27.08.2016 22:24

        mjpg-streamer запустить не удалось

        https://habrahabr.ru/post/208058/


        1. DEM_dwg
          27.08.2016 22:27

          Читал эту статью, но к сожалению не получилось.


  1. tmg
    27.08.2016 22:08

    не туда ответил


  1. imhoil
    27.08.2016 22:28
    +7

    Вот действительно? «по меньше», «не мало» и т.д.
    Неужели это новый уровень хабра?


    1. Imp5
      28.08.2016 00:14
      +8

      А по-моему, что-то в этом есть, полирует атмосферу декадентства, которое идёт через всю статью.
      Человек плохо знающий язык «C» и русский язык, загорается желанием сделать управление машинками через интернет, невзирая на то, что аналогичные проекты умерли. Заказав устройство, сталкивается сначала с обманом продавца, а затем его постигает глубокое разочарование при попытке подключить камеру. Продираясь через терни настройки видеопотока и GPIO, он готов уже обратиться к фрилансерам, но они заняты и отказывают ему в помощи. И в итоге, пройдя все испытания, автор замеряет задержку управления и получает 0.2 секунды, с которыми будет крайне сложно управлять машинкой.
      В завершении мы узнаём о сломанной игрушке его сына, которая послужила донором для проекта и не дала умереть надежде.


      1. Varkus
        28.08.2016 01:22

        Прям описалово к фильму «Машинка будет жить!»


      1. DEM_dwg
        28.08.2016 06:38

        1. На аналогичных проектах, задержка потока была не меньше, при 0,5 сек действительно будет сложно управлять.
        2. Машинку вчера купил, сыну и себе.


  1. x893
    28.08.2016 00:10

    Это новый уровень людей


  1. BurlakovSG
    28.08.2016 06:29

    На плате есть разъём для камеры — подойдёт камера от малины?
    Я давно хочу собрать машинку, которой можно управлять по сети. Купил колёса большие от бигфута (12 см в диаметре), малина давно первая лежит, камера к ней, корпус электрический распределительный, моторы, драйвер двигателей, корпус купольной камеры. Осталось купить Wi-Fi адаптер, только никак не найду такой, чтобы был без корпуса, с двумя антеннами, которые подключаются пиг-тейлами. Ещё надо купить аккумуляторы и плату защиты/балансировки.
    Правда частенько думаю, что может эту первую малину заменить на последнюю или эту из обзора, ведь у них уже есть Wi-Fi.


    1. DEM_dwg
      28.08.2016 06:41

      С камерой которая подключается по 24pin разъему, к сожалению пока не разобрался.
      Камеры 2 шт. купил, но поток не идёт.


  1. Konachan700
    28.08.2016 12:39

    Автор, как плата по нагреву? При кодировании видео не раскаляется, как тот же i.IMX6d/q? Без активного охлаждения можно использовать?
    А вот usb-камеры взяты зря — все кодирование видео с них будет софтовым, с соответствующей задержкой. Лучше разобраться с родными камерами, ибо с них можно получать поток куда более быстро в силу аппаратного кодирования (если, конечно, китайцы дают драйвер для линукса — если нет, ставить андроид, под который есть всё и стримить с него).


    1. DEM_dwg
      28.08.2016 12:50

      1. Плата не сильно грелась, была включена несколько суток, в режиме онлайн трансляции.
      2. Я взял уже радиатор
      3. Постараюсь разобраться в чем же дело, вполне возможно в motion какую то переменную следует исправить. Я пока менял только одну video0.

      Меня сейчас больше интересует сборка прототипа.


      1. Konachan700
        28.08.2016 12:58

        Почитал вики. Родная камера, скорее всего, на линуксах не заработает ввиду отсутствия драйверов для кодеков. На вики не сказано как ее в дебиане запустить, да и продают usb-камеры там же, на сайте — ой неспроста… Скорее всего, для запуска той камеры надо будет ставить андроид.


        1. DEM_dwg
          28.08.2016 13:00

          В вики есть пример работы с данной камерой.
          Там устанавливается Open CV и прогоняется тестовый пример. Я еще не пробовал этот пример запустить.


          1. Konachan700
            28.08.2016 13:03

            When the NanoPi M3 runs Debian users can use OpenCV APIs to access a USB Camera device

            Прямо не говорят, но по тексту понятно, что пример работает только с USB-камерами…


            1. DEM_dwg
              28.08.2016 13:05

              Возможно.
              Еще по ковыряю, но с камерой на 24 пина было бы тоже классно.
              Все таки она очень миниатюрная.


  1. Celtis
    28.08.2016 13:20

    Для работы с GPIO стоит попробовать WiringPi, если еще не пробовали. Работает и с несовсем_клонами, вроде большинства разновидностей бананов и апельсинов.
    Или эта библиотека тоже не заработала?


  1. DEM_dwg
    28.08.2016 15:03

    WiringPi
    Эта точно не заработала, пробовал её несколько раз.


    1. stDistarik
      28.08.2016 19:03

      В чём выражается — не заработало, wiringpi2 не установился или прога не робит, покажите какие-либо выхлопы.


      1. DEM_dwg
        28.08.2016 19:08

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


        1. stDistarik
          28.08.2016 19:35

          Если сопоставить это — «Платформа не поддерживается» и это — Samsung S5P4418, тогда всё становится на свои места ).

          На СИ видимо будет тот же результат. (имею ввиду библиотеку bcm2835)


  1. beeruser
    28.08.2016 19:10
    +2

    >> как я подумал тогда, является полным клоном Raspberry PI, только по размерам поменьше, ну и с WI-FI на борту.
    >> Как я и написал раньше, плата оказалась неполным клоном Raspberry Pi.

    А разве из описания не ясно, что она не то, что не является клоном, а вообще ничего общего не имеет с R-PI?
    Вас вообще не смутил тот факт, что используются совсем разные SoC — Broadcom 283x и Samsung S5P4418?


    1. DEM_dwg
      28.08.2016 19:39
      +1

      Тогда я ещё не очень хорошо в этом разбирался.
      Зы. Я даже рад, что пришлось разобраться с этим всем делом.


  1. dkv
    28.08.2016 21:07

    https://geektimes.ru/post/265186/ — ознакомьтесь


    1. DEM_dwg
      28.08.2016 22:00

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


      1. dkv
        28.08.2016 22:09

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


        1. DEM_dwg
          28.08.2016 22:18

          Обязательно на следующей неделе постараюсь написать.