Найти в Дзене
АТТИстация

PID настройки

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

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

Итак сегодня попробуем разобраться с тем, что же такое PID настройки и зачем они нужны...

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

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

Для многих устройств, использующих ПИД-регуляторы, существуют инструкции по настройке. Но чтобы легче ориентироваться в этом многообразии полезно понимать, как же внутри устроены эти регуляторы. Предлагаю вместе самим заново «изобрести» и «на пальцах» понять формулу ПИД-регулятора. Будем рассматривать квадрокоптер в двумерном пространстве, где у него есть только один угол — угол крена, и два мотора: левый и правый.

-2

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

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

Уровень газа поступает из приемника в контроллер. Обозначим его throttle. Если left и right — скорости вращения левого и правого моторов, то:

left = throttle + force, right = throttle - force,

где force — реакция квадрокоптера (усилие), которое создает момент вращения за счет того, что левый мотор вращается на force быстрее, чем газ, а правый — на столько же медленнее. force может принимать и отрицательные значения, тогда правый мотор закрутится быстрее. Если мы научимся вычислять эту величину на каждой итерации цикла обработки, значит мы сможем управлять квадрокоптером. Понятно, что force как минимум должно зависеть от текущего угла крена (roll) и желаемого угла крена (tar get_roll), который поступает с пульта управления.

Представим ситуацию: поступает команда «держать горизонт» (tar get_roll = 0), а квадрокоптер имеет крен влево:

Двухмерный квадрокоптер с креном влево. error — разность (ошибка) между tar get_roll и roll, которую контроллер стремится минимизировать.
Двухмерный квадрокоптер с креном влево. error — разность (ошибка) между tar get_roll и roll, которую контроллер стремится минимизировать.

Чем больше разность между желаемым углом крена и текущим, тем сильнее должна быть реакция, тем быстрее левый мотор должен закрутиться относительно правого. Если это записать с использованием наших обозначений:

force = P * error

P — коэффициент пропорциональности.

Чем он больше, тем сильнее будет реакция, тем резче квадрокоптер будет реагировать на отклонение от требуемого угла крена. Эта интуитивно понятная и простая формула описывает работу пропорционального регулятора. Чем сильнее квадрокоптер отклонился от требуемого положения, тем сильнее надо пытаться его вернуть. К сожалению, эту формулу придется усложнить. Главная причина — перерегулирование.

За несколько десятков миллисекунд (несколько итераций цикла обработки) под воздействием пропорционального регулятора квадрокоптер вернется в требуемое (в данном случае горизонтальное) положение. Все это время ошибка error и усилие force будут иметь один и тот же знак, хоть и становиться все меньше по модулю. Набрав какую-то скорость поворота (угловую скорость) квадрокоптер просто перевалится на другой бок, ведь никто его не остановит в требуемом положении. Все равно что пружина, которая всегда стремится вернуться в начальное положение, но если ее оттянуть и отпустить — будет колебаться, пока трение не возьмет верх.

По этой причине в пропорциональный регулятор нужно добавить еще одно слагаемое, которое будет тормозить вращение квадрокоптера и препятствовать перерегулированию (переваливанию в противоположную сторону) —имитация трения в вязкой среде: чем быстрее поворачивается квадрокоптер, тем сильнее надо пытаться его остановить, конечно, в разумных пределах. Скорость вращения (скорость изменения ошибки ) обозначим как spin, тогда:

force = P * error + D * spin

D — настраиваемый коэффициент

чем он больше, тем сильнее останавливающее усилие.

Скорость изменения любой величины — производная этой величины по времени:

-4

И вот пропорциональный регулятор превращается в пропорционально-дифференциальный (пропорциональное слагаемое и дифференциальное):

-5

Ошибку error вычислить легко, ведь на каждой итерации мы знаем roll и tar get_roll; P и D — настраиваемые перед запуском параметры. Для вычисления производной (скорости изменения error) необходимо хранить предыдущее значение error, знать текущее значение error и знать время, которое прошло между измерениями (период регулирования). И вот она — физика шестого класса школы (скорость = расстояние / время):

-6

dt — период регулирования; error previous — значение ошибки с предыдущей итерации цикла регуляции. Кстати, эта формула — простейший способ численного дифференцирования, и он нам здесь вполне подойдет.

Теперь у нас есть пропорционально-дифференциальный регулятор в плоском «бикоптере», но осталась еще одна проблема. Пусть левый край будет весить чуть больше правого, или, что то же самое, левый мотор работает чуть хуже правого. Квадрокоптер чуть наклонен влево и не поворачивается обратно: дифференциальное слагаемое равно нулю, а пропорциональное слагаемое хоть и принимает положительное значение, но его не хватает, чтобы вернуть квадрокоптер в горизонтальное положение, ведь левый край весит чуть больше правого. Как следствие — квадрокоптер будет все время тянуть влево.

Необходим механизм, который бы отслеживал такие отклонения и исправлял их. Характерной особенностью таких ошибок является то, что они прявляют себя со временем. На помощь приходит интегральное слагаемое. Оно хранит сумму всех ошибок error по всем итерациям цикла обработки. Как же это поможет? Если пропорционального слагаемого не достаточно, чтобы исправить маленькую ошибку, но она все равно есть — постепенно, со временем, набирает силы интегральное слагаемое, увеличивая реакцию force и квадрокоптер принимает требуемый угол крена.

Тут есть нюанс. Предположим error равна 1 градусу, цикл регулирования — 0.1с. Тогда за одну секунду сумма ошибок примет значение 10 градусов. А если цикл обработки — 0.01с, то сумма наберет аж 100 градусов. Чтобы за одно и тоже время интегральное слагаемое набирало одно и тоже значение при разных периодах регулирования, полученную сумму будем умножать на сам период регулирования. Легко посчитать, что в обоих случаях из примера получается сумма в 1 градус. Вот оно — интегральное слагаемое (пока без настраиваемого коэффициента):

-7

Эта формула — не что иное, как численный интеграл по времени функции error в интервале от нуля до текущего момента. Именно поэтому слагаемое называется интегральным:

-8

где T — текущий момент времени.

Пришло время записать окончательную формулу пропорционально-интергрально-дифференциального регулятора:

-9

где I — один из настраиваемых параметров, которых теперь трое: P,I,D.

-10

ПИД регуляторы - важная часть полётного контроллера, без их использования квадрокоптер летал бы непредсказуемо. Они настраиваются индивидуально для каждого квадрокоптера.

ВЫВОД

Пропорциональная составляющая (P) в PID-регуляторе отвечает за немедленную реакцию на отклонение от заданного значения. Когда значение контролируемой величины отличается от желаемого, регулятор выдаёт сигнал, который направлен на уменьшение этого отклонения.

P определяет, насколько жестко контроллер полета исправляет погрешности, чтобы достичь желаемой траектории полета. Этот параметр регулирует чувствительность и отзывчивость на изменения положения стиков. Чем выше это число, тем выше чувствительность и отзывчивость.

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

Можно снизить P, чтобы уменьшить колебания, но тогда дрон будет нечетко выполнять ваши команды, поэтому нужно будет поиграть с I и D, чтобы это компенсировать.

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

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

Это настройка жесткости при поворотах квадрокоптера.

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

Если значение I будет слишком высокое, то поведение квадрокоптера будет «деревянным», он будет слабо реагировать на ваши изменения положения стика на пульте. Никакие регуляторы оборотов, двигатели и пропеллеры не одинаковы, каждый на какую-то часть, но работает по-своему, поэтому когда вы даете резкий газ, а потом резко опускаете стик газа, один двигатель будет останавливаться быстрее другого и наоборот, все это вызывает провалы в положении квадрокоптера в воздухе, один двигатель еще имеет тягу, а другой уже нет.

Таким образом, I используется для исправления таких мелких проблем.

Дифференциальная составляющая (D) предсказывает будущее поведение системы на основе анализа скорости изменения ошибки. Это позволяет предотвратить большие отклонения от заданного значения, реагируя заранее на тенденции изменения контролируемой величины.

D работает как демпфер (глушитель, гаситель) и уменьшает чрезмерную коррекцию и регулирование коэффициента P. Увеличивая значение D, вы смягчаете воздействие Р, как бы добавляя «пружину» и также минимизирует вибрацию пропеллеров.

Если D будет слишком маленьким, то дрон будет как бы «отскакивать» назад в конце флипов и кренов, а также у вас будет сильная вибрация, вызванная вертикальным снижением.

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

Еще одним побочным эффектом от D является то, что квадрокоптер становится «мягким», то есть реакция на команды слишком вялая.

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

PID-регуляторы широко используются в различных областях, таких как промышленность, энергетика, транспорт и другие, где требуется точное и стабильное управление технологическими процессами.

Настройка PID квадрокоптера

Перед настройкой:

Всегда настраивайте свой квадрокоптер в режиме АКРО (ACRO)!

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

Нет правильного или неправильного способа настройки PID, все, что хорошо работает для вас — и есть правильная настройка. PID настраиваются индивидуально под каждого пилота.

Обычно начинают летать на стандартных настройках, а настройки в прошивках Betaflight и KISS хорошо работают для большинства квадрокоптеров.

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

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

За один раз настраивайте одну ось, сначала крен, потом высоту и затем рыскание. На каждой оси я настраиваю одно значение за раз, начиная с коэффициента усиления P, затем усиления D и, наконец I. Также вам нужно будет постоянно возвращаться к тонкой настройке, потому что одно значение может влиять на другое.

Yaw (рыскание) и PID

Самая сложная часть для понимания при настройке PIDов — ось рыскания. Но это также самая легкая часть, потому что вы можете оставить ее по умолчанию в Betaflight, и ваш квадрокоптер будет летать просто отлично.

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

Одним из симптомов плохого рыскания: вы делаете быстрое рыскание и в этот момент даете резкий газ, а дрон по оси (yaw) рыскания не остается на этом же уровне.

Хорошая работа по этой оси также зависит от качества оборудования: двигателей, пропеллеров и регуляторов оборотов. Ими определяется, на сколько быстро дрон сможет перемещаться по оси рыскания (yaw).

Чтобы улучшить рыскание, вы можете попробовать следующее:

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

2. использование двигателей с более высоким KV

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

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

P на Roll (крен)

С хорошими настройками P квадрокоптер будет очень точно реагировать по крену на положение стика.

Попытайтесь сделать резкий поворот, если Р слишком маленький, то дрон накренится в одну сторону, если слишком большой, вы получите сильную вибрацию и дёрганье. Если Р настроен правильно, то при совершении резких кренов — никаких вибраций и дёрганья не будет.

P на Pitch (высотa)

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

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

TPA

ТРА — это настройка для снижения эффективности усиления P при увеличении дросселя (газа). Сделайте резкий газ и посмотрите, есть ли какие-либо колебания и вибрация, если да, то увеличьте ТРА. Хорошо настроенный ТРА даст вам очень гладкий газ. Лучше не использовать ТРА выше 0,4.

D на Roll и Pitch (на крен и высоту)

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

I на Roll (на крен)

Наклоните (в полете, естественно) свой дрон вправо и влево и посмотрите, держит ли он этот наклон после того, как вы отпустили стик

напомню, все манипуляции в АКРО режиме

если он не держит угол наклона, то увеличьте значение I на Roll.

Сделайте тоже самое для наклона вперед и назад. Это также будет зависеть и от силы ветра.

Anti Gravity Gain

Летите по прямой и дайте пару раз (быстро) газа и посмотрите, сохраняет ли дрон положение. Если он опускается, то увеличьте это значение. Для меня идеальное значение было 3.

Yaw P (Рыскание Р)

Yaw PID необходимо настроить отдельно. Значения по умолчанию обычно хорошо работают на всех дронах.

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

Когда Р по рысканию слишком высок, то при рыскании квадрокоптер будет набирать высоту, в таком случае, Р следует уменьшить.

Yaw I (Рыскание I)

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

D-Term Set Point Weight

Если это значение слишком высокое, дрон будет менее отзывчивым и вести себя будет как робот, т.е. отвечать будет резко. Если значение будет низким, то отвечать на ваши действия будет более гладко и медленно. Я считаю, что хорошим значением будет 0,6.

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