В продолжение вопроса, который я задал здесь: Нестабильность квадрокоптера с простым взлетом в автономном режиме ... Я хотел бы задать несколько вопросов о реализации базового PID для квадротора, управляемого модулем APM 2.6. (Я использую кадр из 3DRobotics)
Я сократил всю систему управления до двух блоков PID, один для управления креном, а другой для контроля высоты тона (рыскание и все остальное ... я подумаю о них позже).
Я тестирую эту установку на буровой установке, которая состоит из свободно вращающейся балки, где я связал два плеча квадротора. Два других могут свободно двигаться. Итак, я на самом деле проверяю одну степень свободы (крен или шаг) за раз.
Проверьте изображение ниже: здесь A, B обозначает свободно вращающийся луч, на котором установлена установка.
Благодаря тщательной настройке параметров P и D, мне удалось достичь продолжительного полета около 30 секунд.
Но под «устойчивым» я имею в виду тест, в котором дрон не опрокидывается в одну сторону. Рок устойчивый полет все еще не где-то в поле зрения, и более 30 секунд полета также выглядит довольно сложно. Это колеблется с самого начала. К тому времени, когда он достигает 20-25 секунд, он начинает наклоняться в одну сторону. В течение 30 секунд он отклоняется в одну сторону с недопустимым краем. Достаточно скоро я нахожу это с ног на голову
Что касается самого кода PID, я вычисляю пропорциональную ошибку из «дополнительного фильтра» данных гироскопа + акселерометр. Интегральный член равен нулю. Термин P составляет около 0,39, а термин D составляет 0,0012. (Я не использую библиотеку Arduino PID специально, просто хочу реализовать здесь один из моих собственных PID.)
Посмотрите это видео, если хотите посмотреть, как оно работает.
http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [Да, установка довольно древняя! Я согласен. :)]
Пожалуйста, дайте мне знать, что я могу сделать, чтобы улучшить стабильность на этом этапе.
@Ian: Из многих тестов, которые я проводил с моей установкой, я делал графики для некоторых тестов, используя показания с последовательного монитора. Вот пример чтения Roll против «Motor1 & Motor2 - PWM input» (два мотора, контролирующие рулон):
Что касается ввода / вывода:
Входные данные: значения крена и тангажа (в градусах), полученные комбинацией акселерометр + гироскоп
Вывод: значения PWM для двигателей, полученные с помощью функции motor.write () библиотеки Servo.
разрешение
Я решил проблему. Вот как:
Суть вопроса заключалась в том, как я реализовал программу Arduino. Я использовал функцию write () для обновления серво-углов, которые принимают только целочисленные шаги в аргументе (или как-то реагируют только на целочисленный ввод, 100 и 100.2 дают одинаковый результат). Я изменил его на writeMicroseconds (), и это сделало вертолет значительно более устойчивым.
Я прибавлял обороты на одном двигателе, поддерживая при этом другое значение. Я изменил это, чтобы увеличить число оборотов в минуту в одном двигателе, одновременно уменьшая противоположный двигатель. Это своего рода сохраняет общую горизонтальную тягу без изменений, что может помочь мне, когда я пытаюсь удержать вертикальную высоту на этой вещи.
Я увеличивал число оборотов до максимального предела, поэтому квадрокоптер продолжал терять управление на полном газу. Там не было места для увеличения оборотов, когда он почувствовал наклон.
Я заметил, что один двигатель был слабее другого, я не знаю почему. Я жестко закодировал смещение во вход ШИМ этих двигателей.
Спасибо всем за поддержку.
Исходный код:
Если вам интересно, вот исходный код моей простой реализации PID : Исходный код PID
Пожалуйста, не стесняйтесь проверить это на своем оборудовании. Любые вклады в проект будут приветствоваться.
источник
Ответы:
источник
Я бы начал с чтения этого вопроса: каковы хорошие стратегии для настройки петель PID?
Если бы мне пришлось угадывать, я бы сказал, что у вас есть проблема в том, как устроен ваш бесплатный фильтр. Выключив двигатели квадрокоптера, вы должны наклонить раму вперед и назад и посмотреть, действительно ли указанные значения крена / тангажа являются точными.
Мне кажется, что между входом акселерометра и выходом вашего фильтра есть задержка - колебание можно объяснить поздней реакцией на входные данные. Возможное переворачивание выглядит как возможная ошибка интеграции, которая накапливается с течением времени - другими словами, когда ваш квадрокоптер находится на его стороне, он фактически думает, что он зависает ровно.
(Обновление) Что касается вашего графика, тот факт, что скорость вашего двигателя продолжает увеличиваться (вместо того, чтобы оставаться сбалансированным), означает, что у вас есть ошибка где-то. Возможно, ваш Интегральный термин становится неограниченным, и вы должны указать разумный максимум для него.
источник
Ну, здесь может происходить много вещей ...
1) Правильно ли указаны ваши углы? шумный? Вы можете легко проверить это, вручную наклоняя квад и отслеживая выходящие значения.
2) в вашей собственной реализации PID есть ошибка. Вы можете использовать надежную реализацию для проверки своего кода.
3) Опоры, двигатели установлены неправильно.
4) ...
источник