Про FPV уже много на Хабре писали, но, дабы минимизировать количество бурления в комментариях, сразу давайте договоримся:
1. FPV - First Person View, вид от первого лица. Это может быть как управление летающим/ездящим/плавающим/прямоходящим аппаратом с одновременным наблюдением через установленную на нём камеру, так и независимые управление и наблюдение.
2. В случае полётов - они бывают "далеко и высоко" и "низко и близко". Само собой, есть много вариаций, но это основные параметры.
3. Полёты бывают быстрые (самолёты) и медленные (мультикоптеры). Опять же, и самолёт может медленно парить, а коптер вжарить по-полной, вариантов много.
Так вот, всё ниженаписанное относится, в первую очередь, для медленных, "низких и близких" вариантов. Но питаю надежду, что в ближайшем будущем можно будет и далеко и высоко.
Предыстория
Когда я первый раз надел очки FatShark, которые показывали картинку с аналогового видеопередатчика, то поразился насколько всё плохо. Углы обзора, разрешение, цена. Аналоговый видеосигнал - помехи, помехи и ещё раз помехи. Куча ухищрений для минимизации этих самых помех, а также для предотвращения наводок на канал управления. Само собой, многим такое положение дел не нравится и хочется улучшений. Хочется цифровой канал связи, цифровое видео, желательно один общий канал связи для видео и для управления, очки/шлем с HD разрешением...
На многих форумах, посвящённых моделированию, периодически поднимается данная тема, но обычно она встречает лютую ненависть со стороны бывалых моделистов, привыкших к старым добрым проверенным системам. С ними сложно спорить, так как резон в их критике есть. Но хотеть лучшего никто ж не запрещает.
Первая моя попытка получить большое разрешение видео с помощью аналоговых передатчиков была описана в этом топике. Схема получилась с минимальной задержкой сигнала, но громоздкая и прожорливая, так что дальше домашних испытаний дело не пошло.
Вторая попытка была сделана буквально на днях, о чём и пойдёт речь в данном топике.
Наверное, многие уже хоть краем уха слышали про наш микроконтроллер под названием Виртурилка. Она задумывалась только для работы с видео обычного разрешения, оптимального для шустрого управления через Интернет. Но когда мы, наконец-то, получили на ней HD видео (разрешение 1280x720 пикселей), сразу появилась шальная идея - а почему бы не попробовать её использовать как курсовую (ну или, хотя бы, обзорную) камеру в сфере локального применения безо всякого Интернета. Захотелось поставить её на самолёт или коптер и посмотреть что из этого выйдет.
Родной Wi-Fi модуль для такого применения не годится - он исключительно для бытового применения, а для приемлемой дальнобойности нужно что-то помощнее и с антенной посерьёзнее. Так что выход один - отдельный трансивер, подключаемый к какому-нибудь интерфейсу. Так как в качестве канала связи пока рассматриваем только Wi-Fi - получается что нужен компактный и лёгкий Wi-Fi роутер, который можно подключить к разъёму Ethernet.
С Ethernet у Виртурилки на данный момент дела обстоят так: родной контроллер неактивен, вместо него на плату добавлен чип ks8851, который сидит на шине SPI. Сделано это было для того чтобы при использовании Виртурилки по прямому назначению (бортовой мозг и видеокодер всяких подвижных штук) были доступны прерывания на пинах. Родной Ethernet, хоть и использует всего одно прерывание, делает недоступными остальные. Только по этой причине пришлось обойтись без него, но, на всякий случай, мы оставили возможность его подключения на "втором этаже". А чип ks8851 оказался слишком уж неторопливым , явно не пригодным для передачи видео.
Короче, наш аппаратчик Саша в срочном порядке делает второй этаж для родного ethernet, а мы пока выкручиваемся подручными средствами - используем обычные покупные USB-Ethernet переходники. Получается довольно громоздко, но для проверки технологии сгодится.
Получилась такая
схема подключения
"Бортовая" часть
К Виртурилке подключена наша обычная камера, работающая в HD-режиме
В Виртурилку втыкаем USB-OTG переходник, в него втыкаем USB-Ethernet переходник
К USB-Ethernet переходнику подключаем пользующийся популярностью роутер Ubiquity Picostation
Picostation запитана от бортового аккумулятора (питание PoE, по синей и коричневой парам), от него же запитана Виртурилка
Ubiquity Picostation настроен на подключение к "наземной части" - тарелке Ubiquity Nanobridge
"Наземная" часть
Ubiquity Nanobridge обычной витой парой подключёна к ноутбуку (питание тоже PoE, или от аккумулятора, или от PoE блока питания)
К ноутбуку подключены видеоочки
Роутеров у нас для тестов имеется два комплекта, на 2.4 и на 5.8 ГГц. Но пробуем пока только комплект который на 5.8 ГГц, так как он актуален на выставке, о которой чуть позже.
Монструозненько, но как только будет готова плата с родным ethernet для Виртурилки - на бортовой части сразу всё сильно упростится.
Здесь стоит немного отвлечься на ситуацию с очками. Понятное дело, фатшарки уже не подойдут, так как могут отображать только аналоговый видеосигнал. Первый вариант был - очки Headplay, тоже довольно распространённые среди фпвшников, так как могут отображать и аналоговый видеосигнал, и цифровой (есть VGA разъём для подключения к компьютеру). Но у Headplay другая проблема - разрешение всего 800х600. А как-то глупо принимать с борта видео в разрешении 1280x720, а смотреть на экранчиках с меньшим разрешением.
Поиск других вариантов особо не помог, либо экспериментальные модели, которые не найти в продаже, либо дорогущие монстры типа Sony HMZ-T3. Мы уже почти было согласились на Сони (там же ещё и" 3D" можно устроить, вообще супер), но знакомые моделисты подсказали координаты человека, который сам разрабатывает подобные очки. Ни я, ни коллеги раньше про самодельные очки даже не слыхали, так что очень заинтересовались.
Очки оказались вот такие. Внешне выглядят отлично, разрешение 1280х720, угол обзора заявлен около 90 градусов. Могут отображать аналоговый сигнал (разъём RCA, он же "тюльпан") и цифровой - через разъём HDMI. В общем, сказка, судя по описанию. Забегая вперёд, скажу что опробовал их в деле, не разочаровали.
Вот эти очки, но автор постоянно их дорабатывает, новая модель отличается внешне от той что на фото.
Можно сказать, что это две разные "школы" производства очков/шлемов - разница в оптике и прочих деталях. Радует то, что обе модели делаются нашими ребятами.
Домашние испытания
Как обычно, вышеописанная схема была опробована в домашних условиях. Про это я уже писал вот тут.
Гаражные испытания
Так как дома всё работало отличнейшим образом, было решено провести испытания на чем-нибудь реально летающем. Из-за совсем не летней погоды ехать в поле с самолётом как-то не очень хотелось, да и рановато было на самолёте тестировать, так что стали искать знакомых коптеристов. Спасибо ребятам из "Гаража №17" за то что поддержали и пригласили провести испытания на их территории, на их коптере.
Таким образом, первый полёт Виртурилки в качестве курсовой HD видеокамеры состоялся на хексакоптере с контролером NAZA.
Был приличный ветер, но NAZA держалась молодцом. Виртурилка тоже не подкачала. Далеко не улетали, так как всё-таки страшновато было, первый тест и всё такое. К сожалению, поздно пришла мысль что видеопоток надо было записать в том виде, в котором он принимался на ноутбук. Так что с тех испытаний имеется лишь видео, снятое на GoPro. Видео с борта с экрана записал, ужас, конечно, но хоть что-то.
Задержку оценить в тот раз не получилось, опять же, по дурацкой причине - у ребят в гараже были очки Headplay, но не было кабеля VGA. А я этот самый кабель забыл взять. А по картинке на экране ноутбука управлять нереально - засвечивает всё на улице, между гаражей места мало, страшновато. В общем, косяков набралось много, но радости тоже было немало - Виртурилка летала, передавая видео с борта на землю, ни одного дропа (потери пакета, рассыпания кадра). Задержку оценили на глаз - не хуже чем дома, т.е. где-то 180-250 мс. Хотя бы применение в качестве обзорной камеры уже реально. При спокойном управлении коптером (летать, смотреть в очках HD картинку с борта) - нормально. Для шустрого пилотажа, конечно, многовато.
Первый тест связки для HD FPV у гаражей
Полевые испытания
Вернувшись с гаражных испытаний стали думать как дальше испытывать. Хотя, чего тут думать, дальнобойность надо проверить. Так что в понедельник устроили испытание в реальном поле. Правда, испытание было без полёта. Наземная часть, тарелка, ноут и очки, стояли на месте, а "бортовую часть", скрученную изолентой для удобства, отвозили на машине на заранее измеренную дистанцию и смотрели что получится.
Доброволец Лёха, вызвавшийся помочь на испытаниях :-)
На этот раз весь видеопоток записывался одновременно с воспроизведением, так что есть "живое" видео. Проверили две дистанции, 700 метров и 2200 метров. На 700 метров была полноценная прямая видимость, видели куда тарелку направлять. А вот там где 2200 метров - нашу передвижную бортовую часть уже не было видно, мешался кустарник, так что наводили наугад, ориентируясь по светодиодной индикации уровня сигнала на тарелке.
Помимо "цифрового линка", передвижная бригада возила модель вертолёта, на котором стоял обычный аналоговый видеопередатчик. В итоге, когда его включали, цифровой линк сразу начинал дурить. Но дурил по разному, такое впечатление что была зависимость от взаимного расположения Picostation и аналогового передатчика. Вдобавок, оказалось что наша тарелка слишком уж узконаправленная, малейшее отклонение в сторону приводило к потере сигнала или резкому его ухудшению. На следующих испытаниях поменяем тарелку на "пулю" - Ubiquity Bullet M5 HP с мощной всенаправленной антенной, или на аналогичную, но 2.4 ГГц. Заодно и Picostation надо бы поменять на M2 HP.
Но пока что вышло - то вышло. Делаем скидку на то что сложно было постоянно тарелку наводить, тарелка стояла на земле (а лучше бы поднять повыше), кусты мешали. Мне до сих пор не верится что следующие видеоролики являются просто записанным потоком, а не сняты на обычную камеру :-) А так оно и есть, это был RTP H.264 поток, который GStreamer принимал, отображал на экране (а потом и в очках) и записывал в файл.
Проба связки для HD FPV в поле. Линк на 700 метров
Проба связки для HD FPV в поле. Линк на 2200 метров.
Небольшое подведение итогов на месте
Контрольная запись для измерения минимальной задержки
Тест задержки, поток 3 мегабита
Тест задержки, поток 6 мегабит
Варианты улучшения схемы
В общем, самым слабым звеном в получившейся схеме является Wi-Fi, но у него есть и плюсы. Плюсы в том что широко распространён, двусторонний (т.е. одновременно возможны и приём и передача), под одному и тому же соединению можно с борта на землю гнать и видео, и телеметрию, а с земли на борт - управление. Хотя бы управление подвесом камеры уже сейчас можно без проблем реализовать, чтобы та же Виртурилка крутила сервы подвеса.
Ещё плюс - можно попробовать разные роутеры, разные антенны. Ещё и бустеры есть, но это уже усложнение схемы начинается. Есть подозрения что при реальном полёте между наземной и бортовой частями меньше препятствий чем на земле, так что и дальность должна получше получиться. В общем, следующие испытания будут на хексакоптере и на самолёте типа Skywalker в поле. И больше никаких тарелок на земле.
Также надо добавить изменение битрейта видео в зависимости от уровня сигнала. Это легко реализуется на Виртурилке с помощью демона gstd.
OSD
Первым вопросом, который мне задали ребята из Гаража №17 был вопрос про OSD. Т.е. информация о различных параметрах состояния бортовой части. Вольтаж, крен, тангаж, удаление от базы, координаты, азимут и т.д. Обычно вся эта информация с помощью специальных девайсов накладывается на аналоговую видеокартинку и передаётся на землю видеопередатчиком. Соответственно, полученное видео нельзя очистить от этой информации. И информацию нельзя никак обработать, кроме как визуально.
С цифровым линком сразу появляется возможность гнать телеметрию в виде обычного потока данных, независимо от картинки. А на принимающей стороне уже обрабатывать её как угодно и, если есть необходимость видеть её в очках, накладывать поверх видео. Но не в самом видео, а именно рисовать верхним слоем на экране (монитора, телевизора, очков, как угодно). Или скармливать её готовым приложениям, наподобие MIssion Planner.
Я попробовал Виртурилкой определять напряжение бортового питания (через делитель напряжения, подключенный к ADC входу) и передавать полученную информацию по UDP на приложение, запущенное на ноутбуке, который видео принимает. Всё отлично передаётся и отображается, плюс всё это получается интерактивное (можно отключить вывод инфы, переключить канал ADC или ещё чего-нибудь сотворить). Небольшую демонстрашку с первой пробой эдакого OSD можно вот тут посмотреть.
Но тут появилась другая проблема. Чтобы передать на землю телеметрию, надо откуда-то получить данные. Можно, конечно, к Виртурилке подключить платку с гироскопами, акселерометрами, барометром, компасом, подключить GPS и т.д. и т.п. Но зачем, если, например, на коптере обычно уже есть эти датчики, надо "лишь" снять их показания с полётного контроллера. Вот тут я застопорился - я не знаю, есть ли такая возможность у распространённых коптерных мозгов. Если есть - тогда проблема решена.
3D Стерео
Аппетит приходит во время еды. После того как оказалось что передача HD видео с приемлемой для медленного полёта задержкой таки возможна, захотелось бОльшего. Как бы стерео-картинку получить?
Вариант "в лоб" - поставить на борт две Виртурилки, две камеры. Но поток гнать через один и тот же роутер (Picostation). Вот только нужно компактный пассивный хаб/свич найти. Или сделать самим, благо что чипов всяких для этого дела существует много.
Недостатки такого варианта очевидны (помимо двойного комплекта всего железа, кроме роутера) - вдвое больше поток. Это можно избежать, если совмещать картинки с двух Виртурилок на борту. Т.е. одна Виртурилка мастер, вторая - слейв. Мастер берёт поток со слейва, совмещает и передаёт на землю. Это даже не теория, такая связка уже реализовано конторой под названием RidgeRun. На базе вот этих элементов для GStreamer - https://github.com/RidgeRun/gst-plugin-usb https://github.com/michaelgruner/gst-plugin-anaglyph
Только вот у них картинки совмещаются в анаглиф, а хочется всё-таки полноценную пару независимых картинок для левого и правого глаза. Хотя тут уже вопрос появляется - как это всё смотреть...
Неаналоговые аналоги
Отбросив решения, которые малодоступны рядовому моделисту из-за дикого ценника, остаётся только один вариант. Совсем недавно анонсированный китайцами DJI Lightbridge. Насколько я понял, там не Wi-Fi а просто OFDM передатчик и приёмник, хотя могу ошибаться. Заявлена задержка < 80 ms, однако на видео, снятом одним из владельцев, видно что лаг 200-300 мс, т.е. не лучше чем я на Виртурилке получил.
Вот тот ролик с демонстрацией задержки DJI Lightbridge. См. на таймер.
Про лаг дисплея обсуждалось всё в той же ветке на рцдизайне. В любом случае, цена на этот лайтбридж в районе $1300. Сколько будет в России стоить - боюсь представить.
Заключение
Вот такое описание серии испытаний получилось. Конечно, многое ещё предстоит испытать на практике, но то что полетать на коптере или самолёте в очках с полноценным HD видео - уже радует. Уж меня - точно радует :-) А уж когда HDMI-вход доделаем (уже отдали в производство тестовые образцы), тогда и GoPro можно будет подключить в качестве полноценной курсовой камеры.
В общем, если кто-то из прочитавших сей опус хочет посмотреть имеющийся сейчас набор железа в действии - велком на Хобби-Экспо 2014. Мы будем там участвовать, как раз демонстрировать HD-видео с коптеров и с больших R/C-машинок. И очки, про которые в топике упоминал, у нас на стенде будут.
UPD: Это я ещё забыл про Йоту написать. Покрытие LTE всё лучше и лучше становится, надо бы попробовать в поле через Йоту (Мегафон, Билайн, МТС) видео прогнать.
UPD> Для сравнения габаритов - обычная зажигалка, виртурилка и голенькая Picostation M2 HP рядышком