На продовження запитання я запитав тут: Нестабільність 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 - ШІМ-вхід" (два двигуни, що управляють рулоном):
Що стосується вводу / виводу:
Введення: значення нахилу та нахилу (у градусах), отримані комбінацією акселерометра + гіроскопа
Вихід: значення ШІМ для двигунів, що постачаються за допомогою функції motor.write () сервісної бібліотеки
Дозвіл
Я вирішив проблему. Ось як:
Суть проблеми лежала в тому, як я реалізував програму Arduino. Я використовував функцію write () для оновлення кутів сервоприводу, що, як буває, приймає лише цілі кроки в аргументі (або якимось чином відповідає лише на введення цілих чисел, 100 і 100.2 видає той же результат). Я змінив його на writeMicroseconds (), що зробило коптер значно стійкішим.
Я додавав обертів на одному моторі, одночасно підтримуючи інше на постійному рівні. Я змінив це, щоб збільшити обертів на одному двигуні, зменшивши при цьому протилежний двигун. Цей вид зберігає загальну горизонтальну тягу незмінною, що може допомогти мені, коли я намагаюся утримати вертикальну висоту цієї речі.
Я підштовхував оберти до максимальної межі, тому квадрокоптер продовжував втрачати контроль при повному гасі. Не було місця для збільшення оборотів, коли він відчував нахил.
Я помітив, що один з двигунів був по суті слабшим, ніж інший, я не знаю, чому. Я жорстко кодував зміщення у вхід ШІМ двигунів.
Дякую за всю підтримку.
Вихідний код:
Якщо вас цікавить, ось вихідний код моєї реалізації PID з голими кістками: вихідний код PID
Будь ласка, не соромтеся перевірити це на вашому обладнання. Будь-який внесок у проект буде вітатися.