Азимут: навигация без GPS Несколько месяцев мы тихо отрабатываем модуль оптической стабилизации и навигации. Внутри одноплатник Eltay на RK3566 от Новосибирской фирмы Elron. За последнее время через наши руки благодаря участникам группы прошло достаточно трофейных модулей навигации, и лучшие идеи из них мы честно позаимствовали. Самое интересный модуль врага UA-PILOT (StabX) на Pi Zero 2W. Это по сути наш близнец - та же идея, vision-стабилизация и координаты без GPS. У них взяли три вещи. Оптический компас - курс корректируется вращательной компонентой потока, то есть модуль сам видит, как его разворачивает, без компаса борта. Компенсацию задержки камеры - между кадром и обработкой проходит время, у них это 45 миллисекунд, и если это не вычесть, скорость врёт. И хотим еще добавить калибровку угла обзора сеткой - печатаешь шахматку, снимаешь, уточняешь фокусное, и весь пересчёт пикселей в метры встаёт на место. Второй донор, антенный наводчик Underdog с его MOSSE-трекером. Оттуда взята фазовая корреляция - Lucas-Kanade считает поток, а фазовая корреляция независимо проверяет его на правильность. Плюс дисциплина счётчиков - сколько точек живы, сколько забракованы, и еще некоторые моменты. MODULE-172, vision-модуль с другого самолета, показал инженерные моменты - виброразвязку камеры (поток на трясущемся борту это чистый шум), корневой раздел только для чтения и вообще взгляд на модуль как на устройство, которое обязано переживать жёсткое обращение. И Лазарь с его бортовым вычислителем дал сам подход - каждый параметр сначала проверятся на стенде, потом устанавливается на борт. Связка - поток плюс лидар - как основа счисления тоже оттуда. Уже попробовали и провели тесты. Связка камера-лидар - скорость считается, направление верное, отказы отрабатываются правильно. Закрыл камеру рукой - качество падает в ноль, модуль молчит, а не выдаёт мусор. Конвейер до полётника замкнут - борт на столе видит наш дальномер как RANGEFINDER и принимает поток OPTICAL_FLOW с хорошим качеством. Знаки скорости откалиброваны. Оптический компас прошёл три круга проверки. Крутим кадр на известный угол, модуль отвечает с точностью до процента на всём рабочем диапазоне. Вращаем стенд руками, сверяем с гироскопом полётника, корреляция от 0.81 до 0.89, знак совпал. И главное, тест на дрейф - дрейф не наследует, а это ровно то, ради чего компас делался. Основная проблема производительность. Первая версия съедала процессор так, что RK3566 перегревался до 85 градусов и урезал себе частоту, fps падал втрое. Профилировщик показал - почти всё время ели трекинг и проверка фазой. Ужали окно трекера, сетку точек, проверку фазы через кадр. Кадр сжался со 180 до 70 миллисекунд, fps на горячей плате вырос с 5 до 14-15. Как не боролись за размер устройства прийдется увеличивать корпус и вставлять вентилятор в следующей версии. Лидар TF02-Pro видит землю до 40 метров. Выше модуль теряет масштаб - поток сам по себе даёт угловую скорость, а чтобы перевести её в метры в секунду, нужна высота над землёй. Что будет на 200 метрах? Оптический компас высоту не требует вообще - вращение не имеет масштаба, курс модуль держит хоть на километре. И удержание точки тоже частично живёт - нулевой поток означает нулевой снос независимо от высоты, поэтому висеть над местом борт должен и без дальномера. Ограничение одно - без высоты не будет скорости в метрах в секунду и полёта по координатам. Как эту проблемму можно решить? Монокулярная камера сама по себе масштаба не видит, но если сопоставить её поток с ускорениями полётника, которые и так приходят нам по MAVLink, масштаб восстанавливается. Это называется visual-inertial odometry, так устроены системы удержания позиции у DJI, и нам не нужен свой инерциометр на плате. Вариант на перспективу - привязка по карте местности. Модуль узнаёт рельеф под собой и сам знает высоту над землёй за пределами любого дальномера. Трофей это не только железо. Это учебник, который кто-то оплатил своим годом работы и бюджетом. Чем больше разборов, тем быстрее соберём тот самый идеальный модуль. Азимут: навигация без GPS Несколько месяцев мы тихо отрабатываем модуль оптической стабилизации и навигации. Внутри одноплатник Eltay на RK3566 от Новосибирской фирмы Elron. За последнее время через наши руки благодаря участникам группы прошло достаточно трофейных модулей навигации, и лучшие идеи из них мы честно позаимствовали. Самое интересный модуль врага UA-PILOT (StabX) на Pi Zero 2W. Это по сути наш близнец - та же идея, vision-стабилизация и координаты без GPS. У них взяли три вещи. Оптический компас - курс корректируется вращательной компонентой потока, то есть модуль сам видит, как его разворачивает, без компаса борта. Компенсацию задержки камеры - между кадром и обработкой проходит время, у них это 45 миллисекунд, и если это не вычесть, скорость врёт. И хотим еще добавить калибровку угла обзора сеткой - печатаешь шахматку, снимаешь, уточняешь фокусное, и весь пересчёт пикселей в метры встаёт на место. Второй донор, антенный наводчик Underdog с его MOSSE-трекером. Оттуда взята фазовая корреляция - Lucas-Kanade считает поток, а фазовая корреляция независимо проверяет его на правильность. Плюс дисциплина счётчиков - сколько точек живы, сколько забракованы, и еще некоторые моменты. MODULE-172, vision-модуль с другого самолета, показал инженерные моменты - виброразвязку камеры (поток на трясущемся борту это чистый шум), корневой раздел только для чтения и вообще взгляд на модуль как на устройство, которое обязано переживать жёсткое обращение. И Лазарь с его бортовым вычислителем дал сам подход - каждый параметр сначала проверятся на стенде, потом устанавливается на борт. Связка - поток плюс лидар - как основа счисления тоже оттуда. Уже попробовали и провели тесты. Связка камера-лидар - скорость считается, направление верное, отказы отрабатываются правильно. Закрыл камеру рукой - качество падает в ноль, модуль молчит, а не выдаёт мусор. Конвейер до полётника замкнут - борт на столе видит наш дальномер как RANGEFINDER и принимает поток OPTICAL_FLOW с хорошим качеством. Знаки скорости откалиброваны. Оптический компас прошёл три круга проверки. Крутим кадр на известный угол, модуль отвечает с точностью до процента на всём рабочем диапазоне. Вращаем стенд руками, сверяем с гироскопом полётника, корреляция от 0.81 до 0.89, знак совпал. И главное, тест на дрейф - дрейф не наследует, а это ровно то, ради чего компас делался. Основная проблема производительность. Первая версия съедала процессор так, что RK3566 перегревался до 85 градусов и урезал себе частоту, fps падал втрое. Профилировщик показал - почти всё время ели трекинг и проверка фазой. Ужали окно трекера, сетку точек, проверку фазы через кадр. Кадр сжался со 180 до 70 миллисекунд, fps на горячей плате вырос с 5 до 14-15. Как не боролись за размер устройства прийдется увеличивать корпус и вставлять вентилятор в следующей версии. Лидар TF02-Pro видит землю до 40 метров. Выше модуль теряет масштаб - поток сам по себе даёт угловую скорость, а чтобы перевести её в метры в секунду, нужна высота над землёй. Что будет на 200 метрах? Оптический компас высоту не требует вообще - вращение не имеет масштаба, курс модуль держит хоть на километре. И удержание точки тоже частично живёт - нулевой поток означает нулевой снос независимо от высоты, поэтому висеть над местом борт должен и без дальномера. Ограничение одно - без высоты не будет скорости в метрах в секунду и полёта по координатам. Как эту проблемму можно решить? Монокулярная камера сама по себе масштаба не видит, но если сопоставить её поток с ускорениями полётника, которые и так приходят нам по MAVLink, масштаб восстанавливается. Это называется visual-inertial odometry, так устроены системы удержания позиции у DJI, и нам не нужен свой инерциометр на плате. Вариант на перспективу - привязка по карте местности. Модуль узнаёт рельеф под собой и сам знает высоту над землёй за пределами любого дальномера. Трофей это не только железо. Это учебник, который кто-то оплатил своим годом работы и бюджетом. Чем больше разборов, тем быстрее соберём тот самый идеальный модуль.
- 1