
Лет пять назад мы с другом делали один необычный проект рекламного характера с продвинутой видеосъемкой с дрона. Проект в итоге завершен не был, но интересные наработки остались. Возможно кому-то пригодятся эти наработки или кто-то захочет довести этот проект до конца.
Постановка задачи: определить координаты дрона относительно движущегося объекта.
Обзор существующих решений похожих задач:
А) Бинокулярное зрение. Лидеры отрасли гражданских БПЛА используют для ориентации дронов в пространстве бинокулярное зрение. Например у дрона DJI mavic 3 pro четыре пары сдвоенных камер для избегания препятствий.


Другой лидер индустрии гражданских беспилотников тоже использует бинокулярное зрение: в модели Skydio1 оспользовалось 8 камер для ориентации в пространстве (4 пары). В модели skydio2 используется 6 камер (уже не сдвоенные, а строенные, но принцип все равно тот же). Подробнее про бинокулярное зрение дронов можно почитать здесь: Бинокулярное зрение: машинное и естественное
Б) Монокулярное зрение: Structure-from-Motion и Visual SLAM
Чтобы не перегружать статью картинками, уберу схему работы Structure-from-Motion и Visual SLAM на примере машинного зрения Tesla под этот спойлер

Structure-from-Motion и Visual SLAM это формально два разных, но очень похожих способа построения 3д модели окружающего пространства. Оба метода основаны на геометрическом методе вычисления расстояния до фич (углов, ярких точек и т.п.) объекта. Основная разница в том, что первый метод сравнимает каждый кадр с каждым, а visual SLAM сравнивает кадр только со следующим и предыдущим. В рамках данной статьи будем считать SLAM частным случаем S-f-M.

Основным недостатком данного метода является то, что движущиеся предметы оказываются не видны. Из-за этого недостатка алгоритма могут происходить аварии подобные этой: Очередной инцидент с Tesla, чуть не столкнувшейся с поездом, вызывает опасения по поводу автопилота

Наш подход:
Чтобы избежать недостатков метода Structure-from-Motion, мы решили использовать "обратный" Structure-from-Motion.


С теорией закончили, теперь реализация.
Сначала делаем видео с объектом в стиле обратного S-f-M. Затем нарезаем это видео на несколько сотен кадров. Допустим у нас получилось 1000 кадров. Это неразмеченный датасет. Размесает этот датасет, пропуская через алгоритм Structure-from-Motion в любой программе фотограмметрии. Мы использовали Meshroom (кстати разбить видеоролик на несколько сотен кадров можно в нем же). Разметка каждого кадра идет в таком формате: IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME
пример: 1 0.998302 -0.00448578 0.053215 -0.0232721 0.213129 -0.225976 4.24765 3391136576 1007579105.jpg
На основе подученного размеченного датасета обучаем CNN. Какие лучше использовать архитектуры я сказать не могу. Но тот момент когда мы это делали у нас был сильно ограниченный бюджет. Поэтому результаты получались не очень хорошие. Сейчас цены на вычислительные мощности сильно упали, поэтому обучение такой CNN теперь по силам не только компаниям но и просто энтузиастам. Лет через 5 наверное и школьники смогут обучать такие модели на карманные деньги.
Возможный результат. В итоге мы получим робота/дрон/автопилот, который хорошо определяет свое местоположение относительно конкретного объекта даже если этот объект движется.
Практические применения. Наиболее актуальное сейчас применение данной нейронки-это удары по движущейся военной технике. По точности такие удары должны быть на уровне дронов с бинокулярной системой машинного зрения.

P.S. Я наверное лишнего расписал теорию и мало написал про практику. Но общий смысл в том, чтобы автоматически размечать датасеты с помощью программ фотограмметрии. Если кто-то уже делал или сейчас делает что-то подобное-пишите в комментах, будет интересно пообщаться.
eimrine
Какие системные требования к вычислителю который будет на дроне?
Правильно ли я понимаю что если делать то же самое но с бинокулярным зрением, например с целью уклонения от "чёрного автомобиля" и прочих случайных объектов вроде деревьев то требования к вычислителю возрастут в два раза?
malyazin_2010 Автор
Бинокулярный дрон Skidio2 построен на плате jetson TX2 . У нее не самая большая вычислительная мощность.
Дроны с бинокулярным зрением могут уклоняться от движущихся объектов. главный минус-что для бинокулярного зрения нужно удвоение числа камер, но есть и другие недостатки.