2016-01-11 8 views
1

Я работаю над проектом, где я должен реализовать технику отслеживания объектов с помощью камеры Parrot AR Drone 2.0. Поэтому основная идея заключается в том, что дроун должен быть способен идентифицировать определенный цвет, а затем следовать за ним, держась на некотором расстоянии.Отслеживание объектов с камеры; ПИД-контроль; Parrot AR Drone 2

Я использую API opencv для установления связи с беспилотным летательным аппаратом. Этот API предоставляет функция:

ARDrone::move3D(double vx, double vy, double vz, double vr) 

, который перемещает AR.Drone в 3D-пространстве и где

  • ъй: скорость Х [м/с]
  • VY: Скорость Y [м/с]
  • VZ: скорость Z [м/с]
  • вр: скорость вращения [рад/с]

Я написали приложение, которое выполняет простую обработку изображений на изображениях, полученных с камеры дрона с использованием OpenCV, и находит необходимые контуры объекта для отслеживания. Смотрите пример ниже: enter image description here

Теперь часть я борюсь находит технику с помощью которой я должен найти скорости, которые будут направлены на Move3D функцию. Я читал, что обычным способом управления является использование PID контроль. Тем не менее, я прочитал об этом и не мог понять, как это может быть связано с этой проблемой.

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

ответ

4

EDIT:
Итак, я просто понял, что вы используете дрон и вашей cordinate системы WRT дрон, вероятно х вперед в изображение, у слева от изображения (столбцов изображения), г вертикально вверх (изображение строка) , Мой ответ имеет координаты WRT для камеры x = столбцы, y = строки, z = глубина (в изображение). Не забывайте, когда вы читаете мой план. Кроме того, все, что я написал это псевдо-код, он не будет работать без многих модификаций

Оригинал Сообщение:
ПИД-регулятор является пропорционально-интегрально-дифференциальный регулятор. Он определяет последовательность действий, основанную на вашей конкретной ошибке.

Для вашей проблемы можно предположить, что оптимальное отслеживание означает, что прямоугольник находится в центре изображения, и он занимает ~ 30% от пространства пикселей. Это означает, что вы перемещаете камеру/бот, пока не будут выполнены эти условия.Мы будем называть эти параметры голевые

enter image description here

x_ideal = image_width/2 
y_ideal = image_height/2 
area_ideal = image_width * image_height * 0.3 

Теперь давайте говорить ваш ограничивающий прямоугольник характеризуется 4 параметрами

(x_bounding, y_bounding, width_bounding_box, height_bounding_box) 

Ваша ошибка будет что-то вдоль линий:

x_err = x_bounding - x_ideal; 
y_err = y_bounding - y_ideal; 
z_err = area_ideal - (width_bounding_box * height_bounding_box) 

Уведомление Я связал расстояние z (глубина) до размера o f объект. Это предполагает, что отслеживаемый объект является жестким и не изменяет размер. Любое изменение размера связано с расстоянием объектов до камеры (больший ограничивающий прямоугольник означает, что объект близок, малый означает, что объект далеко). Это немного оценка, но без каких-либо параметров на камере или самом объекте мы можем делать только эти общие утверждения.

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

< z_err 0: означает, что бот слишком близко, и нужно замедлить, Vz должна быть уменьшена
z_err = 0: держать скорость не командовать же, никаких изменений
z_err> 0: нам нужно, чтобы стать ближе, Vz следует увеличить

x_err < 0: означает, что бот вправо и нужно повернуть налево (уменьшение х), Vx должна быть уменьшена
x_err = 0: сохранить скорость в X тем же, без изменений на Vx
x_err> 0: означает, что бот находится слева и ему нужно повернуть направо (увеличение x), Vx следует увеличить

Мы можем сделать то же самое для каждой оси y. Теперь мы используем эту ошибку для создания последовательности команд для бота.

Это описание очень похоже на ПИД-регулятор. Наблюдайте за состоянием, выясните ошибку, создайте контрольную последовательность, чтобы уменьшить ошибку, а затем повторите процесс снова и снова. В вашем случае скоростью будут действия, выдаваемые вашим алгоритмом. Вы по существу есть 3 ИДП работает

  1. PID для X
  2. PID для Y
  3. PID для Z

Поскольку они являются ортогональными по своей природе, мы можем сказать, каждую систему (и в идеале он), перемещение в направлении x не должно влиять на направление Y. В этом примере также полностью игнорируется информация о подшипниках (Vr), но это должно быть мысленным упражнением, а не полным решением.

Точная скорость поправок определяется вашими коэффициентами PID, и здесь ситуация становится немного сложной ,Here - это легко читаемый (почти без математики) обзор или ПИД-регулирование. Вам придется играть с вашей системой (ака «Настроить» ваши параметры) с помощью нескольких экспериментов. Это делается еще сложнее, потому что камера не является полным 3D-датчиком, поэтому мы не можем извлекать истинные измерения из окружающей среды. Трудно преобразовать ошибку ~30 pixels в m/s, не зная больше информации о вашем сенсоре/окружающей среде, но я надеюсь, что это дало вам общее представление о том, как действовать дальше

+0

Спасибо за ваш ответ, он явно отвечает на мой вопрос в полном объеме вопросов. И ваши предположения относительно системы координат дрона верны. Я не совсем понял «несущую информацию», о которой вы говорили. Вы имеете в виду факторы, которые могут повлиять на его движение, ветер и т. Д. Или smt еще? – fiz

+1

Под «информацией о подшипниках» я имел в виду угол. В функции AR drone это угловая скорость. Насколько я могу судить, это угол перемещения от оси x беспилотного летательного аппарата (в плоскости xy, я надеюсь, что это имело смысл). Вы можете использовать этот угол вместе с горизонтальными движениями, чтобы отслеживать цель. Но в моем маленьком примере я предположил, что вы можете скользить по оси y. не изменять угловое направление/подшипник – andrew