Настроювання PID квадрокоптерів


13

На продовження запитання я запитав тут: Нестабільність Quadcopter з простим злетом в автономному режимі ... Я хотів би задати кілька питань щодо впровадження базового PID для квадротора, керованого модулем APM 2.6. (Я використовую кадр від 3DRobotics)

Я позбавив всю систему керування лише до двох блоків PID, один для керування рулоном та інший для контролю кроку (позіхання та все інше ... я б про них подумав пізніше).

Я тестую цю установку на буровій установці, що складається з вільно обертового променя, в якому я зв'язав два кронштейни квадротора. Інші два вільно рухаються. Отже, я фактично випробовую один ступінь свободи (рулон чи крок) за один раз.

Перевірте зображення нижче: тут A, B позначає вільно обертається промінь, на якому встановлена ​​установка. введіть тут опис зображення

Ретельно налаштувавши параметри P і D, мені вдалося досягти тривалого польоту близько 30 секунд.

Але під терміном "стійкий" я маю на увазі тест, коли дрон не перекидається на одну сторону. Стійкий польоту все ще немає, де видно, і більше 30 секунд польоту також виглядає досить складно. Він коливається з самого початку. До часу, коли він досягне 20 - 25 секунд, він починає нахилятися в одну сторону. Протягом 30 секунд він нахилився на одну сторону з неприйнятним запасом. Незабаром я вважаю, що це відпочиває догори ногами

Що стосується самого PID-коду, то я обчислюю пропорційну помилку з "безкоштовного фільтра" даних про гіро + акселерометр. Інтегральний член встановлюється на нуль. Термін P дорівнює приблизно 0,39, а термін D - 0,0012. (Я спеціально не використовую PID-бібліотеку Arduino, просто хочу отримати тут реалізований один із моїх власних PID-файлів.)

Перевірте це відео, якщо хочете подивитися, як воно працює.

http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [Так, налаштування досить давнє! Я згоден. :)]

Будь ласка, дайте мені знати, що я міг би зробити для покращення стабільності на цьому етапі.

@Ian: З багатьох тестів, які я робив під час мого налаштування, я робив графіки для деяких тестів, використовуючи зчитування з послідовного монітора. Ось зразковий показник Roll vs "Motor1 & Motor2 - ШІМ-вхід" (два двигуни, що управляють рулоном):

Roll vs Motor ШІМ вхід

Що стосується вводу / виводу:

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

Вихід: значення ШІМ для двигунів, що постачаються за допомогою функції motor.write () сервісної бібліотеки


Дозвіл

Я вирішив проблему. Ось як:

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

  2. Я додавав обертів на одному моторі, одночасно підтримуючи інше на постійному рівні. Я змінив це, щоб збільшити обертів на одному двигуні, зменшивши при цьому протилежний двигун. Цей вид зберігає загальну горизонтальну тягу незмінною, що може допомогти мені, коли я намагаюся утримати вертикальну висоту цієї речі.

  3. Я підштовхував оберти до максимальної межі, тому квадрокоптер продовжував втрачати контроль при повному гасі. Не було місця для збільшення оборотів, коли він відчував нахил.

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

Дякую за всю підтримку.


Вихідний код:

Якщо вас цікавить, ось вихідний код моєї реалізації PID з голими кістками: вихідний код PID

Будь ласка, не соромтеся перевірити це на вашому обладнання. Будь-який внесок у проект буде вітатися.


1
Що таке вхід і який вихід циклу?
Гай Сіртон

@GuySirton: Оновлено моє питання
metsburg

Які ті плоскі ділянки у ваших рухових командах? Схоже, щось насичує. Ви прокручуєте зміни як неперервна функція, але ваші команди виглядають дуже різкими. Крім того, чому обидві моторні ШІМ-команди піднімаються вгору, поки вхід рулону залишається у тому, що схоже на однаковий діапазон? Який приблизний часовий графік до речі?
Гай Сіртон

1
Причина, через яку ви втрачаєте контроль через 30 секунд, ймовірно, пов'язана з тим, що обидва ваші команди піднімаються вгору. Я думаю, ти намагаєшся контролювати різницю між командами, але ти не можеш дозволити їм продовжувати дрейфувати.
Гай Сіртон

@GuySirton: Вони не піднімаються вгору, я збільшую його вгору від нуля, так що він досягає певного сталого стану протягом 3/4 сек. Однак я думаю, що ти маєш рацію, коли ти кажеш, що "ви втрачаєте контроль через 30 секунд, ймовірно, пов'язані з тим, що обидва ваші команди піднімаються". Якщо я не використовую цей поступовий приріст, якщо я зафіксую введення ШІМ на певному рівні (нижче максимального вводу, показаного вище), проблема втрати контролю через 30 сек.
metsburg

Відповіді:


6
  1. Схоже, ваш пропорційний приріст занадто високий.
  2. Ви, здається, постійно збільшуєте обертів на одному двигуні, замикаючись на іншому, щоб змусити систему обертатися. Це не є хорошою стратегією контролю, оскільки в кінцевому рахунку вони збираються як наситити, і ви втратите контроль. Також із часом збільшення вашої здатності командувати системою зменшується. Тож вам потрібна краща модель системи.
  3. Якщо ви маєте справу з №1 та №2, у вас буде стабільніша система, але ви, можливо, не будете задоволені пропускною здатністю керування. Для вирішення цього потрібно зробити вашу систему жорсткішою, що включає позбавлення від будь-яких відставань на стороні датчика і на контрольній стороні речей.

3

Спершу я прочитав би це запитання: Які хороші стратегії налаштування циклів PID?

Якби мені довелося здогадуватися, я б сказав, що у вас є проблеми в тому, як побудований ваш безкоштовний фільтр. Коли мотори квадрокоптера вимкнені, слід нахиляти кадр вперед-назад і бачити, чи справді вказані значення рулону / крок справді точні.

Мені здається, що між входом від акселерометра і виходом вашого фільтра є затримка - коливання можна пояснити пізньою реакцією на вхідні дані. Можливе перевернення виглядає як можлива помилка інтеграції, яка накопичується з часом - іншими словами, тоді як ваш квадрокоптер стоїть на його стороні, він насправді вважає, що він завис рівним чином.

(Оновлення) Що стосується вашого графіку, той факт, що швидкість двигуна продовжує збільшуватися (замість того, щоб залишатися збалансованим), означає, що ви десь помилилися. Можливо, ваш інтегральний термін зростає без обмежень, і вам слід вказати розумний максимум для цього.


Я поновлював своє запитання зі значеннями нахилу, коли нахилявся вперед і назад Я вирішив можливе перевернення, знизивши свій максимальний вхід ШІМ. Здається, що значення корекції не працюють при дуже високих оборотах. Я можу легко повернути бурову установку рукою, коли працюю на високому оберті. При меншій частоті обертів я відчуваю значний опір, і квадрокоптер, здається, коливається у вихідне положення (що добре, я думаю). Таким чином, проблема "перевертання", ймовірно, вирішується зниженням обертів (не знаю, чи злетить безпілотник взагалі чи ні, сподіваюся, що це станеться). Проблема коливань все ще залишається.
metsburg

-3-5±90

Ну, графік не відповідає тесту, показаному на відео. Як згадувалося вище, графік є одним із багатьох тестів, які я робив із цим налаштуванням, і я не пригадую, як саме виглядав цей конкретний випадок. Графік лише для того, щоб дати вам уявлення про те, як поводиться відповідь на вхід та вихід, і я також хотів встановити, що між входом і виходом не спостерігається великого відставання (враховуючи, що цикл працює на 150+ Гц). Зіставлення відео з графіком може не мати особливого сенсу. У відео у мене немає точного набору даних для тесту.
metsburg

Я зрозумів, що графік якось вводить в оману, вибачте за це. Я спробую і оновити графік більш точним. Насправді, оскільки я будував дані з послідовного порту, коли я створював цей графік, плата Arduino була пов'язана з ноутбуком. Після певного коливання мені довелося втрутитися і сповільнити коливання вручну. Ось чому ви бачите, що він осідає при - 5 град, а насправді - близько 90 град. Спробую оновити більш точний графік пізніше.
metsburg

Ще одне, що я бачу з графіку - це те, що ваша комбінована тяга завжди збільшується. Це здається неправильним.
Ян

1

Ну, тут може статися ряд речей ...

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

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

3) Реквізити, мотори встановлені неправильно.

4) ...


1) Я нахилив і перевірив повідомлені кути, майже правильний, але, безумовно, шумний. 2) дуже ймовірно ... насправді я думаю, що це узагальнює це повністю: P 3) не дуже ймовірно, дві за годинниковою стрілкою, дві проти годинникової стрілки ... Я перевіряв реквізит кілька разів + я думаю, що цей тип помилок це призвело до диких помилок, поза контролем. 4) ....
metsburg

4) ... неправильна настройка PID може зробити гірше, ніж якщо б у вас взагалі не було PID!
dm76

Так, я це бачу зараз. Я буду працювати над цим завтра. Мій перший план - використовувати надійну бібліотеку PID, а другий - змінити вихід PID з PWM-сигналів на корекцію roll.pitch.
metsburg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.