ПИД-регулятор 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