Спасибо. На одной из контрольных точек Организаторы сказали, что у нас хорошо работают алгоритмы распознавания, но не хватает нам стабильности в управлением дроном. Это было правда и мы приложили максимум усилий, чтобы наш дрон летал в любых условиях.
В правилах не было такого ограничения. У нас все обрабатывалось на наземной станции (ноутбук). С дрона приходила телеметрия и поток видео, обратно мы отправляли команды управления.
Исходя из сложности алгоритма, есть ли хоть небольшая надежда, что его можно реализовать на борту?
Нпример на плате Intel NUC, которую использовали организаторы?
У меня были похожие рассуждения при выборе сенсоров, поэтому главный алгоритм полагался на распознавание видеопотока с камеры.
Напомню, размеры полигона предполагались 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 этого должно было хватить.
Интересно, если подойти с другой стороны: создать модель коридора из плоскостей. Задать исходную точку. Отрендерить модель из этой точки, сравнить изображениия. Переместить робота в другое место, задав максимальную скорость, и зная время перемещения определить область в которой может находиться робот, отрендерить из предполагаемой точки, а потом используя алгоритм оптимизации и сравнивая отреднеренные изображения со снятыми найти точное положение в пространстве.
Особенно впечатлила посадка по фронтальной камере, через которую крест видно только издалека. Это круто, я бы сдался, и повернул камеру немного вниз :)
На самом деле мы именно так и сделали :) У нас было два изменения к стандартному дрону — внешняя антенна и угол наклона фронтальной камеры — мы наклонили ее вниз примерно на 30 градусов, тем самым увеличив обзор интересующего нас пространства внизу и уменьшив неинтересного пространства выше горизонта.
Задержка при передаче примерно 50-70 мс. До того, как мы поставили внешнюю антенну, сигнал мог полностью пропасть. После апгрейда видеопоток стал гораздо стабильнее, хотя лаги (битые кадры) периодически возникали.
У нас была еще одна проблема — рассинхронизация видеокадров и телеметрии, которую можно увидеть в ролике по поведению линии горизонта (верхняя голубая линия). Это влияло на определение расстояний до стен — приходилось все усреднять. Буквально в последние дни мы нашли один рецепт, который вроде-бы позволял решить проблему рассинхронизации, но проверять не стали — побоялись все сломать.
А насколько реально получить с дрона стереопару (от двух камер или благодаря движению) и определить расстояние до стен по ней. Просто я когда-то писал программу сопоставления кадров стереопары и пришел к красивому быстрому алгоритму (и простому как две копейки). Интересно было бы наконец-то его применить.
Две камеры на Ar. Drone сложно поставить (надо колдовать с передачей потока и грузоподъемность мала). Мы решили использовать только то, что есть в стандартной комплектации. Что касается анализа соседних кадров, то такая идея была, но поняв, что мы не сможем понимать какое расстояние было между положениями дрона в момент съемки каждого кадра, решили что алгоритм будет очень сложным. Поэтому отложили эту идею на потом.
Теоретически да — там все на шлейфах и разъемах, но одновременно обе камеры не работают. Поток один. Проще собрать своего дрона. Многие команды это сделали.
Как мы улетели и с трудом вернулись: подробный отчет о нашем участии в соревнованиях летающих роботов компании КРОК