Saya sudah membangun robot penyeimbang dua roda menggunakan beberapa rotasi servos kontinyu dan accelerometer / giroskop. Saya meng-upgrade servos ke beberapa motor DC diarahkan dengan encoders 8-bit dengan tujuan memiliki robot berkeliling sambil menyeimbangkan.
Saya agak terjebak pada bagaimana memprogramnya untuk berkeliling sambil tetap menyeimbangkan. Saya pikir salah satu cara adalah dengan hanya memiliki input kontrol untuk motor bertindak seperti mendorongnya. Jadi robot akan mengalami ketidakseimbangan sesaat ke arah yang saya inginkan. Itu agak aneh bagi saya. Harus ada cara yang lebih baik untuk dilakukan? Saya pikir saya perlu menggabungkan model dinamis untuk balancer dengan drive diferensial tetapi ini sedikit di luar teori kontrol yang saya tahu.
Pembaruan Dari jawaban Anorton, saya memiliki matriks keadaan yang bagus sekarang.
Sekarang tentang penempatan kutub: Matriks A harus 4x4 berdasarkan vektor keadaan baru. Dan B kemudian harus menjadi matriks 4x2 karena saya hanya dapat mengontrol torsi roda kiri / kanan (u = vektor 2x1).
Saya mungkin perlu membaca lebih lanjut tentang ini tetapi apakah ada cara sistematis untuk menentukan matriks A dengan penempatan kutub? Bagi saya contoh ini dan contoh yang lebih rumit, menentukan A dengan menebak dan memeriksa akan sangat sulit.
Perbarui # 2 Setelah sedikit membaca, saya rasa saya mengerti sekarang. Saya masih membutuhkan dinamika robot untuk menentukan matriks A. Setelah saya memilikinya saya bisa melakukan penempatan tiang menggunakan matlab atau oktaf.
:)
Pengetahuan kontrol saya sangat tipis, tetapi saya akan melemparkan nilai $ 0,02 saya di sana ...Jawaban:
Penafian: Saya belum pernah melakukan ini sendiri, tetapi hanya melihat deskripsi tentang hal itu dilakukan melalui "Kontrol Robot Mobile" Georgia Tech di Coursera. Pengetahuan saya tentang kontrol juga sedikit. Jadi ... ambil ini dengan sebutir garam.
:)
Agar robot tetap tegak (dan diam), Anda mencoba menstabilkan (kirim ke0 ) negara x di mana:
Namun, ketika sistem ini stabil, kecepatan roda kiri dan kanan akan menjadi0 . Jadi, kami ingin offset untuk kecepatan target:
Ketika sistem ini distabilkan, robot akan tegak, dan setiap roda akan berputar pada kecepatan yang diinginkan.
Ini adalah pendekatan / garis besar dasar. Saya akan mengedit ini dengan beberapa rincian lebih lanjut besok (dan matematika aktual, dll.), Tetapi saya ingin setidaknya memposting ide umum sekarang. (Sudah terlambat di zona waktu saya, dan saya memiliki kelas awal untuk sampai ke.)
Diedit: Ya ampun. Jadi, saya hanya melihat kembali slide yang berkaitan dengan ini dalam kursus Coursera (Bagian 4, slide 29). Anda mungkin ingin pergi dan mendaftar di kelas itu hanya untuk mengunduh set slide itu ...
:)
Bagian yang sulit adalah menghitungSEBUAH dan B matriks (ini adalah kekacauan linierisasi besar). Pokoknya, Anda ingin membuat matriks keadaan Anda sebagai berikut (tidak seperti di atas - ingatan saya tidak tepat):
Dimanav adalah kecepatan segway, ω adalah kecepatan rotasi (seberapa cepat robot berputar) dan ϕ adalah sudut dari vertikal.
Kami ingin memiliki kecepatan yang diinginkan, jadi mari kita tentukan vektor status baru:
Dimanaδ adalah kecepatan dan kuantitas rotasi yang diinginkan (seperti yang terlihat di atas).
Membedakan:
Jadi, sudah
DimanaSEBUAH adalah matriks standar koefisien B adalah matriks input, dan kamu adalah vektor kontrol. Kita kemudian dapat mengatakan:
Sekarang Anda dapat menggunakan penempatan kutub untuk menentukan nilai eigen yang benar, dll.
sumber