Что такое ПИДы и с чем их едят

Решил написать немного о ПИДах. Так как многие не правильно трактуют их 😃
Не забываем что в современных прошивках несколько ПИД-регуляторов (контуры управления): один работает с гироскопом и держит заданный угол (режим Акро, про него я и написал ниже), другой работает с акселерометром и держит уровень квадрика чтобы висел в горизонте (это в режиме стабилизации Angle и Horizon) и еще один работает с GPS для удержании позиции и высоты (этих режимов нет в прошивке BetaFlight, а вот в iNav есть).
Характерная ошибка трактовки параметра Д в ПИД регуляторе - многие считают что Д отвечает за скорость поворота квадрика и все из за слова “Дифференциальная”.
Д - компенсирует большое П. Д и П связаны между собой.
Общая формула управления:

U = P*E - D*dE/dt + I*SUM(E)

где E - ошибка управления - разница между требуемым углом отклонения и реальным
dE - разница ошибки между предыдущим измерение и текущим за время dt (дифференциал)
SUM - это функция суммирования ошибки (интеграл)
P - коэффициент пропорциональной составляющей регулятора
D - коэффициент дифференциальной составляющей регулятора
I - коэффициент интегральной составляющей регулятора
U - управляющее напряжение подаваемое на мотор (привод)
Объясню Д: П - прямо зависит от ошибки. Например нам надо отклониться на 20 градусов. П = 10, то по формуле (если Д и И равны 0) сигнал на моторы будет равный U=P*20 - и это напряжение подается на мотор (условно, так как моторы у нас трехфазные и регулятор это за нас это обеспечивает). Поэтому мотор старается повернуть наш квадрик на 20 градусов как можно быстрее. Когда квадрик у нас повернется на 10 градусов то сигнал на мотор будет уже U = P*10. И так приближаясь к нужному углу управляющее напряжение падает. Но квадрик обладает инерцией и поэтому когда управляющее напряжение будет равно 0 (U = P * 0 - нет ошибки управления), то квадрик по инерции продолжит свое движение и тогда угол ошибки станет -5 градусов например и тогда управляющее напряжение будет U = P * -5 и квадрик начнет обратное движение к нужному углу. И вот как раз возникает так называемое перерегулирование (на просторах форума - осцилляции). Это возникает когда большое P. Если P маленькое то перерегулирования не будет, но время выхода на нужный угол будет большое. Для того чтобы квадрик был не “вялым” а “бодрым” нам нужно большое P, но в этом случае у нас будет перерегулирование и осцилляции. Это можно видеть на многих квадриках - когда резко изменяете угол то квадрик делает пару колебательных движений и успокаивается - это значит большое P.
Чтобы убрать осцилляции или перерегулирование решили ввести дифференциальный контур регулирования, который будет измерять скорость изменения ошибки управления (еще раз напомню что это разница между нужным углом и текущим положением квадрика) и будет уменьшать P управление когда объект будет приближаться к заданному углу. Т.е. когда у нас большое P то квадрик из-за инерции начнет медленно компенсировать ошибку, но потом наберет скорость и начнет быстро приближаться к нужному углу и вот тут в дело вступает Д компонента регулятора, чем быстрее уменьшается ошибка то больше будет Д составляющая и тем меньше будет управляющий сигнал на мотор: U = P*E - D*dE/dt - т.е. включается торможение квадрика заранее когда он приближается к нужному углу. В итоге P составляющая уменьшается за счет Д составляющей и не происходит перерегулирования - т.е. отсутсвие осцилляций. Поэтому когда нужно большое П чтобы квадрик был “бодрым” то нужно Д. Поэтому П и Д неразлучные друзья. Но при большом П все равно возникают осцилляции но их компенсирует Д, но не до конца и возникают высокочастотные осцилляции которые на глаз никогда не увидишь. Поэтому определить высокочастотные осцилляции можно по температуре моторов - если горячие (т.е. они трудились чтобы убрать перерегулирование, но П такое большое что им пришлось сильно трудиться) то нужно уменьшать Д и соотвественно уменьшать и П
Теперь что такое И: вроде бы все нормально П и Д справились, но у системы есть ошибки: ошибка измерения угла, смещенный центр тяжести, разная производительность моторов и пропов. Поэтому вроде бы система справилась с ошибкой - уменьшила ее до нуля, но на самом деле есть ошибка. Поэтому вводят И составляющая котора складывает все ошибки и добавляют ее в управляющий сигнал для компенсации конструктивных особенностей системы. Вот и получается формула:

U = P*E - D*dE/dt + I*SUM(E)

Теперь как все это настраивается. В идеальном случае в начале убирают Д и И составляющие регулятора, т.е. делают коэффициенты Д и И равными 0 (ноль). И ставят какое то маленькое значение П (чисто имперически - практически). И начинают настройку П составляющей. Увеличивают П до тех пор пока не начнется перерегулирование (не будет осцилляций). Как только началась осцилляция, то останавливаются и начинают увеличивать Д до тех пор пока осцилляции не уйдут. Т.е. Д справилось со своей задачей и при высоком П убрала перерегулирование. Дальше снова увеличивают П, чтобы повысить скорость реакции системы, чтобы квадрик стал “бодрым” а не “вялым” и увеличивают до тех пор пока не будут осцилляций, потом увеличивают Д чтобы их убрать. И так делают до тех пор пока не будет реакции при увеличении П и Д. После того как достигли приемлемого управления, немного уменьшают значения П и Д примерно на 5%. Чтобы не было работы системы на грани устойчивости. После всего этого начинают крутить И. Вот здесь сложнее. Здесь нужно смотреть реакцию системы в дальней перспективе. Нужно смотреть как система себя ведет как она вышла на заданный угол и как долго она исправляет ошибку конструкции. Настройку И не смогу объяснить По видео которые я смотрел, говорят что И проявляется при спусках коптера. Если при спуске коптер раскачивает, то нужно увеличивать И. В принципе верно, если посмотреть на формулу то И работает на сумму ошибки управления. И если сумма ошибки есть то на нее нужно реагировать. Если коэффициент И маленький то реакция на сумму ошибки будет “вялой” если большой, то “резкой” и возможны опять колебания (осцилляции). Для меня пока И очень тяжела в настройке. Так как могут влиять внешние факторы - например порывы ветра и вся настройка И на смарку
Надеюсь объяснил понятно.
А вот картинка которая очень ясно и понятно показывает влияние коэффициентов ПИД-регулятора на выходной сигнал:

Лучше один раз увидеть чем сто раз прочитать 😃
В подтверждение выше сказанного Джошуа только что выложил два видео объясняющие ПИДы.
Первое видео показывает что бывает когда увеличиваете П:

Второе видео показывает как при высоком П (около 70) как квадрик ведет себя при увеличении Д:

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

  • 5422
Tags:
Comments
mossvit

Автор конечно обидится, и ещё парочку его фоловеров плюнут в меня, но:
Наверное правильная статья, но на 15 строке закрыл текст, зевнул и покинул топик автора…
Статья написано мутно, неудобоваримо и излишне заумно.
========
========
Прошло пару часов после моего комментария. Автор явно работает над здравостью и удобством статьи. Надеюсь что через пару дней она примет внятный вид.
Ну и с “фоловерами” я не ошибся, их действительно оказалось парочка. 😁

RDL_Rider
mossvit;bt154169

Автор конечно обидеться и ещё парочку его фоловеров плюнут в меня, но:
Наверное правильная статья, но на 15 строке закрыл текст, зевнул и покинул топик автора…
Статья написано мутно, неудобоваримо и излишне заумно.

Ну раз вы за свои 52 года даже грамотно писать не научились, то да, данная статья для вас - перебор 😆
А мне понравилось, например.

Dynamitry

Спасибо. Ваша статья помогла привести знания в больший порядок!
А Борис слеп и жалок, как протухшая тарань! (с) Саша Черный.

Lazy

Интегральная часть всегда самая сложная, особенно в системах с малой инерционностью.

mil-lion
Lazy;bt154179

Интегральная часть всегда самая сложная, особенно в системах с малой инерционностью.

Вот да И для меня очень тяжело объяснить. Но недавно на форуме мы вроде пришли к пониманию и чуть позже выражу мысль более правильно. Просто П и Д легко настроить, это как карбюратор на Москвиче отрегулировать. А вот П не совсем тривиальная для осмысления. Особенно в системах с малой инерцией.
Спасибо за понимание.

Lazy

Я очень серьёзно влез на грабли с настройкой I канала газа в лёгком электролёте. Вот там были танцы, всем на зависть. Но в результате полётное время с 25-ти минут выросло до 80-ти.

Радиомоделист

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

Виктор

Для не профессионала статья написана очень даже хорошо.
Немного скажу про интегральный коэффициент. Как вы видите в формуле присутствует SUM(E) - суммарная ошибка , и нигде не обговаривается за какой период времени эта ошибка посчитана, а она может быть и суточной и миллисекундной. Она определяется постоянной временем интегрирования, а этот параметр ни один производитель не указывает. Оптимально, если бы эта ошибка суммировалась бы за время трёх периодов (асциляций). А если он на порядок больше (или меньше), то влияние этого коэффциента вы и не заметите.

biver72

Прекрасно автор обьяснил,
“На пальцах”, суть всех П,И,Д -ов.
Картинку годно запостил,
Мне стало всё понятно.😃😃😃

biver72
Радиомоделист:

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

Вот и у меня так же. Просто и понятно, не перегружая математикой.

mil-lion
Виктор;bt154187

Немного скажу про интегральный коэффициент. Как вы видите в формуле присутствует SUM(E) - суммарная ошибка , и нигде не обговаривается за какой период времени эта ошибка посчитана, а она может быть и суточной и миллисекундной. Она определяется постоянной временем интегрирования, а этот параметр ни один производитель не указывает. Оптимально, если бы эта ошибка суммировалась бы за время трёх периодов (асциляций). А если он на порядок больше (или меньше), то влияние этого коэффциента вы и не заметите.

Интересный вопрос. Надо будет посмотреть исходный код BetaFlight. А так должно быть с момента арминга квадрика, когда началось управление объектом. На то она и интегральная чтобы суммировать за все время пока идет управление.
Вот по исходникам BetaFlight интересно смотреть комментарии. Для некоторых осей управления, например yaw не используется Д составляющая.

rins

I настроить просто.
в БФ.
скажем так. ниже дефолта уменьшать точно не надо.
можно чуть поднять. но тут надо смотреть. если значение большое. коптер будет как бы залипать.
т.е. неохотно сходить с траектории. и управлять им будет в тягость. движения его “роботизированы”
низкие значения I делают хорошую отзывчивость. даже на незначительные движения стиков. ощущаться это будет. как “чуткое управление”
но если значения слишком низки. коптер не будет держать траекторию. и куда нибудь заваливаться.
по опыту БФ. или оставить дефолт. или поднять на 5-10 единиц.

dvd-media

Отличная статья. Я бьюсь с ПИДами уже не первый месЯц и всё никак не победЮ. Уже стал пытаться искать инф. как по логам понять что куда, но информация только англоязычная (Джошуа какойто знаменитый)… Ничего не понятно. Вот бы побольше материала про эти гадкие ПИДы ))

Strijar

Про I можно понять насколько хорошо квадрик держит выставленный угол. Например в прямолинейном полете. Если “уплывает” - угол увеличивается или уменьшается, значит I мало. На одном видео просто вешали квадрик на 2 растяжки и ставили его под 45 градусов стиками. При демонстрации маленького I он постепенно возвращался в горизонт.

mil-lion
Strijar;bt154200

Про I можно понять насколько хорошо квадрик держит выставленный угол. Например в прямолинейном полете. Если “уплывает” - угол увеличивается или уменьшается, значит I мало. На одном видео просто вешали квадрик на 2 растяжки и ставили его под 45 градусов стиками. При демонстрации маленького I он постепенно возвращался в горизонт.

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

Andry_M
mossvit;bt154169

Наверное правильная статья, но на 15 строке закрыл текст, зевнул и покинул топик автора…
Статья написано мутно, неудобоваримо и излишне заумно.

Дочитал до конца.

  1. Автор переврал все, что можно. Начитая с Д и заканчивая И. Позор! 😃

  2. Что на самом деле Д и И составляющие легко ищется в гугле. Любой прочитает и поймет. Тем более те, у кого есть багаж за спиной.

  3. Просто снесло мозг, когда я узнал, что оказывается Д тормозит поворот и тем самым уменьшает перерегулирование… 😃

Статья вышла раньше срока. Сегодня еще не пятница. 😁 Ушел нафиг!

Strijar
Andry_M;bt154211

Автор переврал все, что можно. Начитая с Д и заканчивая И.

Видимо плохо прочитали. Все правильно написано.

Lazy
Andry_M;bt154211

Дочитал до конца.

Очень уместна будет цитата из творчества одного известного нацистского функционера…

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

dvd-media
Andry_M;bt154211

Статья вышла раньше срока. Сегодня еще не пятница. 😁 Ушел нафиг!

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

dvd-media

Может кто подскажет (в тему), нормально ли то, что с рамой 470мм параметр Д чуть ли не в два раза выше П? Иначе как-то слишком активно потряхивает на ветру в точке. Без навигации вполне нормально вроде, не трясёт но даже немного более вяло реагирует на резкие движения стика. Моторы холодные.

mil-lion
dvd-media;bt154215

Может кто подскажет (в тему), нормально ли то, что с рамой 470мм параметр Д чуть ли не в два раза выше П? Иначе как-то слишком активно потряхивает на ветру в точке. Без навигации вполне нормально вроде, не трясёт но даже немного более вяло реагирует на резкие движения стика. Моторы холодные.

А моторы не горячие? Первый признак большого Д - горячие моторы.
А потрагивать от ветра может из-за низкого П. Коптер плохо сопротивляется отклонению от заданного угла.
Но не забываем что в прошивках несколько ПИД-регуляторов: один работает с гироскопом и держит заданный угол (режим Акро, про него я и писал), другой работает с акселерометром и держит уровень квадрика чтобы висел в горизонте (это в режиме стабилизации Angle и Horizon) и еще один работает с GPS для удержании позиции и высоты (этих режимов в прошивке БФ нет а вот в iNav есть). И вот поэтому у Вас может нужно крутить другие значения ПИДов 😃

dvd-media
mil-lion;bt154220

А моторы не горячие? Первый признак большого Д - горячие моторы.

Про моторы я написал - холодные, даже с такими пидами. И П задирал до 130… но заметной разницы с 90 не заметил.
По другим ПИДам понимаю, что что-то еще надо крутить, но меняя наобум некоторые параметры (а описания в общем то нет), или хуже становятся другие функции (возврат домой не точный например) или не вижу толка.
Сложно всё 😒

gorbln

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

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

mil-lion
gorbln:

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

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

Виктор
gorbln:

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

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

sirQWERTY

Внесу и я свои 5 копеек. По поводу составляющей I. На абсолютную истину не претендую, опишу, как я ее понимаю.
Эта составляющая имеет смысл в системах с наличием постоянно изменяющегося “задания”, либо с наличием постоянно изменяющихся внешних воздействий, которые регулятор призван отработать. Проще всего работу этой составляющей понять, рассмотрев регулятор, который корректирует положение точки на оси в соответствии с заданием, где задание представляет из себя координату (точку), движущуюся с какой-то скоростью. Говоря по-простому, есть ось, по ней движется точка задание, регулятор должен добиться соответствия управляемой им точки с точкой задания. Из за того, что точка задания всегда движется с какой-то скоростью, при нулевой I составляющей управляемая регулятором точка никогда не догонит точку задания, как не регулируй P и D составляющие, либо будет постоянно прыгать вперед-назад по отношению точки задания.
Составляющая I будет постепенно компенсировать это отставание, суммируя каждую итерацию работы регулятора текущее отставание, умноженное на коэффициент I. Интегральная составляющая пропорциональна скорости перемещения точки задания и со временем накопленной ошибки будет достаточно, чтобы скомпенсировать постоянное отстование.
Выше писали про то, что не плохо было бы регулировать время, через которое система будет суммировать накопленную ошибку. Косвенно на этот параметр можно влиять, изменяя коэф. I. Увеличив его вдвое, Вы как бы уменьшите частоту дискретизации, и соответственно, уменьшив его - увеличите.