справа показано положение камеры относительно объекта съемки
справа показано положение камеры относительно объекта съемки

Лет пять назад мы с другом делали один необычный проект рекламного характера с продвинутой видеосъемкой с дрона. Проект в итоге завершен не был, но интересные наработки остались. Возможно кому-то пригодятся эти наработки или кто-то захочет довести этот проект до конца.

Постановка задачи: определить координаты дрона относительно движущегося объекта.

Обзор существующих решений похожих задач:

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

8 камер для построения 3д модели местности и, соответственно, избегания препятствий
8 камер для построения 3д модели местности и, соответственно, избегания препятствий
тут DJI показывает, как система построения 3д модели местности видит окружающий мир. (гифка взята с их сайта)
тут DJI показывает, как система построения 3д модели местности видит окружающий мир. (гифка взята с их сайта)

Другой лидер индустрии гражданских беспилотников тоже использует бинокулярное зрение: в модели Skydio1 оспользовалось 8 камер для ориентации в пространстве (4 пары). В модели skydio2 используется 6 камер (уже не сдвоенные, а строенные, но принцип все равно тот же). Подробнее про бинокулярное зрение дронов можно почитать здесь: Бинокулярное зрение: машинное и естественное

Б) Монокулярное зрение: Structure-from-Motion и Visual SLAM

Чтобы не перегружать статью картинками, уберу схему работы Structure-from-Motion и Visual SLAM на примере машинного зрения Tesla под этот спойлер
Общая схема работы Structure-from-Motion:  3д пространство строится последовательно по мере продвижения камеры.
Общая схема работы Structure-from-Motion: 3д пространство строится последовательно по мере продвижения камеры.

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

так работает метод S-f-M на автомобиле Tesla model 3
так работает метод S-f-M на автомобиле Tesla model 3

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

Тут автопилот tesla model3 не увидел движущийся поезд. Если бы поезд не двигался, то алгоритм Structure-from-Motion (Visual SLAM) наверняка бы увидел препятствие.
Тут автопилот tesla model3 не увидел движущийся поезд. Если бы поезд не двигался, то алгоритм Structure-from-Motion (Visual SLAM) наверняка бы увидел препятствие.

Наш подход:

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

Это классический метод S-f-M. В этом примере будет построена 3д модель серого авто, дороги и окружающего поля. Поскольку черный автомобиль движется, то алгоритм его не увидит и черный авто не отобразится в конечной 3д модели.
Это классический метод S-f-M. В этом примере будет построена 3д модель серого авто, дороги и окружающего поля. Поскольку черный автомобиль движется, то алгоритм его не увидит и черный авто не отобразится в конечной 3д модели.
Это пример метода обратного S-f-M. Здесь в конечной 3д модели будет только  автомобиль.Поле и трава здесь являются движущимися объектами, поэтому в 3д модели не отобразятся.
Это пример метода обратного S-f-M. Здесь в конечной 3д модели будет только автомобиль.Поле и трава здесь являются движущимися объектами, поэтому в 3д модели не отобразятся.

С теорией закончили, теперь реализация.

Сначала делаем видео с объектом в стиле обратного 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 наверное и школьники смогут обучать такие модели на карманные деньги.

Возможный результат. В итоге мы получим робота/дрон/автопилот, который хорошо определяет свое местоположение относительно конкретного объекта даже если этот объект движется.

Практические применения. Наиболее актуальное сейчас применение данной нейронки-это удары по движущейся военной технике. По точности такие удары должны быть на уровне дронов с бинокулярной системой машинного зрения.

Если запрограммировать удар точно в боекомплект системы HIMARS, то удар будет именно туда, даже если техника движется. Потому что модель точно определяет свое местоположение относительно объекта.
Если запрограммировать удар точно в боекомплект системы HIMARS, то удар будет именно туда, даже если техника движется. Потому что модель точно определяет свое местоположение относительно объекта.

P.S. Я наверное лишнего расписал теорию и мало написал про практику. Но общий смысл в том, чтобы автоматически размечать датасеты с помощью программ фотограмметрии. Если кто-то уже делал или сейчас делает что-то подобное-пишите в комментах, будет интересно пообщаться.

Комментарии (2)


  1. eimrine
    07.11.2025 10:22

    Какие системные требования к вычислителю который будет на дроне?

    Правильно ли я понимаю что если делать то же самое но с бинокулярным зрением, например с целью уклонения от "чёрного автомобиля" и прочих случайных объектов вроде деревьев то требования к вычислителю возрастут в два раза?


    1. malyazin_2010 Автор
      07.11.2025 10:22

      Бинокулярный дрон Skidio2 построен на плате jetson TX2 . У нее не самая большая вычислительная мощность.

      Дроны с бинокулярным зрением могут уклоняться от движущихся объектов. главный минус-что для бинокулярного зрения нужно удвоение числа камер, но есть и другие недостатки.