Хирургия wifibroadcast и Шеф-Пилот 2
В последнее время много идет разговоров насчет HD-видеолинка на технологии wifibroadcast. У одних решение работает сразу, у других не заводится. Решили и мы подробнее посмотреть что это за зверь и доработать под наши задачи.
Начал я эксперименты с того, что взял в чистом виде прошивки автора. Кто не в курсе - автор выложил готовые образы карточек для бортовой и наземной частей решения, скачать можно вот тут:befinitiv.wordpress.com/2015...pv-image-v0-4/ Образ одинаковый для земли и неба. Та часть которая детектирует у себя камеру становится небом и стримит видео, а часть без камеры начинает его принимать.
Тесты пешком
Было решено опробовать два варианта вайфаек. Первый - tp-link WN722N, частота 2,4 ГГц. Второй - Alfa AWUS 051NH v2, с поддержкой 5 ГГц.
Итоги такие:
2,4 ГГц: WN722N на борту (антенна 5 дби вместо родной 2 дби), WN722N на земле (антенна 5 дби вместо родной 2 дби). До полного развала картинки удалось уйти на 350 метров.
5 ГГц: AWUS 051NH v2 на борту и на земле, родные двухдиапазонные антенны на 5 ДБи. До полного развала картинки – 950 метров.
Результаты обнадежили, поэтому решено было продолжить изыскания.
Влияние антенн на видео
У нас во всех конфигурациях были штыревые антенны с линейной поляризацией. А это значит, что при кренах борта у нас ухудшается прием, а при повороте на 90 градусов практически пропадает. Поэтому я провел несколько экспериментов с разными антеннами, чтобы посмотреть на физику процесса.
- Клевера
У меня был комплект клеверов на 5 ГГц, я прикрутил их к альфам. Самый главный вывод – при любых кренах картинка у меня не рассыпалась. Расплатой за такую стабильность является слабый коэффициент усиления клеверов (для моего комплекта он что-то в районе 1,5-2 дби). Дальность я в этом случае не измерял, так как важно было посмотреть на поведение при кренах.
- Встроенные антенны на платах USB свистков
Также мне было интересно, как поведут себя свистки со встроенными PCB антеннами на плате. Для тестов я взял две свистульки tplink N600 WN3200. Очень забавно, но встроенная скрюченная антенка на плате вела себя примерно как клевер – было абсолютно наплевать, как ориентированы друг относительно друга земля и борт. Чуть позже я из интереса попробовал такую дохленькую связку в воздухе – улететь удалось примерно метров на 70. А ожидал я метров 30. Соответственно если поставить на земле патчик, можно будет выжать сотню-две метров для «низко и близко».
- Короткие штыри 2 дБи
Ну и последний эксперимент – я посмотрел на влияние углов при коротких штыревых антеннах (2 дБи), которые идут в комплекте к WN722N. Они не так бурно реагируют на угол наклона, но при сильных кренах имеется развал картинки.
Вывод нарисовался следующий. Если нужна стабильность при любых кренах борта, и летать нужно недалеко – то на борту должен быть либо клевер, либо короткий штырь. Для тех, кому надо далеко – это штырь 5 дБи. Вариант с 8 дБи подходит для совсем уж редких случаев, когда вы жестко ограничиваете крен борта – узковата у него вертикальная диаграмма направленности.
Real Hardware Divercity
Одним из бонусов технологии wifibroadcast является возможность одновременного приема сигнала несколькими модулями вайфай. Далее софт выцепляет небитые пакеты данных с обеих источников, что существенно снижает «рассыпания» на видео. Так что первый бонус очевиден – мы имеем более стабильную картинку. При этом можно расположить антенны обоих свистков, например, под 90 градусов друг к другу, и при этом снизить потери при сильных кренах борта. Одна из антенн будет ловить всегда чуть лучше.
Второй бонус – нам он был более интересен – решает следующую проблему. Если мы хотим лететь далеко – антенна на земле у нас узконаправленная. И если мы стартуем с самолетом – он начинает делать круги у нас над головой, и совсем не попадает в «лучик». Аналогично с коптером – поднялись ровно вверх на 50 метров, и связь завалилась. Поэтому хотелось бы иметь одну антенну с малой чувствительностью, но возможностью принимать сигнал с любых сторон. Вот тут-то мы получаем то, о чем так долго говорили большевики. На один свисток ставим направленный патч на 15 дБи, на второй – короткий штырь для близких дистанций, или маленький 7дБи патчик от Альфы. Итог – и вблизи связь хороша (с какой бы мы стороны не летали), и на дальность все отлично работает.
Вот как это выглядело на одном из полетов:
Дальность, или про дБм и дБи…
Много интернетной крови было пролито в баталиях по поводу того, какой свисток лучше качает и какие антенны использовать.
Вообще автор у себя в блоге пишет (…wordpress.com/…/relieable-3km-hd-fpv-solution/), что ему удалось улететь на 3,5 Км. При этом на борту была альфа AWUS36NHA, на земле 722 свисток. Фотка его биквад-антенны имеется в блоге. Вывод прост – если получить стабильную картинку по софтовой части, то подбором антенн и свистков можно добиться хорошей дальности. Поэтому эта часть была нами отложена «на сладкое», и мы решили сначала сделать адекватный софт.
Телеметрия MAVLINK и OSD
В первую очередь нам хотелось получить нормальный OSD со всей телеметрией. Поэтому мы портировали мавлинковский ОСД с нашего решения на виртурилке. Телеметрия у нас забирается с АПМ по UART, заботливо пакуется и шлется на землю. Наземная часть ее распаковывает и рисует поверх видео.
Надо сказать, что рисование ОСД оказалось довольно прожорливой процедурой. И если для упаковки и стрима видео на борту достаточно первой малины, то на земле должна стоять минимум вторая Raspberry. В этом случае все данные телеметрии успевают прорисовываться с той частотой, с которой приходят. То-есть если сейчас к наземной малине прицепить HDMI экран или очки, то мы имеем красивое видео с не менее красивой телеметрией.
ОСД накладывается на земле в отдельном слое поверх видео, и не пишется в видеофайл. Выглядит примерно вот так:
- Отдельный канал
В оригинальном решении автор использует один и тот-же канал для передачи видео и телеметрии. И если «что-то идет не так», то пропадает всё. Причем в его случае телеметрия (он забирает ее с Naze32) отправляется пакетами по 1400 байт, даже если полезной информации там всего 10 байт. Мы написали свое решение, которое реализует быстрый и экономный по трафику канал передачи телеметрии. На последних тестах решение себя оправдало – при вылете за границу нормального линка (сигнал на приеме -80 дБм или ниже) видео умирает совсем, а телеметрия продолжает исправно идти – можно лететь «по приборам».
- Титры
Для синхронной записи видео и титров был опробован новых подход – мы постарались записывать ключевую телеметрию в стандартный файл титров. Но всплыла проблема: даже при хорошем линке некоторые кадры из видео выпадают. А телеметрия идет стабильно. В итоге к концу 10-минутного полета появляется рассинхрон между видео и титрами – титры начинают серьезно отставать. Эту фичу пока оставили в качестве экспериментальной
- Телеметрийная строчка, вшитая в видео
Для простоты дальнейшего анализа полетов все-таки не хватало телеметрии, которая «наглухо» вшита в видеофайл. Поэтому было решено в текстовую строчку выписывать ключевые даные – высота, координаты GPS, расстояние до дома и некоторые другие. Типовая реализация такого сшивания оказалась очень тормозной, поэтому Gol пересобрал raspivid, добавив туда нужные нам хотелки.
Двусторонний wifibroadcast
Получение данных с борта это хорошо, но еще лучше когда линк двусторонний. Собственно, сейчас у нас полноценный двусторонний wifibroadcast. Если наземную часть подключить по сети к ноутбуку, то из MissionPlanner или QGroundControl можно установить полноценный линк с APM/Pixhawk на борту. Помимо контроля и управления, это дает возможность записать наземные логи полета.
Малиновое диетическое питание, и вообще о лишних габаритах
Помимо софтовых и железных вопросов, пришлось столкнуться и со спецификой питания для Raspberry. Если вы уже имели дело с малиной, то иногда могли замечать, что в правом верхнем углу экрана иногда появляется и плавно гаснет квадратик, раскрашенный яркими цветами. Появляется он и в консоли, и при работе с GUI. Эта веселая картинка несет грустную весть – малинке не хватает питания. Соответственно, и все USB устройства она кормит очень диетически.
Если копать вопрос дальше, то выясняется, что по умолчанию питание USB устройств на малине лимитировано по току. Чтобы снять эти лимиты, нужно в файлике /boot/config.txt прописать max_usb_current=1. Но не торопитесь это делать. Да, юсб девайсы станут чувствовать себя чуть лучше, но недокормленная малина тупо начнет у вас ребутиться.
На вопросы «а нафига так?» малиновые инженеры на форуме отвечают просто и лаконично: на рынке огромное количество говнозарядников из китая, которые не дают заявленного ампера. Юзеры питают ими малину, она заваливается, и к ним (инженерам) приходит много жалоб на ребуты. Поэтому они решили подстраховаться, и в первую очередь питание себе забирает малина, а на ЮСБ всё идет по остаточному принципу.
Да, все эти выкрутасы важны, если на борт ставится вайфайка 500 мВт или 1 Вт, не говоря уже про двухваттные альфы. Всеми любимый WN722N очень скромный (100 мВт), и ему всегда хватает на жизнь.
Собственно, мы решили вопрос питания, а заодно и вопрос лишней толщины брутально. Мы удаляем с платы разъемы USB, Ethernet и боковые пины GPIO. И пробрасываем питание на USB устройства напрямую, а не через малину.
Сводки с фронтов
Я хотел сказать отдельное спасибо yurik999 и Skydiver за помощь в полетных тестах. Они терпеливо выслушивали наши хотелки и предоставили свои коптеры для испытания оборудования.
Сейчас наше решение Шеф-Пилот 2 переходит в статус бета-версии.
Текущая инженерная версия выглядит как небольшой моноблок, имеет на борту альфу 1 Ватт на 2,4 ГГц, и в собранном виде выглядит примерно вот так. Для сравнения рядом APM от Алексея Козина:
На этом экземпляре в последний раз удалось улететь на 2 км (видео в начале статьи). По итогам полета сейчас вносится много изменений по софтовой части.
Если с софтом не возникнет неожиданных проблем, то ранние версии устройства будут готовы уже на следующей неделе.
Вообще решение с wifibroadcast оказалось интересным, и в планах есть приличное количество разных “фишечек”.
Обновлено 16 июля
Решение принимает вид, близкий к окончательному:
И рядом с обычной третьей малинкой: