wiki

OpenIPC Wiki

Оглавление

Использование OpenIPC как бюджетного видеолинка для FPV систем

Logo

Классический сетап в проекте OpenHD (и других похожих проектов) состоит из MIPI- или USB- камеры, подключенной к Raspberry Pi и Jetson Nano, которые выступают видеоэнкодером и роутером воздушной системы и в свою очередь соединены с WiFi адаптером по USB и с полетным контроллером по UART. Наземная станция обычно состоит из такого же WiFi адаптера, роутера и высококонтрастного монитора или очков.

Иногда MIPI- или USB- камера меняется на IP-камеру, которая и мощнее (имеет свой собственный аппаратный энкодер) и стоит дешевле при аналогичных характеристиках. Большинство современных видеокамер являются типовыми embedded устройствами с Linux на борту (но значительно скромнее в размерах RAM и флеш памяти по сравнению с Raspberry и Jetson), что позволяет перекомпилировать и запускать на них практически любое переносимое ПО.

В процессе работы с данной технологией возникла идея об упрощении полетной системы и переноса всего необходимого ПО непосредственно на IP-камеру. Технически FPV прошивка проекта OpenIPC представляет собой специальную сборку с двумя типами драйверов популярных WiFi адаптеров, стримера Majestic (который выполняет роль GStreamer в классической схеме на системе-передатчике) и WFB-ng. К сожалению, из-за значительного размера бинарного кода WiFi драйверов и зависимости в виде libstd++ (часть WFB-ng написана на C++), минимальные требования к системе на ряде плат увеличились до 16 мегабайт флеш памяти.

Преимущества

Недостатки

Ингредиенты

Опционально:

Установка на камеру

Logo

Logo

  setenv ipaddr 192.168.1.33; setenv serverip 192.168.1.17; saveenv
  run setnor16m
  #
  run uknor16m; run urnor16m

root@openipc-gk7205v200:~# free -m
              total        used        free      shared  buff/cache   available
Mem:             34          21           2           0           9           9
Swap:             0           0           0

Проверка работы наземной станции (на десктопе)

Траблшутинг

Tcpdump

Заливка образа на пустую флеш с помощью burn (если нет программатора)

Запускаем burn при выключенной плате:

./burn --chip gk7205v200 --type=ddr --file=u-boot-gk7205v200-universal.bin -d ; screen -L /dev/ttyUSB0 115200

включаем питание платы и ждем заливки U-Boot и появления командной строки. Далее выполяем следующие команды, где 192.168.0.8 - адрес TFTP сервера и 192.168.0.200 - временный адрес IP камеры.

setenv ipaddr 192.168.0.200
setenv serverip 192.168.0.8

sf probe 0; sf lock 0
mw.b 0x42000000 ff 1000000; tftpboot 0x42000000 u-boot-gk7205v200-universal.bin; sf probe 0
sf erase 0x0 0x50000; sf write 0x42000000 0x0 ${filesize}
reset

run setnor16m

setenv ipaddr 192.168.0.200
setenv serverip 192.168.0.8

run uknor16m ; run urnor16m

saveenv
reset

Дальнейшие доработки

Разработка платы-адаптера

Учитывая, что по тексту выше мы дорабатывали плату от обычной бюджетной камеры видеонаблюдения и монтаж USB коннектора производился без заводских разъемов, напрашивается вариант сделать дополнительную специальную плату (похожую на плату со встроенным WiFi адаптером), на которой будут выведены разъемы для USB (возможно с дополнительным хабом) и SD карты. Это позволит передавать видео в эфир с минимальной задержкой в 720p, одновременно записывая оригинал в 1080p для последующей публикации на YouTube). Если у вас есть возможность разработать такую плату и поделиться схемой с сообществом, мы будем очень признательны.

FAQ

Сколько потребляет камера во время своей работы?

Потребление зависит от того, включен ли сенсор (который сам по себе является одним из больших потребителей) и по нашим замерам составляет 1.7W в активном режиме и y 1.1W при выключенном сенсоре (но работающей основной системе). Отсюда можно сделать вывод, что при необходимости можно программно выключать/включать стример, чтобы еще больше уменьшить потребление системы, в те моменты когда это необходимо.

Дополнительно стоит рассмотреть:

Поддерживается ли WDR?

Для полноценной работы WDR на IP камерах как основной чип так и сенсор оба должны поддерживать одинаковый стандарт WDR (их существует несколько типов). При этом обычно сенсор начинает работать на двойной частоте (например, 60FPS вместо 30FPS), делая один кадр с длинной выдержкой, второй - с короткой. Далее ISP (Image Signal Processor) аппаратно производит склейку из двух кадров одного, взяв темные участки с кадра с длинной выдержкой и светлые - с короткой, формируя изображение с расширенным цветовым диапазоном. К сожалению, для получения WDR изображения вся система должна работать как минимум в два раза быстрее (или говоря по-другому иметь больше транзисторов, делая в два раза больше работы в момент времени), поэтому в процессоре Goke V200 этого режима нет. Если вам принципиальна поддержка WDR, рассмотрите возможность использования следующей в линейке процессоров V300, который также поддерживается проектом.

Можно ли вместо WiFi использовать LTE адаптер?

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

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

Можно. Фотография от подписчика:

Таблица распиновки вспомогательного разъема:

Какую дополнительную периферию еще можно подключить?

Исходя из распиновки нераспаянного FC разъема, показанного выше, видно, что он используется для дополнительных плат расширения с WiFi (по USB) и SD картой. Неиспользуемые пины можно переназначить следующим образом:

Функция Дополнительно
SD_CLK GPIO32
SD_CMD GPIO33
SD_DATA0 GPIO34
SD_DATA1 GPIO35
SD_DATA2 GPIO36
SD_DATA3 GPIO37
ALARM2_GPIO82  
KEY_SET  
BAT  
ALARM_OUT  

D/N (day/night) можно использовать только как входящий GPIO15 (из-за установленного транзистора). Слева от него на том же разъеме находится GND и GPIO16 (который можно использовать как GPIO в двухстороннем режиме или PWM порт).

На разъеме питание-сеть имеются два GPIO (ETH_STA - GPIO14, ETH_ACT - GPIO12), которые обычно используются для отображения активного физического подключения Ethernet и активности при передачи данных. Их также можно использовать для обычные двусторонние GPIO, причем GPIO12 возможно перевести в режим UART2_RXD и реализовать дополнительный одностронний UART порт (только на прием данных). На этой плате на данных контактах установлены резисторы 330Ом, но это не должно повлиять на работу UART.

Учитывая, что корпус SoC выполнен в формате QFN88, имеется возможность припаяться тонким проводом практически к любой ножке микросхемы и задействовать дополнительные порты. Распиновка чипа и фотография реальной платы без чипа представлены ниже:

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

Можно ли использовать другую IP камеру?

Если у вас есть скиллы продвинутого пользователя Linux, то вы можете присоединиться к нашему проекту и адаптировать FPV прошивку под любой процессор, поддерживаемый OpenIPC. В большинстве случаев навыки программирования не требуются (либо вы получите их естественным путем в процессе знакомства и изучения системы).

Как еще больше можно уменьшить задержку передачи видео?

Чтобы получить минимально возможную задержку, в нашей прошивке используется режим низкой задержки (low latency), который имеется в процессорах HiSilicon/Goke. При этом конкретные значения зависят от модели SoC, сенсора, его разрешения, текущая выдержка кадра и даже нагрев чипа в процессе работы. Основную лепту в задержку вносит FPS системы (60FPS без всякого тюнинга будет лучше 30FPS с максимально выкрученными настройками), поэтому если вам важна низкая задержка обратите внимание на более дорогое железо. Для получения еще меньшей задержки возможно отключения промежуточных блоков за счет ухудшения качества картинки либо перехода на более современные чипсеты.

У нашей команды есть большой опыт передачи медиаинформации с низкой задержкой (на ряде проектов были достигнуты цифры задержки в 45ms). Если вас интересуют коммерческие услуги (консалтинг, разработка аппаратного и программного обеспечения, реверс-инжиниринг) свяжитесь с нами.