ПИД-регулятор Quadcopter

контекст

Моя задача - спроектировать и построить ПИД-регулятор скорости для микроквадрокоптера, а не летать в помещении. Помещение, в котором летает квадрокоптер, оснащено высокоточной системой слежения в помещении, которая позволяет получать данные о скорости и положении квадрокоптера. Получившаяся система должна быть способна принимать целевую скорость для каждой оси (x, y, z) и управлять квадрокоптером с этой скоростью.

Входами управления для квадрокоптера являются углы крена / тангажа / рыскания и процент тяги для высоты.

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

К сожалению, потому что это мой первый контакт с теорией управления, я не уверен, что я иду в правильном направлении.

Вопросы

  • Я понимаю базовый принцип ПИД-регулятора, но мне все еще неясно, как он может преобразовать скорость (м / с) в крен / шаг / рыскание (радианы) только путем суммирования ошибок и умножения на константу? Да, скорость и крен / шаг прямо пропорциональны, так значит ли это, что умножение на правильную константу дает правильный результат?

  • В случае вертикального регулятора скорости, если скорость установлена ​​на 0, квадрокоптер должен просто поддерживать свою высоту без подъема или спуска. Как это можно интегрировать с ПИД-регулятором, чтобы значения тяги не были равны 0 (должны продолжать зависать, а не падать), когда ошибка фактически равна 0? Должен ли я добавить постоянный член к выводу?

  • Как только система будет внедрена, каков будет хороший подход к настройке параметров усиления ПИД? Ручная пробная версия и ошибка?

  • Следующим шагом в разработке системы является дополнительный уровень ПИД-регуляторов положения, которые принимают в качестве заданного значения желаемое положение (x,y,z), измеренные положения обеспечиваются системой внутреннего слежения, а выходы - x/y. /z скоростей. Это хороший подход? Причиной разделения этих уровней управления PID является то, что проект является частью более широкой структуры, которая способствует повторному использованию. Было бы лучше просто использовать один слой ПИД-контроллеров, которые непосредственно принимают координаты положения в качестве заданных значений и выходных значений крена / тангажа / рыскания / тяги?

3 ответа

Решение
  • Это основная идея. Теоретически вы можете получить несколько констант в системе для преобразования из одной единицы в другую. В вашем случае ваши константы P,I, D будут неявно включать правильные коэффициенты преобразования. например, если в идеализированной системе вы хотите контролировать угол с помощью обратной связи с P=0,5 в градусах, но все, к чему у вас есть доступ, это скорость, и вы знаете, что 5 градусов наклона дают 1 м / с, тогда вы бы запрограммируйте контроллер P на умножение измеренной скорости на 0,1, и результатом будет управляющий вход для угла.
  • Я думаю, что лучший способ сделать это - реализовать ПИД-регулятор SISO не по высоте (h), а по вертикальной скорости (dh/dt) с процентом тяги в качестве выхода, но я не уверен в этом.
  • К сожалению, если у вас нет предварительных знаний о параметрах, это будет единственный путь. Я рекомендую окружающую среду, которая не нанесет большого ущерба, если квадрокоптер выйдет из строя...
  • Это звучит как хороший путь

Мой блог может быть интересен для вас: http://oskit.se/quadcopter-control-and-how-to-really-implement-it/

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

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

Начните с малого, соберите работающий вертолет с помощью готового контроллера, а затем напишите свой собственный. Затем проверьте и настройте его и экспериментируйте. Вы никогда не будете по-настоящему понимать ПИД-контроллеры, если не попробуете создать коптер самостоятельно. Моя библиотека разработки программного обеспечения на "голом железе" может помочь вам в написании программного обеспечения, не беспокоясь о реализации драйвера оборудования. Ссылка: https://github.com/mkschreder/martink

Подход был правильным. Это заняло некоторое время, но после некоторых проб и ошибок это сработало. Результаты можно увидеть здесь: https://www.youtube.com/watch?v=kC0z7a7aisg

Если вы используете язык программирования Python, вы можете использовать фреймворк ddcontrol. Вы можете оценить передаточную функцию по данным SISO. Для этого можно использовать функцию tfest. А затем вы можете оптимизировать ПИД-регулятор с помощью функции pidopt.

Другие вопросы по тегам