Как стать автором
Обновить

Комментарии 30

По одной камере! Впечатлен.
Так они же постоянно двигаются, за счёт этого и получается стереопара.
Мы не стали делать optical flow, мысли были, но по времени решили не рисковать и использовать более простой и прогнозируемый алгоритм.
А какое упрощение было применено?
Мы не искали на каждом кадре смещение ключевых точек, а просто пытались найти границы лабиринта. Т.е. линии разделяющие пол со стенами.
Ребята, вы молодцы, работа серьёзная!
Спасибо. На одной из контрольных точек Организаторы сказали, что у нас хорошо работают алгоритмы распознавания, но не хватает нам стабильности в управлением дроном. Это было правда и мы приложили максимум усилий, чтобы наш дрон летал в любых условиях.
Если мне не изменяет память, то вычислительные ресурсы должны были полностью размещаться на борту коптера.
Или я неверно истолковал условия конкурса?

Процессинг видео производился силами коптера, или же видео потоком передавалось на ноутбук/ПК?
В правилах не было такого ограничения. У нас все обрабатывалось на наземной станции (ноутбук). С дрона приходила телеметрия и поток видео, обратно мы отправляли команды управления.
Исходя из сложности алгоритма, есть ли хоть небольшая надежда, что его можно реализовать на борту?
Нпример на плате Intel NUC, которую использовали организаторы?
Думаю да, если провести оптимизацию кода и переписать критические модули на С++.
Будет потеря по количеству fps, но летать сможет.
НЛО прилетело и опубликовало эту надпись здесь
Думаю да, если провести оптимизацию кода и переписать критические модули на С++.
Будет потеря по количеству fps, но летать сможет.
Промахнулся
У меня были похожие рассуждения при выборе сенсоров, поэтому главный алгоритм полагался на распознавание видеопотока с камеры.
Напомню, размеры полигона предполагались 25 х 50 метров. Т.е. ширина коридора была бы 12,5 метров, что для обычных сонаров довольно много, хотя потом мне и попались сонары XL-MaxSonar-EZ, у которых максимальная дистанция 10 метров, чего уже хватило бы.

Для сокращения задержек на пересылку данных был выбран вариант с распознаванием на борту коптера.

Я купил решение, которое обладало максимальной удельной процессорной мощностью на единицу веса, многие здесь его знают, это ODROID-U2. Радиатор которого, планировал заменить на совсем маленький чипсетный.

Установил на него Ubuntu, и начал писать на С++ и OpenCV алгоритм для определения коридора по линиям. Фактически, это двумерная задача.
Сонар планировал установить для определения высоты.
Скажу лишь, что в одиночку заниматься проектом действительно сложно.

У меня сейчас есть все необходимые компоненты, а главное опыт для участия в следующем конкурсе, которого я уже жду :)
НЛО прилетело и опубликовало эту надпись здесь
Пока никаких данных нет. По тестам ARM процессоров, которые есть в нете, видно, что Cortex А9 (очень)примерно вдвое медленнее чем современный х86 и раза в 1,5 медленее чем Атом.
Т.е. я рассчитывал, что разогнанный до 2ГГц Odroid будет способен выдавать приблизительно 4 х 1ГГц Core i3. Если программу распараллелить, то для обработки потока в 640 х 480 этого должно было хватить.
НЛО прилетело и опубликовало эту надпись здесь
Спасибо, я тоже учту, что может так получиться. Есть уже готовая сборка с OpenCV для ODROID-U2. На ней буду тестировать через некоторое время.
Интересно, если подойти с другой стороны: создать модель коридора из плоскостей. Задать исходную точку. Отрендерить модель из этой точки, сравнить изображениия. Переместить робота в другое место, задав максимальную скорость, и зная время перемещения определить область в которой может находиться робот, отрендерить из предполагаемой точки, а потом используя алгоритм оптимизации и сравнивая отреднеренные изображения со снятыми найти точное положение в пространстве.
Особенно впечатлила посадка по фронтальной камере, через которую крест видно только издалека. Это круто, я бы сдался, и повернул камеру немного вниз :)

(не туда написал, хотел в верхний уровень)
На самом деле мы именно так и сделали :) У нас было два изменения к стандартному дрону — внешняя антенна и угол наклона фронтальной камеры — мы наклонили ее вниз примерно на 30 градусов, тем самым увеличив обзор интересующего нас пространства внизу и уменьшив неинтересного пространства выше горизонта.
А какая примерно задержка между событием и попаданием изображения на ноутбук?
Задержка при передаче примерно 50-70 мс. До того, как мы поставили внешнюю антенну, сигнал мог полностью пропасть. После апгрейда видеопоток стал гораздо стабильнее, хотя лаги (битые кадры) периодически возникали.

У нас была еще одна проблема — рассинхронизация видеокадров и телеметрии, которую можно увидеть в ролике по поведению линии горизонта (верхняя голубая линия). Это влияло на определение расстояний до стен — приходилось все усреднять. Буквально в последние дни мы нашли один рецепт, который вроде-бы позволял решить проблему рассинхронизации, но проверять не стали — побоялись все сломать.
А насколько реально получить с дрона стереопару (от двух камер или благодаря движению) и определить расстояние до стен по ней. Просто я когда-то писал программу сопоставления кадров стереопары и пришел к красивому быстрому алгоритму (и простому как две копейки). Интересно было бы наконец-то его применить.
Две камеры на Ar. Drone сложно поставить (надо колдовать с передачей потока и грузоподъемность мала). Мы решили использовать только то, что есть в стандартной комплектации. Что касается анализа соседних кадров, то такая идея была, но поняв, что мы не сможем понимать какое расстояние было между положениями дрона в момент съемки каждого кадра, решили что алгоритм будет очень сложным. Поэтому отложили эту идею на потом.
А нижнюю камеру можно направить вперед? Ну или вообще вынести ей вбок, чтоб базис побольше был?
Теоретически да — там все на шлейфах и разъемах, но одновременно обе камеры не работают. Поток один. Проще собрать своего дрона. Многие команды это сделали.
Понятно. Спасибо.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории