Предыдущие подборки: Квадрокоптер в деталях, Подбор компонентов, Введение
Предыдущие части: Проблемы при запуске, Калибровки и режимы, Настройка моторов, Проблемы размещения, Порт приёмника, ELRS, Прошивка контроллера, Запчасти
Первый запуск прошёл штатно. Квадрокоптер взлетел, слушался управления и вёл себя адекватно. Но это было на батарее 3S. Хотя тяга была расчётной, мне показалось, что её слегка не хватает, и тогда я поставил батарею 4S.
Сразу же возникла проблема. Коптер стал очень резко реагировать на управление, раскручивая пропеллеры с бешеной силой. В результате я сломал один пропеллер.
Причина такого поведения не вполне понятна. Всё-таки напряжение батареи увеличилось не в 2 раза, а всего на 3.7 вольта.
Но первое, что надо проверить в таких случаях – это PID-контроллер.
Что такое PID
Это аббревиатура, где P означает Proportional, I – Integral, D – Derivative. PID-контроллер в данном случае это алгоритм в прошивке. Но PID-контроллеры могут быть реализованы и в материальном виде и используются во многих отраслях промышленности.
Ошибка
Предположим, что коптер находится в горизонтальном положении, а нам нужно, чтобы он повернулся на 30 градусов. Разница между текущим и целевым положением это ошибка.
PID-контроллер работает в цикле и на каждом шаге цикла измеряет ошибку и стремится свести её к нулю.
P
Первый параметр самый простой и понятный. Он называется пропорциональным, потому что сила коррекции пропорциональна величине ошибки. Например, если ошибка равна 30 градусов, то система приложит более мощное усилие, а если 5 градусов, то более слабое.
Для управления хватило бы всего одного воздействия P, но возникают неприятные побочные эффекты. Если сделать P слишком маленьким, то изменения будут происходить очень долго. Для коптера это означает следующее: ему нужно скорректировать своё положение, но коррекция происходит так долго, что просто не успевает.
Если же сделать P слишком большим, то изменения будут происходить быстро, но из-за высокой скорости и инерции будет происходить "перелёт". То есть мы скомандовали системе повернуться на 30 градусов, а она слишком сильно разогналась и повернулась на 45. Возникла ошибка в 15 градусов.
Эту ошибку контроллер видит и пытается компенсировать. Тогда он применяет воздействие в обратном направлении, чтобы вернуться в нужное положение. Но так как P слишком высокий, опять происходит перелёт, и коптер попадает в положение не 30 градусов, а 20 градусов.
Тогда контроллер опять пытается компенсировать ошибку. Возникают колебания вокруг целевого значения. Иногда они угасающие, то есть в каждом цикле становятся всё меньше и меньше, пока совсем не прекращаются. Иногда наоборот они увеличиваются и вводят систему в разнос. Коптер становится полностью неадекватным и может просто улететь вверх, жутко трясясь.
Проблема в том, что даже правильное значение P, которое не порождает колебаний – или слишком маленькое, или не удовлетворяет требованиям управления. Ведь система стартует быстро, но в нужную точку она должна прибыть с нулевой скоростью. Значит, движение, начавшись быстро, будет плавно тормозить до нуля. А нам нужно быстрое начало движения, затем движение с постоянной скоростью, и затем быстрая остановка движения.
D
Далее я должен предупредить, что нифига не разбираюсь в этой формуле,
но задача – объяснить, как параметры влияют на управление. Параметр 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-контроллера:
Читайте дальше: