- Настройка PID регуляторов для прошивки MegaPirateNG

Настройка PID регуляторов для прошивки MegaPirateNG и полетного контроллера на базе Arduino Mega256

Практика для студентов. Мясищев А.А.

В последнее время высокую степень интереса вызывают дроны или беспилотные летающие роботы, построенные на базе мультикоптеров. Среди них наиболее распространенным является четырехмоторный коптер - квадрокоптер. Сейчас они используются для исследования местности, для проведения спасательных операций МЧС, в работе пожарных служб, военной разведки. Рассмотрим обеспечение стабилизации полета квадрокоптера на основе полетного контроллера, собранного на базе микроконтроллера atmega2560. В состав полетного контроллера входят:

- Микроконтроллер ATMega 2560-16AU на плате Arduino Mega256;

- 6-ти осевой гироскоп-акселерометр MPU6050;

- 3-х осевой компас HMC5883L

- барометр/высотомер BMP180;

- GPS приемник u-blox NEO-6M.

Полетный контроллер установлен на раме F450 с пропеллерами размером 10х45"(рис.1). Для этого полетного контроллера использовались прошивки MegapirateNG 2.7R4, 2.8R3 и MegapirateNG 3.1.5R2, конфигурационные файлы которых были откорректированы для использованного набора микросхем-датчиков.

Рис.1. Квадрокоптер на раме F450 с полетным контроллером на базе Arduino mega

Испытания показали, что для одинаковых параметрах квадрокоптера наиболее нестабильной прошивкой оказалась MegapirateNG 2.8R3. При тестовом полете наблюдались сильные осцилляции по Pitch, Roll даже при средних оборотах двигателей. Параметры PID регуляторов были установлены по умолчанию, как в прошивке. Переход к MegapirateNG 2.7R4 показал большую стабильность тестового полета. Осцилляции наблюдались лишь при высоких оборотах двигателей. Прошивка MegapirateNG 3.1.5R2 обеспечила стабильность полета квадрокоптера при любых оборотах двигателей для параметров PID регуляторов, установленных по умолчанию. Рассмотрим схему назначения параметров PID регуляторов для обеспечения стабильного полета квадрокоптера для рассматриваемых здесь прошивках. Для лучшего представления принципа настройки параметров PID регулятора рассмотрим следующее пояснение его работы.

PID-регулятор представляет математический аппарат, который применяется почти во всех задачах стабилизации: стабилизация углов квадрокоптера в воздухе, полет и удержание позиции по GPS, удержание высоты по барометру, бесколлекторные механизмы стабилизации видеокамеры в полете (подвес камеры). Рассмотрим формулу PID-регулятора, предполагая, что квадрокоптер имеет только угол крена (Roll) и два двигателя (плоская модель):

В полетный контроллер непрерывно поступают команды с земли: «крен 30 градусов», «крен -10 градусов», «крен 0 градусов (держать горизонт)». Задача контроллера - быстрее и точнее их выполнять с помощью моторов с учетом: ветра, неравномерного распределения веса квадрокоптера, инерции квадрокоптера и т.д. Поэтому им постоянно решается задача, какую скорость вращения необходимо подавать на каждый мотор с учетом текущего значения угла крена и требуемого. Adruino одну итерацию цикла обработки и управления может выполнять за 10 миллисекунд, которые являются периодом регулирования. Чем меньше период, тем точнее происходит регулирование.

Уровень открытия дроссельной заслонки, который поступает из приемника в передатчик обозначим throttle. Это среднее арифметическое между скоростями вращения всех моторов, выраженное в процентах от максимальной скорости вращения. Если left и right - скорости вращения левого и правого моторов, то:

left = throttle + force,

right = throttle - force.

Здесь force - приведенная к скорости вращения реакция (усилие) квадрокоптера, которая создает момент вращения за счет того, что левый мотор вращается на force быстрее, чем throttle, а правый на force медленнее. Ясно, что force может принимать и отрицательные значения, тогда правый мотор вращается быстрее. Для управления квадрокоптером необходимо вычислять величину force на каждой итерации периода регулирования. Величина force прежде всего должна зависеть от текущего угла крена (roll) и желаемого угла крена (get_roll) который поступает с пульта управления. Предположим, поступает команда с пульта «держать горизонт» (get_roll=0), а квадрокоптер имеет крен влево:

Пусть error - разность (ошибка) между get_roll и roll, которую контроллер стремится минимизировать. Чем больше разность между желаемым углом крена и текущим, тем сильнее должна быть реакция, тем быстрее левый мотор должен закрутиться относительно правого. Это можно записать так:

force = P * error (1)

Здесь P - коэффициент пропорциональности. Чем он больше, тем сильнее будет реакция, тем резче квадрокоптер будет реагировать на отклонение от требуемого угла крена. Эта простая формула описывает работу пропорционального регулятора. Суть ее следующая: чем сильнее квадрокоптер отклонился от требуемого положения, тем сильнее надо пытаться его вернуть. Однако эта формула должна быть усложнена вследствие перерегулирования которое можно объяснить следующим образом. За несколько десятков миллисекунд (несколько итераций цикла обработки - периодов регулирования) под воздействием пропорционального регулятора квадрокоптер вернется в требуемое (в данном случае горизонтальное) положение. Все это время ошибка error и усилие force будут иметь один и тот же знак, хоть и становиться все меньше по модулю. Набрав какую-то скорость поворота (угловую скорость) квадрокоптер просто перевалится на другой бок, так как формула (1) не имеет члена, приводящего к торможению. По этой причине в пропорциональный регулятор нужно добавить еще одно слагаемое, которое будет тормозить вращение квадрокоптера и препятствовать перерегулированию (переваливанию в противоположную сторону). Это слагаемое должно имитировать трение - чем быстрее поворачивается квадрокоптер, тем сильнее должна быть попытка остановить квадрокоптер. Если скорость вращения (скорость изменения ошибки) обозначить как speed, тогда формула регулятора запишется в виде:

force = P * error + D * speed ,

где D - настраиваемый коэффициент: чем он больше, тем сильнее останавливающее усилие.

Скорость изменения ошибки speed можно записать так:

speed = derror /dt

Или в разностной форме:

speed ~ (error-errorprevious)/Dt

Здесь: Dt - период регулирования, errorprevious - значение ошибки с предыдущей итерации цикла регуляции.

Пусть левый край будет весить чуть больше правого. Тогда квадрокоптер будет немного наклонен влево. Повернуться обратно (выровняться) он не сможет, так как дифференциальное слагаемое равно нулю, а пропорционального слагаемого не хватает, чтобы вернуть квадрокоптер в горизонтальное положение, так как левый край весит чуть больше правого. Вследствие этого квадрокоптер будет тянуть влево. Поэтому необходим механизм, который бы отслеживал такие отклонения и исправлял их. Характерной особенностью таких ошибок является то, что они проявляют себя со временем. Поэтому здесь можно ввести интегральное слагаемое. Оно хранит сумму всех ошибок error по всем итерациям цикла обработки. Если после стабилизации квадрокоптера существует error, например 1 градус, то через 10 циклов регулирования по 0.1сек. сумма примет значение 1+0.8+0.7 +... <10 градусов. Если результат умножить на цикл регулирования, в данном примере 0.1сек, то получим число < 1. Таким образом здесь имеем дело с интегральной величиной:

Или в интегральной форме

Окончательная формула для пропорционально-интегрально-дифференциального регулятора имеет вид:

force = P * error +I *Dt S error + D *(error-errorprevious)/Dt

или в интегральной форме:

которая совпадает с известной формулой PID - регулятора[1].

Ниже представлена практическая настройка PID - регулятора квадрокоптера.

Р является основополагающей частью PID-регулятора, которая позволяет обеспечить хорошие летные характеристики. Практически вначале выполняют базовую настройку PID на земле при параметрах P, I, D, заданных по умолчанию. Для этого, удерживая квадрокоптер в руках:

1. Постепенно прибавляют газ, стараясь добиться невесомости коптера, когда сила тяжести уравновешивается подъёмной силой.

2. При наклонении и повороте коптера в разные стороны должна чувствоваться реакция, направленная на компенсирование прилагаемой силе;

3. Примерно на 10% каждый раз увеличивают значение коэффициента Р до тех пор, пока не появиться ощущение, что довольно сложно противостоять реакции коптера;

4. На последнем этапе выполняют раскачивание коптера с увеличением Р до тех пор, когда начнутся осцилляции (частые вибрации) с последующим небольшим уменьшением Р (до исчезновения осцилляций). Далее это выполняется для оси YAW.

Дальнейшие настройки выполняются в воздухе.

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

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

Увеличение значения P приводит к большей устойчивости /стабильности до тех пор, пока слишком большое значение Р не приведет к осцилляциям и потере контроля над коптером (потере управления). При большом P заметна очень большая силу воздействия, противодействующую любому изменению положения коптера.

Уменьшение значения P приведет к дрейфу в управлении. Если P слишком мало, коптер становится очень нестабильным. Коптер будет меньше сопротивляться любым попыткам изменить его положение.

Пилотажные (акробатические) полеты требуют чуть более высоких Р, аккуратные и плавные полеты – чуть более низкого Р.

I – это период времени, в течение которого записываются и усредняются угловые отклонения.

Величина силы, прикладываемой для возврата в исходное положение, увеличивается, если с течением времени угловое отклонение сохраняется, пока не будет достигнута максимальная величина усилия. Более высокое значение I способствует улучшению курсовой устойчивости.

Увеличение значения I улучшает способность удерживать начальное положение и уменьшает дрейф, но так же увеличивает задержку возврата в начальное положение и уменьшает влияние Р.

Уменьшение значения I улучшает реакцию на изменения, но увеличивает дрейф и уменьшит способность удерживать положение. Так же увеличивает влияние Р.

Пилотажный режим требует меньших значений I. Аккуратное плавное руление требует больших значений I.

D – это скорость, с которой мультикоптер вернется в начальное положение. Высокие D означают, что мультикоптер вернется в первоначальное положение очень быстро.

Увеличение значения D увеличивает скорость, с которой все отклонения будут скомпенсированы. Количество колебаний при возврате в исходное положение уменьшается. Но здесь увеличивается вероятность появления перерегулирования и осцилляций.

Уменьшение D увеличивает количество колебаний при возврате в начальное положение. Возврат в начальное положение происходит медленнее.

При пилотажном режиме увеличивают D. Аккуратные плавные полеты требуют уменьшения D. Вышесказанное можно промоделировать на виртуальном PID - регуляторе, который расположен на страничке [2].

Практическая настройка для реализации стабильных полетов состоит в следующем:

1. Увеличивают значение Р до появления осцилляций, затем его немного уменьшают;

2. Изменяют I пока коррекция после отклонения коптера не станет недопустимо слабой, затем его немного увеличивают;

3. Уменьшают D до тех пор, пока стабилизация после резких движений органами управления не станет слишком медленной. После этого D немного увеличивают.

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

Для экспериментальной модели рассматриваемого квадрокоптера на раме F450, параметры PID - регулятора представлены на рисунке 2, которые были установлены в программе mission planner[3] для прошивки MegapirateNG 3.1.5R2.

Рис.2. Значения параметров PID - регулятора

Выводы.

1. Рассмотрена практическая настройка PID - регулятора на прошивках MegapirateNG 2.7R4, 2.8R3 и MegapirateNG 3.1.5R2 для полетного контроллера на основе Arduino Mega256. Выявлен более устойчивый полет коптера на базе дефолтных настроек для прошивки MegapirateNG 3.1.5R2.

2. Показано назначение каждого параметра PID - регулятора при получении его формулы применительно для коптера в двумерном пространстве, где у него есть только один угол - угол крена.

3. Дана практическая рекомендация настройки PID - регулятора для мультироторных систем.

Литература.

1. PID controller. [Electronic resource]. - Mode of access: https://en.wikipedia.org/wiki/PID_controller, 2017.

2. Ефимов И. И еще о ПИД - регуляторах. [Electronic resource]. - Mode of access: http://copterpilot.ru/articles/o-pid-regulyatorax-2/, 2014.

3. Mission Planner Home. [Electronic resource]. - Mode of access: http://ardupilot.org/planner/, 2017.

4. Ефимов И. Программируем квадрокоптер на Arduino (часть 1). [Electronic resource]. - Mode of access: https://habrahabr.ru/post/227425/, 2014.

Написана 09.02.2017