Update history

pull/63/head
Dmitry Ilyin 2022-12-13 18:48:32 +03:00 committed by GitHub
parent 581afa9dbf
commit 1763e2ddfa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 2 deletions

View File

@ -8,17 +8,33 @@
<img src="https://github.com/OpenIPC/wiki/blob/master/images/fpv-logo.jpg?raw=true" alt="Logo"/> <img src="https://github.com/OpenIPC/wiki/blob/master/images/fpv-logo.jpg?raw=true" alt="Logo"/>
</p> </p>
Создание доступного радио-линка для передачи видео между радиоуправляемой моделью и оператором всегда занимало умы изобретателей. В 2015 году немецкий энтузиаст Befi [выдвинул идею OpenSource дрона](https://befinitiv.wordpress.com/wifibroadcast-analog-like-transmission-of-live-video-data/), где предложил использовать обычные WiFi адаптеры, число которых во всем мире уже достигло несколько миллиардов штук, а цена снизилась насколько, что они стали самыми доступными видами цифровых приемо-передатчиков.
Ключевой идей были не сами WiFi адаптеры, а нетрадиционный метод их использования: отказ от установки сетевого соединения и перевод в широковещательный режим, когда один адаптер выполняет функцию передатчика цифрового сигнала, в второй - является приемником.
Было предложено взять бюджетный SBC Raspberry Pi, подключить к нему камеру по MIPI интерфейсу и USB WiFi донгл с числа рекомендуемых, а с другой стороны на приемнике - аналогичный WiFi модуль с HDMI монитором. При этом вместо традиционного для передачи видео с низкой задержкой протокола UDP был использован протокол более низкого уровня для гибкого управления данными: управлением шириной полосы, мощностью передатчика и возможностью восстановления данных, если пакет при отправке был [частично поврежден](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D1%8F%D0%BC%D0%B0%D1%8F_%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA). Одной из технических проблем являтся то, что не каждый WiFi адаптер способен работать в таком низкоуровневом режиме, более того: практически всегда приходится устанавливать специальные драйверы, которые существуют только под Linux.
Приемник в этом режиме работает в так называемом `monitor mode`, когда он принимает и передает операционной системе каждый пакет заданного WiFi канала, где затем решается что с ним делать дальше: декодировать или отбросить. WiFi адаптер передатчика должен работать в `injection mode`, когда ядро операционной системы фактически не участвует в формировании сетевых пакетов, предписанной сетевой моделью ISO. Часть адаптеров поддерживает оба режима, некоторые из них - только какой-то один, поэтому могут стоять только на стороне передатчика или приемника.
<p align="center">
<img src="https://befinitiv.files.wordpress.com/2015/04/dscf11161.jpg" alt="Первый в истории дрон под управлением Wifibroadcast" />
</p>
Проект был назван [Wifibroadcast](https://github.com/befinitiv/wifibroadcast), его идеи получили дальнейшее развитие в проекте [EZ-WifiBroadcast](https://github.com/rodizio1/EZ-WifiBroadcast), после чего новая команда разработчиков переписала исходный код с нуля в самом популярном на сегодняшний день проекте [OpenHD](https://github.com/OpenHD/OpenHD). Кроме того в процессе эволюции появились независимые проекты [WFB-ng](https://github.com/svpcom/wfb-ng) и [Ruby](https://rubyfpv.com/) (последний с закрытым исходным кодом).
## Революция от OpenIPC
Классический сетап в проекте [OpenHD](https://openhdfpv.org/) (и других похожих проектов) состоит из MIPI- или USB- камеры, подключенной к Raspberry Pi и Jetson Nano, которые выступают видеоэнкодером и роутером воздушной системы и в свою очередь соединены с WiFi адаптером по USB и с полетным контроллером по UART. Наземная станция обычно состоит из такого же WiFi адаптера, роутера и высококонтрастного монитора или очков. Классический сетап в проекте [OpenHD](https://openhdfpv.org/) (и других похожих проектов) состоит из MIPI- или USB- камеры, подключенной к Raspberry Pi и Jetson Nano, которые выступают видеоэнкодером и роутером воздушной системы и в свою очередь соединены с WiFi адаптером по USB и с полетным контроллером по UART. Наземная станция обычно состоит из такого же WiFi адаптера, роутера и высококонтрастного монитора или очков.
Иногда MIPI- или USB- камера меняется на IP-камеру, которая и мощнее (имеет свой собственный аппаратный энкодер) и стоит дешевле при аналогичных характеристиках. Большинство современных видеокамер являются типовыми embedded устройствами с Linux на борту (но значительно скромнее в размерах RAM и флеш памяти по сравнению с Raspberry и Jetson), что позволяет перекомпилировать и запускать на них практически любое переносимое ПО. Иногда MIPI- или USB- камера меняется на IP-камеру, которая и мощнее (имеет свой собственный аппаратный энкодер) и стоит дешевле при аналогичных характеристиках. Большинство современных видеокамер являются типовыми embedded устройствами с Linux на борту (но значительно скромнее в размерах RAM и флеш памяти по сравнению с Raspberry и Jetson), что позволяет перекомпилировать и запускать на них практически любое переносимое ПО.
В процессе работы с данной технологией возникла идея об упрощении полетной системы и переноса всего необходимого ПО непосредственно на IP-камеру. Технически FPV прошивка проекта OpenIPC представляет собой специальную сборку с двумя типами драйверов популярных WiFi адаптеров, стримера Majestic (который выполняет роль GStreamer в классической схеме на системе-передатчике) и [WFB-ng](https://github.com/svpcom/wifibroadcast). К сожалению, из-за значительного размера бинарного кода WiFi драйверов и зависимости в виде libstd++ (часть WFB-ng написана на C++), минимальные требования к системе на ряде плат увеличились до 16 мегабайт флеш памяти. В процессе работы с данной технологией возникла идея об упрощении полетной системы и переноса всего необходимого ПО непосредственно на IP-камеру. Технически FPV прошивка проекта OpenIPC представляет собой специальную сборку с двумя типами драйверов популярных WiFi адаптеров, стримера Majestic (который выполняет роль GStreamer в классической схеме на системе-передатчике) и [WFB-ng](https://github.com/svpcom/wifibroadcast).
### Преимущества ### Преимущества
* Снижается стоимость системы (IP камера с поддержкой H.265 против аналога на Jetson Nano с MIPI камерой) * Снижается стоимость системы (IP камера с поддержкой H.265 против аналога на Jetson Nano с MIPI камерой)
* Снижается общее потребление и увеличивается надежность системы за счет упрощения схемы * Снижается общее потребление и увеличивается надежность системы за счет упрощения схемы
* Снижается задержка передачи видео: на наших Glass-to-Glass тестах мы получали для 1080p@60 задержку около 80ms (на среднебюджетных камерах), и для 720p@30 около 130 ms и 1080p@30 около 150 ms (для самых бюджетных камер) * Снижается задержка передачи видео: на наших Glass-to-Glass тестах мы получали для 1080p@60 задержку около 80ms (на среднебюджетных камерах), и для 720p@60 около 60 ms и 1080p@30 около 100 ms (для самых бюджетных камер)
* Появляется возможность тюнинга аппаратного энкодера, например более частого формирования I кадра (специфика сильно зависит от вендора IP камеры) * Появляется возможность тюнинга аппаратного энкодера, например более частого формирования I кадра (специфика сильно зависит от вендора IP камеры)
* Сообществом накоплен огромный опыт [ремонта IP камер](https://t.me/ExIPCam), что позволяет еще более удешевить стоимость эксплуатации системы * Сообществом накоплен огромный опыт [ремонта IP камер](https://t.me/ExIPCam), что позволяет еще более удешевить стоимость эксплуатации системы