Quadcopter PID-тюнинг

13

В продолжение вопроса, который я задал здесь: Нестабильность квадрокоптера с простым взлетом в автономном режиме ... Я хотел бы задать несколько вопросов о реализации базового 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» (два мотора, контролирующие рулон):

Roll против Motor PWM входа

Что касается ввода / вывода:

Входные данные: значения крена и тангажа (в градусах), полученные комбинацией акселерометр + гироскоп

Вывод: значения PWM для двигателей, полученные с помощью функции motor.write () библиотеки Servo.


разрешение

Я решил проблему. Вот как:

  1. Суть вопроса заключалась в том, как я реализовал программу Arduino. Я использовал функцию write () для обновления серво-углов, которые принимают только целочисленные шаги в аргументе (или как-то реагируют только на целочисленный ввод, 100 и 100.2 дают одинаковый результат). Я изменил его на writeMicroseconds (), и это сделало вертолет значительно более устойчивым.

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

  3. Я увеличивал число оборотов до максимального предела, поэтому квадрокоптер продолжал терять управление на полном газу. Там не было места для увеличения оборотов, когда он почувствовал наклон.

  4. Я заметил, что один двигатель был слабее другого, я не знаю почему. Я жестко закодировал смещение во вход ШИМ этих двигателей.

Спасибо всем за поддержку.


Исходный код:

Если вам интересно, вот исходный код моей простой реализации PID : Исходный код PID

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

metsburg
источник
1
Что является входом и что является выходом цикла?
Гай Сиртон
@GuySirton: обновил мой вопрос
метсбург
Что это за плоские секции в ваших командах мотора? Похоже, что-то насыщает. Вы бросаете изменения как непрерывную функцию, но ваши команды выглядят очень резкими. Кроме того, почему обе команды двигателя ШИМ дрейфуют, в то время как ваш вход по крену остается в том же диапазоне? Каков примерный график между прочим?
Гай Сиртон
1
Причина, по которой вы теряете контроль через 30 секунд, вероятно, связана с тем, что обе ваши команды дрейфуют. Я думаю, что вы пытаетесь контролировать разницу между командами, но вы не можете допустить, чтобы они продолжали дрейфовать.
Гай Сиртон
@GuySirton: они не смещаются вверх, я увеличиваю его с нуля, чтобы он достиг определенного устойчивого состояния в течение 3/4 с. Тем не менее, я думаю, что вы правы, когда говорите: «причина, по которой вы теряете контроль через 30 секунд, вероятно, связана с тем, что обе ваши команды дрейфуют». Если я не использую это постепенное приращение, если я фиксирую свой вход ШИМ на определенном уровне (ниже, чем максимальный вход, показанный выше), проблема потери контроля после 30 сек исчезнет.
Метсбург

Ответы:

6
  1. Похоже, ваш пропорциональный коэффициент слишком высок.
  2. Похоже, что вы постоянно увеличиваете число оборотов в минуту на одном двигателе, одновременно блокируя другой, чтобы система вращалась. Это не очень хорошая стратегия контроля, поскольку в конечном итоге они будут насыщать вас, и вы потеряете контроль. Также с увеличением времени ваша способность управлять системой уменьшается. Таким образом, вам нужна лучшая модель системы.
  3. Если вы имеете дело с № 1 и № 2, у вас будет более стабильная система, но вы, возможно, не будете довольны пропускной способностью управления. Чтобы справиться с этим, вам нужно сделать вашу систему более жесткой, что включает в себя избавление от любых задержек на стороне датчика вещей и на стороне контроля вещей.
Гай Сиртон
источник
3

Я бы начал с чтения этого вопроса: каковы хорошие стратегии для настройки петель PID?

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

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

(Обновление) Что касается вашего графика, тот факт, что скорость вашего двигателя продолжает увеличиваться (вместо того, чтобы оставаться сбалансированным), означает, что у вас есть ошибка где-то. Возможно, ваш Интегральный термин становится неограниченным, и вы должны указать разумный максимум для него.

Ян
источник
Я обновил свой вопрос значениями крена при наклоне вперед и назад. Я решил возможное переворачивание, понизив мой максимальный вход ШИМ. Кажется, что значения коррекции не работают при очень высоких оборотах. Я могу легко повернуть буровую установку рукой, когда работаю на высоких оборотах. При более низких оборотах я чувствую значительное сопротивление, и квадрокоптер, кажется, колеблется обратно в исходное положение (я думаю, это хорошо). Таким образом, проблема «переворачивания», вероятно, решается снижением оборотов (не знаю, взлетит ли дрон вообще или нет, надеюсь, это произойдет). Проблема колебаний все еще остается.
Метсбург
35±90
Ну, график не совсем для теста, показанного в видео. Как упоминалось выше, график взят из одного из многих тестов, которые я провел с этой настройкой, и я не помню точно, как выглядел этот конкретный случай. График просто для того, чтобы дать вам представление о том, как ведет себя входной и выходной отклики, и я также хотел установить, что между входом и выходом не так много лага (учитывая, что цикл работает на частоте 150+ Гц). Сопоставление видео с графиком может не иметь особого смысла. У меня нет точного набора данных для теста в видео.
Метсбург
Я понял, что график немного вводит в заблуждение, извините за это. Я постараюсь обновить график с более точным. На самом деле, поскольку я строил данные из последовательного порта, когда я создавал этот график, плата Arduino была привязана к ноутбуку. После определенного колебания мне пришлось вмешаться и замедлить колебания вручную. Вот почему вы видите, что он успокаивается при - 5 градусов, в то время как на самом деле его около 90 градусов. Я постараюсь обновить более точный график позже.
Метсбург
Еще одна вещь, которую я вижу на графике, заключается в том, что ваша комбинированная тяга всегда увеличивается. Это кажется неправильным.
Ян
1

Ну, здесь может происходить много вещей ...

1) Правильно ли указаны ваши углы? шумный? Вы можете легко проверить это, вручную наклоняя квад и отслеживая выходящие значения.

2) в вашей собственной реализации PID есть ошибка. Вы можете использовать надежную реализацию для проверки своего кода.

3) Опоры, двигатели установлены неправильно.

4) ...

dm76
источник
1) Я наклонил и проверил сообщенные углы, почти правильно, но определенно шумно. 2) очень вероятно ... фактически, я думаю, что это полностью суммирует: P 3) не очень вероятно, два по часовой стрелке, два против часовой стрелки ... я проверял реквизиты несколько раз + я думаю, что этот тип ошибки будет привели к диким ошибкам, выходящим за рамки контроля. 4) ....
Метсбург
4) ... неправильная настройка PID может усугубить ситуацию, чем если бы у вас не было PID вообще!
dm76
Да, я вижу это сейчас. Я буду работать над этим завтра. Мой первый план - использовать доверенную библиотеку PID, а второй - изменить выходной сигнал PID с сигналов PWM на коррекцию roll.pitch.
Метсбург