Плата управления квадрокоптером. Вопросы и ответы.



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

Предлагаю продолжить обсуждение данной темы.

В данной статье постараюсь ответить на несколько часто задаваемых вопросов (эти вопросы задавали мне через ЛС, но думаю, что есть смысл вынести это в публичный доступ).



Другие статьи цикла:
Плата управления квадрокоптером. Немного теории.
Плата управления квадрокоптером. Продолжаем разговор.
Плата управления квадрокоптером. Комплементарный фильтр.

1. Что лучше: комплементарный фильтр, матрица направляющих косинусов (DCM) или фильтр Калмана?

Вообще, такая постановка вопроса не совсем корректна. Дело в том, что при построении системы управления мы решаем две, практически не связанные между собой, задачи.

Первая задача – это переход от системы координат связанной с ЛА (связанная система координат) к «земной» системе координат. Оси измерения наших датчиков (гироскоп, акселерометр) жестко связаны с самим ЛА и, соответственно, все измерения привязаны к системе координат связанной с ЛА. Но нас интересует система координат связанная с Землей. Например, акселерометр зафиксировал ускорение, направленное вдоль продольной оси ЛА. Вопрос: в какую сторону относительно Земли (наблюдателя) начнет двигаться ЛА под воздействием этого ускорения? Для того чтобы ответить на этот вопрос, нам нужно знать как ориентирована продольная ось ЛА относительно Земли.

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

Самое простое решение – решение «в лоб»: использование матрицы поворота. У нас есть углы между базисами связанной и земной системы координат (по сути это и есть углы крена, тангажа и рыскания), есть координаты вектора в связанной системе координат – нужно просто повернуть вектор в трехмерном пространстве. Этот метод работает, только довольно затратный в плане ресурсов МК, т. к. придется вычислять много синусов и косинусов.

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

Ну, и третий вариант – перейти к кватернионам.

В конечном итоге все три метода дадут одинаковый результат – вопрос только в эффективности реализации этих методов на МК.

Следующая задача это повышения точности измерения нужных нам параметров за счет использования нескольких датчиков (или датчиков разного типа). Эта штука называется «sensors fusion» (русскоязычного термина я, к сожалению, не знаю). Итак, у нас есть MEMS гироскоп и акселерометр, и мы хотим максимально точно измерять углы крена и тангажа. Гироскоп довольно неплохо позволяет нам вычислить эти углы в краткосрочной перспективе, но со временем вычисленные показания уплывают. Акселерометр наоборот, дает нам весьма неточное и зашумленное измерение углов, но зато его показания не плывут со временем, ошибка большая, но она не накапливается.

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

Наиболее часто встречаются следующие алгоритмы:

1. Комплементарный фильтр (его описание есть в предыдущей статье).

2. Использование ПИ(ПИД) — регулятора. Хоть это и кажется не логичным, ПИ-регулятор можно использовать для решения нашей задачи. Идея в следующем: у нас есть расчетный угол, полученный интегрированием данных с гироскопа и угол, измеренный с помощью акселерометра. Берем разницу между этими показаниями (ошибку) и подаем на вход дискретного ПИ-регулятра. Регулятор вычисляет «управляющее воздействие» и мы корректируем расчетный угол с гироскопа на эту величину. Пропорциональный и интегральный коэффициент регулятора берут очень маленьким (меньше 1), за счет этого регулятор ведет себя как фильтр низких частот: резкое одиночное отклонение в показаниях гироскопа и акселерометра, из-за малых значений коэффициентов, приведет к незначительной коррекции угла. Таким образом «фильтруются» высокочастотные шумы с акселерометра. Это чем-то похоже на работу комплементарного фильтра, но есть один плюс – наличие интегральной составляющей. Интегральная составляющая «подстраивает» наш фильтр и эффективно борется с дрейфом нуля гироскопа.

3. Фильтр Калмана. Честно говоря, для меня данный фильтр так и остается «магией». Дело не в сложности реализации самого фильтра, а в том, что нужно правильно подобрать некоторые «параметры» фильтра. Эти параметры (задаются в виде матриц) зависят от параметров ЛА, параметров датчиков, характера шумов и т. д. Вот, попытка вычислить эти параметры заводит в тупик.

Тяжело однозначно сказать, какой из алгоритмов лучше. Теоретически, Калман должен быть самым эффективным. Но по тем материалам, которые я нашел в сети – он работает почти так же, как и комплементарный фильтр.

2. «у меня есть 3 ПИД регулятора для тангажа, крена и рысканья. Я получаю на их выходах значения, которые необходимо приложить на управляющий вход. Как лучше сложить значения этих трёх контроллеров?»

Алгоритм, который распределяет выходы ПИД регуляторов непосредственно на двигатели называют «микшер». Его реализация завит, в первую очередь, от схемы нашего ЛА (трикоптер, квадрокоптер и т. д.).

Для примера рассмотрим один из возможных алгоритмов – он достаточно простой но, при этом, достаточно эффективный.

У нас есть квадрокоптер построенный по схеме «+». Мы управляем оборотами каждого двигателя. Обозначим каждый двигатель

М1 – передний
М2 – правый
М3 – задний
М4 – левый

Допустим, что обороты мы задаем числом от 0 до 100 (0 – мин. обороты, 100 – макс.). Для начала, нам нужно «базовое» значение, к которому мы будем применять коррекцию. Это значение определяется позицией регулятора «Газ» на пульте управления. Предположим, у нас «газ» в среднем положении, и базовое значение для всех двигателей – 50 (условно, зависимость оборотов от положения «газ» не обязательно должна быть линейной).

Получим

М1 = 50
М2 = 50
М3 = 50
М4 = 50

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

М1 = 50
М2 = 45
М3 = 50
М4 = 55

Аналогичное делаем с тангажем. Только данные берем с другого ПИД регулятора, и изменяем соответственно обороты «переднего» и «заднего» двигателя. Например, получили следующее (допустим, данный ПИД регулятор выдал значение управления в 1)

М1 = 49
М2 = 45
М3 = 51
М4 = 55

Далее, рыскание – у нас на коптере два двигателя (на одной оси) вращаются по часовой стрелке, два других — против часовой. Соответственно, чтобы развернуть ЛА против часовой стрелки, нужно увеличить обороты первой пары двигателей и, на аналогичную величину, снизить обороты второй пары. Вобщем, все то же что и раньше, только управляющее воздействие применяем не к одному двигателю а к паре двигателей.

Теперь нужно нормализовать полученные значения, т. к. при расчете мы могли получить значения менее 0 или более 100. Здесь все просто, никаких пересчетов не делается, просто если значении меньше 0 то его принудительно устанавливаем в 0, если более 100 то устанавливаем в 100.

Полученные значения подаем на контроллеры двигателей и начинаем новый цикл.
  • +7
  • 13 августа 2012, 16:16
  • e_mc2

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

RSS свернуть / развернуть
В предыдущих статьях мы познакомились с базовыми принципами построения системы управления квадрокоптером.
а может оглавление забабахать?
+1
Плюсую, оглавление необходимо!
0
Сделано.
0
Дело не в сложности реализации самого фильтра, а в том, что нужно правильно подобрать некоторые «параметры» фильтра. Эти параметры (задаются в виде матриц) зависят от параметров ЛА, параметров датчиков, характера шумов и т. д. Вот, попытка вычислить эти параметры заводит в тупик.

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

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

x(n+1) = a * x(n) + b * u(n)

Здесь можно использовать само уравнение фильтра для идентификации его параметров a и b по множеству измеренных x и поданных на вход u. Получаем переопределенную систему.

x(1) = a * x(0) + b * u(0)
x(2) = a * x(1) + b * u(1)
x(3) = a * x(2) + b * u(2)


Решать это можно любыми методами, МНК например. Есть рекурсивные методы не требующие хранения всех значений и способные работать совместно с наблюдателем. Они наиболее интересны т.к. делают наблюдатель самонастраивающимся.

Обычно все немного сложнее и эти уравнения ещё надо добыть из уравнений наблюдаемой системы.

Есть ещё интересный способ, не разделять наблюденеие и идентификацию, а просто объявить все константы переменными и добавить их в вектор состояния системы, дописать соотвествующее количество уравнений для новых переменных (всего лишь dx/dt = 0). Размерность системы значительно подрастет и она станен `ещё более нелинейной`. Взамен один только наблюдатель будет выполнять всю работу по адаптации. Но возможно здесь есть какие-то проблемы, я попытавшись поиграться с этим методом численно используя EKF получил фэйл, почему глубуко не пока не копал, возможно всего лишь моя ошибка записи матриц для EKF.

Не помню давал ли ссылку. Интересная книга по теме, но не слишком просто написана. www-bcf.usc.edu/~ioannou/Robust_Adaptive_Control.htm

Ещё по поводу адаптации есть вот здесь.

Ким Д. П. Теория автоматического управления. Т. 2. Много-
Многомерные, нелинейные, оптимальные и адаптивные системы: Учеб.
пособие. — М.: ФИЗМАТЛИТ, 2004. — 464 с. — ISBN 5-9221-0534-5.
0
Спасибо за информацию. Фильтр Калмана я пока отложил (в свой реализации я остановился на методе «ПИ-регулятора») но, в будущем, планирую к нему вернуться.
0
тогда еще совет почитать про метод динамического программирования (метод Белмана)
вроде учил ТАУ, а все за зря, как применять вообще не представляю(
0
Соответственно, чтобы развернуть ЛА по часовой стрелке, нужно увеличить обороты первой пары двигателей и, на аналогичную величину, снизить обороты второй пары.
А не наоборот ли?
+1
  • avatar
  • Vga
  • 13 августа 2012, 23:45
Упс… Вы правы, наоборот. Поправил статью.
0
вообще-то, direction cosine matrix переводится как «матрица косинусов направлений», или, если directional — направляющих косинусов. Сам косинус — вещь скаларная, и никуда не направлена.
0
Да, мой перевод не некорректный. В оригинале DCM = DIRECTION COSINE MATRIX. В русскоязычных источниках – «Матрица направляющих косинусов».
0
Упс… «не некорректный» = «некорректный»
0
Эта штука называется «sensors fusion» (русскоязычного термина я, к сожалению, не знаю)
в русскоязычной литературе это называется комплексированием информационно-измерительных устройств.
0
Прошу прощение за вопрос не совсем по теме, но насколько точно можно измерить угол поворота неподвижной системы при помощи одного только акселерометра? Я понимаю что зависит от самого акселерометра, но хотя бы примерно для недорогих.
0
Я так понимаю, Вы имеете ввиду углы относительно горизонта?
На LSM330DL, если отфильтровать шумы, можно добиться точности порядка десятых градуса. Но, это в идеальном случае – система неподвижна, никаких вибраций, температура не меняется и т. д.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.