Найти тему
ZDG

Собираю квадрокоптер #8. PID

Оглавление

Предыдущие подборки: Квадрокоптер в деталях, Подбор компонентов, Введение

Предыдущие части: Проблемы при запуске, Калибровки и режимы, Настройка моторов, Проблемы размещения, Порт приёмника, ELRS, Прошивка контроллера, Запчасти

Первый запуск прошёл штатно. Квадрокоптер взлетел, слушался управления и вёл себя адекватно. Но это было на батарее 3S. Хотя тяга была расчётной, мне показалось, что её слегка не хватает, и тогда я поставил батарею 4S.

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

Причина такого поведения не вполне понятна. Всё-таки напряжение батареи увеличилось не в 2 раза, а всего на 3.7 вольта.

Но первое, что надо проверить в таких случаях – это PID-контроллер.

Что такое PID

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

Ошибка

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

PID-контроллер работает в цикле и на каждом шаге цикла измеряет ошибку и стремится свести её к нулю.

P

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

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

Если же сделать P слишком большим, то изменения будут происходить быстро, но из-за высокой скорости и инерции будет происходить "перелёт". То есть мы скомандовали системе повернуться на 30 градусов, а она слишком сильно разогналась и повернулась на 45. Возникла ошибка в 15 градусов.

Эту ошибку контроллер видит и пытается компенсировать. Тогда он применяет воздействие в обратном направлении, чтобы вернуться в нужное положение. Но так как P слишком высокий, опять происходит перелёт, и коптер попадает в положение не 30 градусов, а 20 градусов.

Тогда контроллер опять пытается компенсировать ошибку. Возникают колебания вокруг целевого значения. Иногда они угасающие, то есть в каждом цикле становятся всё меньше и меньше, пока совсем не прекращаются. Иногда наоборот они увеличиваются и вводят систему в разнос. Коптер становится полностью неадекватным и может просто улететь вверх, жутко трясясь.

Проблема в том, что даже правильное значение P, которое не порождает колебаний – или слишком маленькое, или не удовлетворяет требованиям управления. Ведь система стартует быстро, но в нужную точку она должна прибыть с нулевой скоростью. Значит, движение, начавшись быстро, будет плавно тормозить до нуля. А нам нужно быстрое начало движения, затем движение с постоянной скоростью, и затем быстрая остановка движения.

D

Далее я должен предупредить, что нифига не разбираюсь в этой формуле,

-2

но задача – объяснить, как параметры влияют на управление. Параметр D это что-то противоположное P.

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

Величина D подбирается в зависимости от величины P.

I

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

Регулировать его нужно в последнюю очередь.

Приведу пример.

Автомобиль едет в колее. Ему нужно выехать из колеи. Для этого на колесо нужно приложить повышенное усилие. Но когда колесо оказывается вне колеи, это усилие уже чрезмерно. То есть, отрегулировав допустим P для выезда из колеи, дальше ездить с таким P будет плохо.

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

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

Что делать

Так как в моём случае коптер на 3S летает адекватно, а на 4S слишком резко, я делаю вывод, что дополнительное напряжение приводит к более сильным воздействиям. Значит, нужно в первую очередь понизить параметр P, чтобы система не реагировала так резко. И также отрегулировать параметр D, чтобы добиться нужного отклика и скорости управления.

Чтобы отрегулировать PID, нужно зайти в конфигуратор. Но придётся делать это несколько раз: подключать контроллер к USB, задавать PID, отключать контроллер от USB, запускать коптер, смотреть что получилось, снова подключать и т.д.

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

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

Поэтому следующим этапом приделаю видеопередатчик, ведь он всё равно будет нужен.

А пока предлагаю посмотреть коротенькое видео, которое наглядно демонстрирует работу PID-контроллера:

Читайте дальше: