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.