Bagaimana masalah kinematika terbalik dapat dipecahkan?


20

Kinematika maju dari lengan robot dapat diselesaikan dengan mudah. Kita dapat mewakili setiap sambungan menggunakan matriks transformasi Denavit-Hartenberg .

Misalnya, jika sambungan adalah aktuator linier, ia mungkin memiliki matriks transformasi:sayath

Tsaya=[10000100001dsaya0001] mana panjang ekstensi ditentukan olehdsaya

sedangkan, tautan yang berputar mungkin:

Tsaya=[100L.0cosαsaya-dosaαsaya00dosaαsayacosαsaya00001] mana adalah sudut, dan adalah panjang tautan.αL.

Kita kemudian dapat menemukan posisi dan orientasi efektor akhir dengan mengalikan semua matriks transformasi: .Tsaya

Pertanyaannya adalah, bagaimana kita memecahkan masalah terbalik?

Secara matematis, untuk diinginkan akhir posisi efektor , menemukan parameter , sehingga . Metode apa yang ada untuk menyelesaikan persamaan ini?M.dsayaαsayaTsaya=M.

Jawaban:


11

Kembali pada hari itu, ketika saya sedang belajar, mengada-ada ketika saya melanjutkan, saya menggunakan gradien sederhana berikut untuk menyelesaikan masalah IK.

Dalam model Anda, Anda mencoba memutar masing-masing sambungan setiap jumlah yang kecil, lihat berapa banyak perbedaan yang terjadi pada kesalahan posisi titik akhir. Setelah melakukan itu, Anda kemudian memutar setiap sambungan dengan jumlah yang sebanding dengan manfaat yang diberikannya. Kemudian Anda melakukannya berulang-ulang sampai Anda cukup dekat.

Secara umum, ini dikenal sebagai gradient following, atau hill following. Bayangkan lengan robot dengan dua derajat kebebasan:

IK

Rotating joint A sedikit menggerakkan titik akhir ke arah a . Memutar sambungan B sedikit menggerakkan titik akhir ke arah b . Keduanya menggerakkan kita lebih dekat ke target dengan jumlah yang sama, jadi kita harus memutar kedua sendi dengan kecepatan yang sama.

Jika kita memplot grafik jarak ke target versus sudut gabungan, akan terlihat seperti ini:

IK

Saya telah mewarnai beberapa kontur hanya untuk membantu. Kita dapat melihat jalur yang diambil algoritma ini. Apa yang akan Anda perhatikan adalah bahwa di ruang bersama, jalan yang diambil tidak terlihat optimal. Dibutuhkan kurva. Namun, dalam ruang nyata, Anda akan melihat titik akhir mengambil garis yang cukup lurus ke target. Anda juga dapat melihat bahwa sebenarnya ada dua solusi untuk masalah tersebut, dan algoritma baru saja menemukan yang terdekat.

Ini bukan satu-satunya cara untuk memecahkan masalah kinematika terbalik. Itu tentu bukan cara terbaik juga.

Pro:

  • Secara konseptual sederhana, sangat hebat jika Anda baru belajar ini.
  • Sangat mudah untuk diterapkan, bahkan jika melihat matriks transformasi Denavit-Hartenberg memberi Anda ketakutan.
  • Ini sangat umum, memungkinkan Anda untuk menggunakan semua jenis sambungan: rotari, linier, sesuatu yang lain, selama Anda dapat memperkirakan bagaimana mereka menyebabkan titik akhir bergerak.
  • Itu mengatasi dengan baik, bahkan ketika ada nol atau jumlah solusi yang tak terbatas.

Cons:

  • Ini lambat, mengambil banyak iterasi untuk menemukan solusinya. Namun, tidak apa-apa jika Anda hanya dapat memiliki lengan nyata mengikuti kemajuan algoritma yang dihitung.
  • Itu bisa macet di minimum lokal. IE Mungkin tidak menemukan solusi terbaik, jika menemukan solusi yang cukup baik.

Ada lebih banyak detail tentang hal itu di situs web saya yang sangat lama: Halaman ganteng bertekstur tampan, menyenangkan, menyenangkan, dan cerdas .



1

Ada dua pendekatan luas:

  • solusi analitik, diberi pose end-effector, langsung menghitung koordinat bersama. Secara umum solusinya tidak unik, sehingga Anda dapat menghitung satu set koordinat bersama yang mungkin. Beberapa dapat menyebabkan robot mengenai hal-hal di lingkungannya (atau dirinya sendiri), atau tugas Anda mungkin membantu Anda memilih solusi tertentu, yaitu. Anda mungkin lebih suka siku ke atas (atau ke bawah), atau robot memiliki lengannya ke kiri (atau kanan) dari belalainya. Secara umum ada kendala dalam memperoleh solusi analitik, untuk robot 6-sumbu, diasumsikan pergelangan tangan bulat (semua sumbu berpotongan). Solusi analitik untuk berbagai jenis robot telah dihitung selama beberapa dekade dan Anda mungkin dapat menemukan kertas yang memberikan solusi untuk robot Anda.
  • solusi numerik, seperti yang dijelaskan dalam jawaban lain, menggunakan pendekatan optimisasi untuk menyesuaikan koordinat bersama sampai kinematika maju memberikan solusi yang tepat. Sekali lagi, ada literatur besar tentang ini, dan banyak perangkat lunak.

Menggunakan Robotics Toolbox untuk MATLAB, saya membuat model robot 6-sumbu yang terkenal menggunakan parameter Denavit-Hartenberg

>> mdl_puma560
>> p560

p560 = 

Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE            
 - viscous friction; params of 8/95;                             
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|     1.5708|          0|
|  2|         q2|          0|     0.4318|          0|          0|
|  3|         q3|    0.15005|     0.0203|    -1.5708|          0|
|  4|         q4|     0.4318|          0|     1.5708|          0|
|  5|         q5|          0|          0|    -1.5708|          0|
|  6|         q6|          0|          0|          0|          0|
+---+-----------+-----------+-----------+-----------+-----------+

lalu pilih koordinat gabungan acak

>> q = rand(1,6)
q =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

kemudian hitung kinematika maju

>> T = p560.fkine(q)
T = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

Sekarang kita dapat menghitung kinematika terbalik menggunakan solusi analitik yang diterbitkan untuk robot dengan 6 sendi dan pergelangan bola

>> p560.ikine6s(T)
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

dan voila, kami memiliki koordinat gabungan asli.

Solusi numerik

>> p560.ikine(T)
Warning: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.63042 
> In SerialLink/ikine (line 244) 
Warning: failed to converge: try a different initial value of joint coordinates 
> In SerialLink/ikine (line 273) 

ans =

     []

telah gagal, dan ini adalah masalah umum karena mereka biasanya membutuhkan solusi awal yang baik. Mari mencoba

>> p560.ikine(T, 'q0', [1 1 0 0 0 0])
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

yang sekarang memberikan jawaban tetapi berbeda dengan solusi analitik. Tidak apa-apa, karena ada beberapa solusi untuk masalah IK. Kami dapat memverifikasi bahwa solusi kami benar dengan menghitung kinematika maju

>> p560.fkine(ans)
ans = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

dan memeriksa apakah itu sama dengan transformasi yang kita mulai (yang itu).

Sumber lain:

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.