Схема полёта с отслеживанием цели Quadrotor - PullRequest
0 голосов
/ 09 сентября 2011

Я программирую вертолетный беспилотный вертолет, чтобы автоматически преследовать движущуюся наземную цель, используя обработку изображений. Аппаратное обеспечение, с которым я работаю, довольно ограничено, поэтому для того, чтобы мои автоматические команды учитывали скорость беспилотника (он не знает, когда он движется), мне нужно вручную отслеживать относительное положение цели с течением времени (которое может быть примерно переведено в движение беспилотника).

Итак, вот что я имею в виду:

int lastX = Targets_Last_Position_Xcoord();
int lastY = Targets_Last_Position_Ycoord();
int nowX = Targets_Current_Position_Xcoord();
int nowY = Targets_Current_Position_Ycoord();

int speedModX = (float)(60 - (abs(lastX)-abs(nowX))) / 60.0f; // Image dimension is 120
int speedModY = (float)(73 - (abs(lastY)-abs(nowY))) / 73.0f; // Other dimension is 146

changePitch(((nowX - 60)/60.0f)*(1 + speedModX));
changeRoll(((nowY - 73)/73.0f)*(1 + speedModY));

Функция «changePitch» и другие подобные ей заставляют следующую команду, отправляемую дрону, включать изменение высоты тона указанного процента от заданного максимального наклона. Итак, я приказываю дрону наклонять количество, напрямую связанное с расстоянием до цели от центра экрана; затем я добавляю множитель, основанный на том, куда двигалась цель (расстояние между последней точкой цели и ее текущей точкой).

Это мое намерение в любом случае; кажется, что этот код только помогает, и другие факторы, такие как воздушный поток и механический дисбаланс (это не самое качественное оборудование), могут мешать, оставляя меня просто видеть то, что я хочу видеть.

Является ли метод, который я использую для расчета правильной скорости дрона, и / или есть ли лучший способ справиться с этим?

РЕДАКТИРОВАТЬ: вычисление speedModX и speedModY было изменено, предыдущая форма имела нежелательные результаты при некоторых обстоятельствах. Новая формула правильно создает модификатор, основанный на разнице между предыдущим расстоянием цели от начала координат и текущим расстоянием цели от начала координат.

Ответы [ 3 ]

1 голос
/ 13 сентября 2011

Это достаточно сложная проблема, и вряд ли вы найдете хорошее решение с ad hoc правилами управления. В литературе по робототехнике проблема выражается в виде отслеживания цели (Google «планирование движения робота отслеживания цели» для некоторого интересного чтения.)

Я реализовал отслеживание целей для наземного, колесного робота, и я думаю, что методы будут применимы к вашей проблеме. Кроме того, я думаю, что они будут хорошо масштабироваться до дополнительного 3-го измерения движения в вашей задаче. Взгляните на реализацию «потенциальных полей». Этот метод моделирует робота, цели и / или препятствия как частицы с электрическими зарядами. Цели демонстрируют силы притяжения; препятствия моделируются силами отталкивания. Эта модель проста в реализации и работает на удивление хорошо для простых задач отслеживания / избегания.

Здесь представляет собой набор слайдов, который вводит тему. Здесь - довольно хороший документ об использовании потенциальных полей для обхода препятствий. Не должно быть большой задачей применить эти методы к проблеме отслеживания (просто инвертируйте знаки!). Наконец, здесь представляет собой документ ACM, в котором автор описывает решение аналогичной проблемы отслеживания целей. (У меня нет доступа к PDF, извините).

1 голос
/ 13 октября 2011

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

Вот еще один хороший справочник для вашей работы:
СТАБИЛИЗАЦИЯ И УПРАВЛЕНИЕ КВАДРАТОРНЫМ МИКРО-БЛАИСПОЛЬЗОВАНИЕ ДАТЧИКОВ VISION http://contentdm.lib.byu.edu/ETD/image/etd2375.pdf

Еще одна интересная ссылка: http://www.ludep.com/

1 голос
/ 12 сентября 2011

Если вы не можете найти лучший способ моделирования системы, вам может потребоваться настройка пропорционально-интегрально-производного (ПИД) контроллера для этого. Это общее решение, используемое в автоматизации для работы с циклами обратной связи.

Согласно статье в Википедии:

ПИД-регулятор рассчитывает значение «ошибки» как разницу между измеренной переменной процесса и желаемой уставкой. Контроллер пытается минимизировать ошибку путем настройки входов управления процессом ... При отсутствии знаний о базовом процессе, PID контроллер является лучшим контроллером.

...