Sunday, March 22, 2009

MATLAB Mengangap

Nah, MATLAB itu punya bugs.

Kalau kaga ada bugs, hidup tidak berkesan.


Kisah ini bermula dari keinginanku, membuat MAtriks Jacobian pada persamaan Denavit Hartenberg untuk lengan robot dengan 7 sendi. Bahasanya kok rumit, ya?

Aku sudah berhasil mempermudah penghitungan Matriks Jacobian untuk posisi ujung lengan robot, bahasa canggihnya adalah end effector. Namun kebingungan dengan orientasi ujung lengan robot. Matriks Jacobiannya terlalu rumit untuk diturunkan, kayanya butuh satu lapangan sepakbola kalau aku menulis dengan tangan.

Aku berpikir gunakan MATLAB Symbolic Toolbox.

Apakah hasilnya memuaskan.


Masalah pertama,

aku mencoba mencari apakah menggunakan persamaan translasi yang diper-"mudah" dan persamaan translasi menggunakan perkalian biasa.

Perkalian biasa artinya 7 matriks frame Denavit Hartenberg dikalikan biasa. Satu matriks frame terdiri dari 4 perkalian matriks, yaitu rotasi terhadap sumbu z, translasi pada sumbu z, translasi pada sumbu x, dan rotasi terhadap sumbu x. Total matriks terlibat adalah 7 kali 4, sama dengan 28 matriks!!!

Persamaan translasi diper-"mudah", adalah mengambil elemen rotasi dari 7 matriks frame saja, dan dikalikan seperlunya dengan elemen translasi dari 7 matriks frame, dengan cara looping sana-sini.


Nah, aku membandingkan kedua cara.

Caranya

Check1 = (Matrix_A == Matrix_B)

Matriks A tidak sama dengan Matriks B.

Mula-mula hasilnya beda, lho?


Lalu aku gunakan "simplify".

Caranya

Check2 = (simplify(Matrix_A) == simplify(Matrix_B))

Hasilnya sama. Oh, ternyata matriksnya harus di-"simplify" dulu.


Ternyata di lain waktu, aku temukan kekacauan simplify ini, yaitu di masalah kedua.


Masalah kedua,

Aku mencoba penurunan. Partial Differential dibutuhkan pada persamaan Jacobian Matrix.

Aku mencoba persamaan

diff(Matrix_A,q1)

lalu q2, q3, dan seterusnya hingga q7.


Lalu aku bandingkan dengan

diff(Matrix_B, q1)

pakai simplify juga, hasilnya beda.


Uniknya lagi ada kasus seperti ini

for nn = 1:7

Check3 = (simplify(diff(Matrix_A, qi(nn)) == simplify(diff(Matrix_B, qi(nn))))

end


for nn = 7:-1:1

Check4 = (simplify(diff(Matrix_A, qi(nn)) == simplify(diff(Matrix_B, qi(nn))))

end


Persamaannya sama cuma urutan increment-nya beda.

Seharusnya hasilnya sama.

Akan tetapi hasilnya berubah-ubah. ada komponen yang sama dan ada komponen yang beda. Dan hasilnya tidak konsisten, kalau aku "Run" berkali-kali.

Ini adalah bugs dari "simplify" pada MATLAB Symbolic Toolbox. Dugaan saya simplify menggunakan algoritma yang memakai random generator dan memiliki time out, sehingga hasilnya belum tentu optimal.

Lalu aku menggunakan "simple" untuk menggantikan "simplify". Hasilnya jadi masalah ketiga.


Masalah ketiga,

Ternyata oh ternyata, "simple" menyebabkan MATLAB is busy dan suhu komputer meningkat drastis dan bunyinya nyaring. Dan bukan hasil yang kudapat akan tetapi komputer yang panas.


Jadi kawan-kawan, kalau MATLAB bilang "simple", itu artinya bukan mudah, dan kalau bilang "simplify", itu artinya bukan mempermudah. Malah bisa mempersulit diri sendiri.


Jadi kawan-kawan semua, memrogram robot itu tidak mudah. Makanya perkembangan robotika kalah cepat dengan perkembangan telekomunikasi. Hanya orang-orang kurang kerjaan saja seperti saya bertekun di bidang robotika.

separador

0 komentar:

Post a Comment

Live music


Followers