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: