Membangun robot penyeimbang dengan penggerak diferensial

8

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.

JDD
sumber
1
Apa jenis pendekatan yang Anda gunakan / teori kontrol apa yang Anda ketahui? Saya bisa menulis satu pendekatan, tetapi bisa jadi super dasar atau super canggih, tergantung pada latar belakang Anda ... :)
apnorton
Terima kasih! untuk desain lama dengan servos saya menghitung sudut kemiringan menggunakan data dari gyro / acceleromter. Mengirimnya ke filter Kalman dan kemudian PID untuk posisi servo. Saya baik dengan persamaan diferensial dan baik-baik saja dengan aljabar linier. Saya masih cukup baru untuk mengontrol jadi mungkin yang mendasar? Atau keduanya jika Anda bersedia. Saya selalu tertarik untuk belajar lebih banyak :)
JDD
1
Saya hanya punya satu pendekatan, jadi komentar saya sebelumnya benar-benar mengatakan itu bisa diambil dua arah (baik super maju jika Anda baru memulai dengan robot, atau super dasar jika Anda memiliki pengetahuan tentang kontrol) ... Berdasarkan pada sebelumnya Anda komentar, saya punya perasaan saya diungguli. :) Pengetahuan kontrol saya sangat tipis, tetapi saya akan melemparkan nilai $ 0,02 saya di sana ...
apnorton
Selamat datang di Robotics JDD, lebih baik untuk mengedit informasi tambahan ke dalam pertanyaan Anda daripada menambahkannya sebagai komentar, dengan cara itu komentar dapat dirapikan (dihapus) nanti dan mereka akan berhenti mengganggu pembaca dari pertanyaan itu sendiri.
Mark Booth

Jawaban:

8

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 ke 0) negara xdi mana:

x=[leftVelocityrightVelocityangle from vertical]

Namun, ketika sistem ini stabil, kecepatan roda kiri dan kanan akan menjadi 0. Jadi, kami ingin offset untuk kecepatan target:

xnew=[leftVelocityδLrightVelocityδRangle from vertical]
Dimana δ adalah kecepatan target untuk kedua sisi.

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 menghitung A dan Bmatriks (ini adalah kekacauan linierisasi besar). Pokoknya, Anda ingin membuat matriks keadaan Anda sebagai berikut (tidak seperti di atas - ingatan saya tidak tepat):

x=[vωϕϕ˙]

Dimana v 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:

x~=x[vdωd00]=xδ

Dimana δ adalah kecepatan dan kuantitas rotasi yang diinginkan (seperti yang terlihat di atas).

Membedakan:

x~˙=x˙δ˙=δ is constantx˙

Jadi, sudah

x~˙=Ax+Bu

Dimana A adalah matriks standar koefisien B adalah matriks input, dan uadalah vektor kontrol. Kita kemudian dapat mengatakan:

x~˙=A(xδ)+Bu+Aδ
Tapi, berdasarkan solusi untuk A (dari Coursera), Aδ=0. Jadi:
x~˙=Ax~+Bu

Sekarang Anda dapat menggunakan penempatan kutub untuk menentukan nilai eigen yang benar, dll.

apnorton
sumber
Keren terima kasih! Saya melakukan kelas Coursera yang sama juga, kita mungkin tidak terlalu jauh dalam mengontrol pengetahuan. Ini ternyata menjadi proyek yang jauh lebih sulit daripada yang saya bayangkan. Saya suka matriks keadaan Anda sejauh ini.
JDD
Eek! Tampaknya saya tidak menjawab ini malam ini! Saya sedang liburan musim semi minggu lalu, dan lupa tentang sesuatu yang seharusnya, sehingga membuat saya sibuk hari ini. Saya akan mengeditnya besok ...
apnorton
Tidak masalah. Saya meledakkan h-bridge terakhir saya kemarin, mencoba membuatnya jadi saya harus menunggu penggantinya.
JDD
Terima kasih banyak Anorton atas bantuannya. Saya pikir saya mengerti bagaimana melakukan ini lebih banyak sekarang. Saya memperbarui pertanyaan awal saya. Bagaimana cara menentukan matriks A dan B masih membingungkan saya.
JDD