Sebagai kelanjutan dari pertanyaan yang saya ajukan di sini: Ketidakstabilan Quadcopter dengan lepas landas sederhana dalam mode otonom ... Saya ingin mengajukan beberapa pertanyaan tentang penerapan PID dasar untuk quadrotor yang dikendalikan oleh modul APM 2.6. (Saya menggunakan bingkai dari 3DRobotics)
Saya telah melucuti seluruh sistem kontrol menjadi hanya dua blok PID, satu untuk mengendalikan roll dan satu lagi untuk mengendalikan pitch (menguap dan yang lainnya ... saya akan memikirkannya nanti).
Saya sedang menguji pengaturan ini pada rig yang terdiri dari balok yang berputar bebas, di mana saya mengikat dua lengan quadrotor. Dua lainnya bebas bergerak. Jadi, saya sebenarnya menguji satu derajat kebebasan (roll atau pitch) pada suatu waktu.
Periksa gambar di bawah ini: di sini A, B menandai sinar yang berputar bebas di mana pengaturan dipasang.
Dengan penyetelan parameter P dan D yang cermat, saya berhasil mendapatkan penerbangan berkelanjutan sekitar 30 detik.
Tapi dengan 'berkelanjutan', maksud saya sederhana adalah tes di mana drone tidak jatuh ke satu sisi. Penerbangan mantap rock masih belum terlihat, dan lebih dari 30 detik penerbangan juga terlihat cukup sulit. Bergetar sejak awal. Pada saat mencapai 20 - 25 detik, ia mulai miring ke satu sisi. Dalam 30 detik, ia miring ke satu sisi dengan margin yang tidak dapat diterima. Tak lama kemudian, saya menemukannya terbalik
Sedangkan untuk kode PID itu sendiri, saya menghitung kesalahan proporsional dari 'filter gratis' data gyro + accelerometer. Istilah integral diatur ke nol. Istilah P mencapai sekitar 0,39 dan istilah D pada 0,0012. (Saya tidak sengaja menggunakan perpustakaan PID Arduino, hanya ingin menerapkan salah satu PID saya sendiri di sini.)
Periksa video ini, jika Anda ingin melihat cara kerjanya.
http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [Yeh, pengaturannya cukup kuno! Saya setuju. :)]
Tolong beri tahu saya apa yang bisa saya lakukan untuk meningkatkan stabilitas pada tahap ini.
@ Ian: Dari banyak tes yang saya lakukan dengan pengaturan saya, saya membuat grafik grafik untuk beberapa tes menggunakan pembacaan dari monitor serial. Berikut ini adalah contoh pembacaan Roll vs 'Motor1 & Motor2 - input PWM' (dua motor yang mengendalikan roll):
Adapun input / output:
Input: Nilai roll dan pitch (dalam derajat), seperti yang diperoleh oleh kombinasi accelerometer + gyro
Keluaran: Nilai PWM untuk motor, dikirim menggunakan fungsi motor.write () perpustakaan Servo
Resolusi
Saya menyelesaikan masalah. Begini caranya:
Inti dari masalah ini terletak pada cara saya menerapkan program Arduino. Saya menggunakan fungsi write () untuk memperbarui sudut servo, yang kebetulan hanya menerima langkah integer dalam argumen (atau entah bagaimana hanya menanggapi input integer, 100 dan 100.2 menghasilkan hasil yang sama). Saya mengubahnya menjadi writeMicroseconds () dan itu membuat copter lebih mantap.
Saya menambahkan RPM pada satu motor sekaligus menjaga yang lain pada nilai yang stabil. Saya mengubah ini untuk meningkatkan RPM dalam satu motor sekaligus mengurangi motor lawan. Itu agaknya menjaga total dorong horizontal tidak berubah, yang mungkin membantu saya ketika saya mencoba untuk mendapatkan ketinggian vertikal pada benda ini.
Saya mendorong RPM ke batas maksimal, itulah sebabnya quadcopter terus kehilangan kendali dengan kecepatan penuh. Tidak ada ruang untuk RPM untuk meningkat ketika merasakan kemiringan.
Saya mengamati bahwa salah satu motor secara inheren lebih lemah daripada yang lain, saya tidak tahu mengapa. Saya hardcoded offset ke input PWM motor.
Terima kasih atas semua dukungannya.
Kode sumber:
Jika Anda tertarik, inilah kode sumber implementasi PID saya yang sederhana: Kode Sumber PID
Silakan mengujinya di perangkat keras Anda. Segala kontribusi untuk proyek akan disambut baik.
sumber
Jawaban:
sumber
Saya akan mulai dengan membaca pertanyaan ini: Apa strategi yang baik untuk mengatur loop PID?
Jika saya harus menebak, saya akan mengatakan Anda memiliki masalah dalam cara filter gratis Anda dibangun. Dengan motor quadcopter dimatikan, Anda harus memiringkan frame bolak-balik dan melihat apakah nilai roll / pitch yang dilaporkan benar-benar akurat.
Bagi saya, sepertinya ada penundaan antara input dari accelerometer dan output dari filter Anda - osilasi dapat dijelaskan oleh reaksi yang terlambat terhadap data input. Pembalikan akhirnya tampak seperti kemungkinan kesalahan integrasi yang terakumulasi dari waktu ke waktu - dengan kata lain, sementara quadcopter Anda berada di sisinya, ia sebenarnya berpikir itu melayang secara merata.
(Pembaruan) Mengenai grafik Anda, fakta bahwa kecepatan motor Anda terus meningkat (bukannya tetap seimbang) berarti Anda memiliki kesalahan di suatu tempat. Mungkin istilah Integral Anda tumbuh tanpa batas, dan Anda harus menentukan maksimum yang masuk akal untuk itu.
sumber
Mungkin ada beberapa hal yang terjadi di sini ...
1) Apakah sudut yang Anda laporkan benar? berisik? Anda dapat dengan mudah memeriksanya dengan memiringkan quad Anda secara manual dan memonitor nilai-nilai yang keluar.
2) implementasi PID Anda sendiri memiliki bug. Anda dapat menggunakan implementasi tepercaya di luar sana untuk memeriksa kode Anda.
3) Alat Peraga, motor terpasang dengan cara yang salah.
4) ...
sumber