Видеопередача «Лазаря»: как кадры доходит до оператора
Продолжаем разбирать тяжёлый борт Лазарь, который попал к нам на восстановление. До этого мы запустили полётный контроллер, моторы, восстановили компас и gps. Осталась самая запутанная часть - видео. Как камера связана с бортовым компьютером, чем кадр обрабатывается в полёте и каким образом он вообще оказывается перед глазами оператора за сотни километров?
На борту машины стоит обычная дешёвая USB-камера в печатном корпусе и на подвесе Tarot. Подключена она к бортовому компьютеру Raspberry Pi 5 USB-проводом, разрешение потока всего 720 на 480 точек. Камера отдаёт поток в Pi 5, и на борту его встречает питоновский скрипт поверх GStreamer. Внутри конвейера кадр проходит три стадии. Сначала его разворачивают на 180 градусов. Потом впечатывают прямо в картинку OSD прицел и телеметрию, и готовую картинку разделяют на два пути.
Первый путь кодирует кадр кодеком VP8 и отдаёт в WebRTC. Оттуда поток уходит через локальный веб-сервер в браузер наземного оператора. На этом борте стоит Starlink, и вся связь с землёй идёт через спутниковый канал внутрь приватной VPN-сети, где прописаны все борта флота и наземные компьютеры. Оператор сидит в той же сети в любой точке планеты, открывает страницу борта и получает видео.
Второй путь кодирует кадр H264 и пишет на SD-карту, если запись включена!
Одновременно к USB-камере, что показывает картинку оператору, подключался отдельный софт компьютерного зрения, который имел дополнительные задачи. Во-первых, optical flow - по смещению картинки между кадрами борт вычисляет собственную скорость и снос. Работает когда камера смотрит вниз, софт измеряет, на сколько пикселей уползла текстура земли, делит на высоту и получает метры в секунду без всякого GPS.
Во-вторых, захват цели - на некоторых исполнениях Лазаря стоят нейросетевые модели, детектор объектов и трекер, который держит выбранную цель в кадре и не отпускает. Ресурсов одного Pi для такой математики впритык, поэтому использовался отдельный USB-ускоритель нейросети. Работает так - детектор нашёл объект, трекер его схватил, дальше борт способен вести цель сам. Одна камера одновременно даёт картинку человеку, скорость автопилоту и цель нейросети.
В образе накопителя, свежих записей не было вообще. Но на карте лежали тестовые записи наземных проверок, которые операторы стёрли перед вылетами. Их куски оказались разобраны, но сами кадры уцелели - человеческие ноги крупным планом в тепловизоре. На OSD - борт разряжен, GPS не ловит, в кадре тестовая надпись координат из Лимы, столицы Перу. Вероятно проверяли модуль подмены координат для работы Starlink в движении.
Эти кадры дают представление как выглядит экран оператора. Поверх картинки рисуется прицел: зелёный крест с рисками и квадратом в центре. Прицел не висит постоянно. Он появляется, только когда подвес наклонён вниз, а при подъёме камеры вверх становится полупрозрачным. Пока оператор осматривается, крест не мешает обзору, а при наведении на цель становится ярким ориентиром. Слева сверху высота и поправки регулятора, справа сверху индикатор записи, курс и скорость, по центру статус моторов и режима полёта, режимы подсвечиваются цветом. Снизу по центру таймер полёта, дата, время и батарея с током. А в левом нижнем углу число спутников, статус фиксации GPS и текущие координаты борта.
Теперь вопрос для тех, у кого на руках похожий борт с USB-камерой и бортовым компьютером на Raspberry, и для нас самих - как заставить родную камеру работать дальше.
Первый, самый короткий путь: использовать их же скрипт. Полный код видеоконвейера сохранился целиком, это готовое решение под Pi - камера, прицел, OSD, веб-выдача.
Второй путь: Rpanion. Это открытый проект для бортовых компьютеров, который делает почти то же самое, что и их скрипт: забирает видео с USB-камеры, отдаёт его в браузер по WebRTC или в пульт, плюс маршрутизирует телеметрию полётника.
Третий путь: если родная камера не пошла или нужен быстрый результат, камеру меняют, а видео заводят в юнит управления по Ethernet.
Кто уже делал делимся успехами в коментариях!
Post #137958
476
Forwarded from FPV COVENANT




