Kecepatan robot berdasarkan data IMU


2

Saat ini saya terjebak dalam mendapatkan deskripsi kecepatan basis robot (xdot, ydot, thetadot) berdasarkan data yang diperoleh dari 4 sensor IMU yang terletak, dengan offset, pada 4 titik pivot. Lihat gambar di bawah ini:

masukkan deskripsi gambar di sini

Dan closeup dari 1 roda pivot:

masukkan deskripsi gambar di sini

IMU terletak di titik merah dan karena ini adalah masalah 2d, saya hanya akan mempertimbangkan akselerasi dalam arah X, Y dari frame IMU dan rotasi di sekitar sumbu Z dari frame IMU.

Sekarang, karena saya mencari untuk mendapatkan deskripsi untuk kecepatan xdot, ydot en thetadot, ini semua akan menghasilkan sesuatu seperti berikut:

[dx dy dtheta]' = [3x12 matrix] * [ax_1 ay_1 gz_1 .. .. .. etc.]'

Saya berpikir bahwa jika deskripsi tentang bagaimana percepatan pengaruh IMU individu terhadap odometry robot diketahui, saya dapat meratakan komponen individu untuk sampai pada odometry 'benar'. Jadi yang pertama (saya pikir) adalah mendapatkan deskripsi dx atau dy atau dtheta sebagai fungsi dari sudut delta dan kecepatan IMU.

Jika kita ingin mengetahui lokasi IMU dalam bingkai robot, kita perlu matriks terjemahan yang terlihat seperti berikut:

H_imu_p = [1 0 -d_s; 0 1 0; 0 0 1];
H_p_r = [cos(d) -sin(d) -d_px; sin(d) cos(d) -d_py; 0 0 1];

Di mana d_s adalah jarak dalam X antara IMU dan titik pivot dan d_px dan d_py adalah jarak antara Asal Robot dan titik pivot yang diekspresikan dalam bingkai Robot.

Mengalikan matriks ini akan menghasilkan matriks yang mampu memberikan lokasi IMU dalam bingkai Robot. Karena IMU terletak wrt frame IMU di:

p_imu = [0 0 1]'

Kita dapat memperoleh lokasi IMU wrt kerangka global dengan mengambil kolom terakhir dari matriks terjemahan yang dikalikan.

Membedakan informasi ini dua kali mendapatkan bagaimana akselerasi IMU diekspresikan dalam bingkai Robot.

Di sinilah bagian pertanyaan dimulai:

Menganggap semua informasi di atas adalah benar, bagaimana cara saya beralih dari ekspresi yang mengekspresikan xddot_IMU yddot_IMU dan thetaddot_IMU dalam bingkai robot hingga menentukan kecepatan bingkai robot?

Akankah mengintegrasikan hasil pengukuran (sehingga memperoleh kecepatan IMU) dan kemudian memiliki ekspresi lokasi IMU wrt kerangka robot dibedakan satu kali? deltadot kemudian dapat diperoleh dari data gyroscopic di sekitar sumbu Z. Saya ragu tentang metode ini karena hubungan kinematik yang kompleks antara IMU dan robot. Intinya semua empat pivot point bisa berputar tanpa robot pernah bergerak (sambil tetap mengukur nilai di [ax_1 ay_1 gz_1 .. .. .. dll.]

Saya tidak meminta solusi yang berhasil tetapi saya cukup terjebak di sini dan tidak dapat menemukan literatur yang diperlukan untuk menemukan jalan keluar. Jika seseorang bisa mengarahkan saya ke solusi (atau ke beberapa contoh dalam literatur), itu akan sangat dihargai.


Apa data IMU? Anda menunjukkan Yimu, jadi itu harus akselerasi? jika kecepatan (seperti pada accelerometer pengintegrasian), output Y akan tetap 0.
Phil Sweet

Data IMU terdiri dari akselerasi arah XYZ dan kecepatan pitch rol yawn (kemungkinan sudah terintegrasi dalam pemrosesan data).
JV

Kecepatan menguap membantu.
Phil Sweet

Jawaban:


1

Sayangnya, pengaturan yang Anda tampilkan tidak berfungsi dengan baik. Ada banyak alasan, tetapi mereka mendidih menjadi dua kelas - kunci gimbal dan singularitas.

Saya akan mencoba mengilustrasikan masalah dengan contoh seluruh kelas gerak yang tidak bisa ditangani oleh pengaturan ini.

Berdasarkan sketsa Anda, saya mengasumsikan output IMU adalah akselerasi, dan Anda ingin mendefinisikan akselerasi sasis instan berdasarkan akselerasi instan empat IMU. Secara umum, Anda tidak bisa.

Misalkan semua akselerasi IMU x adalah nol dan akselerasi y semuanya sama. Solusi yang jelas adalah Thetadot = 0 dan robot melakukan orbit dengan kecepatan konstan dengan kastor semua memiliki sudut yang sama dan laju rotasi tentang chasis. Namun, ada solusi lain. Misalkan chasis berputar di tengahnya. Sekarang X , Y adalah nol dan Thetadot bukan nol. Ini dapat memiliki output IMU yang persis sama. Selanjutnya, Anda dapat menggabungkan gerakan ini, di mana putaran dan orbit retrograde bergabung untuk menghasilkan output IMU yang sama.

Masalah lain terjadi ketika kecepatan IMU rendah relatif terhadap faktor-faktor lain seperti tingkat sudut caster. Misalnya, Anda dapat menjaga keempat IMU tetap dan tetap membuat orbit radius = kastor offset tanpa memicu output apa pun. EDIT - ini akan menghasilkan tingkat menguap, yang saya tidak tahu tersedia ketika saya menulis kalimat sebelumnya.

Seperti yang dirumuskan, meskipun diberi kondisi awal lengkap dan riwayat IMU, Anda masih tidak dapat membuat lintasan secara umum, dan analisis anggaran kesalahan juga akan menunjukkan masalah serius dalam lintasan biasa, halus, berperilaku baik.

Kami menggunakan resolusi sudut karena suatu alasan.


Terima kasih atas tanggapan Anda. Saya tidak benar-benar mendapatkan sentene ini: "Sekarang X, Y adalah nol dan Thetadot bukan nol. Ini dapat memiliki output IMU yang persis sama.". Bukankah ini juga menghasilkan output yaw sedangkan akselerasi dalam X dan Y dengan thetadot 0 tidak akan? Tujuan dari ini adalah, bersama-sama dengan estimasi odometry wheel-dan pivot-encoder, membuat algoritma yang pada dasarnya memilih opsi terbaik (misalnya filter Kalman dapat digunakan). Mungkin ini akan memberikan beberapa wawasan mengapa saya mencoba melakukan ini dan jika mungkin ada pendekatan yang lebih baik.
JV
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.