Merhaba arkadaşlar, bu yazımda sizlere 2020 robot kolunun ileri ve ters kinematiğini nasıl yaptığımı anlatacağım.

İleri Kinematik
Robot kol şekil 1’de görüldüğü gibi 6 eksenlidir. DH(Denavit Hartenberg) yöntemi kullanılarak her bir eklem koordinat düzlemine yerleştirilmiş ve her ekleme karşılık gelen açılar ve uzunluklar tablo 1 de gösterilmiştir.

Şekil 1
DH Tablosu

Tablo 1 (L4 VE L5 uzunlukları DH kurallarına göre negatiftir. )
Herhangi bir D-H tablosunu kullanarak her bir eklem için matrisi elde ederken kullanacağımız yöntem :

Her bir eklem için yazılan matrisin genel formatı
Yukarıdaki format kullanılarak her bir ekleme ait matris elde edilmiştir.
T0_1
[[cos(t1) -sin(t1) 0 0]
[0 0 -1 -L1]
[sin(t1) cos(t1) 0 0]
[0 0 0 1]]
T1_2
[[cos(t2) -sin(t2) 0 L2]
[sin(t2) cos(t2) 0 0]
[0 0 1 0]
[0 0 0 1]]
T2_3
[[cos(t3) -sin(t3) 0 L3]
[0 0 1 0]
[-sin(t3) -cos(t3) 0 0]
[0 0 0 1]]
T3_4
[[cos(t4) -sin(t4) 0 0]
[0 0 -1 L4]
[sin(t4) cos(t4) 0 0]
[0 0 0 1]]
T4_5
[[cos(t5) -sin(t5) 0 0]
[0 0 -1 L5]
[sin(t5) cos(t5) 0 0]
[0 0 0 1]]
T5_6
[[cos(t6) -sin(t6) 0 0]
[sin(t6) cos(t6) 0 0]
[0 0 1 L6]
[0 0 0 1]]
T0_6=T0_1 * T1_2 * T2_3 * T3_4 * T4_5 *T5_6
T0_6 matrisi gripperın konumunu verir. 1.satır 4.sütunu Px , 2.satır 4.sütunu Py , 3.satır 4.sütunu Pz yi temsil etmektedir.
Ters Kinematik
6 eksenli robot kolun ters kinematiğini yaparken ilk üç eklem için yönünü kontrol etmek amaçlanır. (yukarı,aşağı,sağa,sola ..). Bunu yaparken geometrik yaklaşım kullanılır.



Ꝋ1=Atan2(Xc,Yc) (1.eklemin açısı)
2. ve 3. Eklemin açılarını bulmak için aşağıda belirtilen yolar izlenmelidir:



Son 3 eklemin açılarını bulmak için euler açı formülleri kullanılmaktadır. Bu formüller bulunurken ileri kinematik için oluşturulan DH tablosundan yararlanılır.
DH tablosundan yaralanılarak her bir ekleme ait dönüşüm matrisleri aşağıdaki gibidir:
R0_1 =
[ cos(t0), 0, sin(t0)]
[ sin(t0), 0, -cos(t0)]
[ 0, 1, 0]
R1_2 =
[ -sin(t1), -cos(t1), 0]
[ cos(t1), -sin(t1), 0]
[ 0, 0, 1]
R2_3 =
[ sin(t2), 0, cos(t2)]
[ -cos(t2), 0, sin(t2)]
[ 0, -1, 0]
R3_4 =
[ cos(t3), 0, sin(t3)]
[ sin(t3), 0, -cos(t3)]
[ 0, 1, 0]
R4_5 =
[ -sin(t4), 0, cos(t4)]
[ cos(t4), 0, sin(t4)]
[ 0, 1, 0]
R5_6 =
[ sin(t5), cos(t5), 0]
[ -cos(t5), sin(t5), 0]
[ 0, 0, 1]
R0_6 matrisi euler açılarıyla ifade edilmektedir. 4.eklem x ekseni yönünde 5.eklem y ekseni yönünde 6.eklem z ekseni yönünde dönmektedir.
X = 4.eklem x ekseni etrafında dönmektedir. (Roll)
[ 1, 0, 0]
[ 0, cos(x), -sin(x)]
[ 0, sin(x), cos(x)]
Y = = 5.eklem y ekseni etrafında dönmektedir. (Pitch)
[ cos(y), 0, sin(y)]
[ 0, 1, 0]
[ -sin(y), 0, cos(y)]
Z =6.eklem z ekseni etrafında dönmektedir. (Yaw)
[ cos(z), -sin(z), 0]
[ sin(z), cos(z), 0]
[ 0, 0, 1]
Rxyz =R0_6
[ cos(y)*cos(z), cos(z)*sin(x)*sin(y) - cos(x)*sin(z), sin(x)*sin(z) + cos(x)*cos(z)*sin(y)]
[ cos(y)*sin(z), cos(x)*cos(z) + sin(x)*sin(y)*sin(z), cos(x)*sin(y)*sin(z) - cos(z)*sin(x)]
[ -sin(y), cos(y)*sin(x), cos(x)*cos(y)]

Yukarıdaki eşitlik kullanılarak 4. 5. ve 6. Eklemlerin açıları elde edilir.

Yukarıda yazılan teorik bilgiler kullanılarak robot kolun ters kinematik kodu aşağıdaki linkte mevcuttur.
https://github.com/Aydogan99/robotic_arm/blob/master/Rover_2020_%C4%B0nverse_Kinematics.py
Yazılan koda göre girilen input değerleri end efektörün px,py ve pz konumu ve roll (x) ,pitch (y), yaw (z) açı değerleridir. Output değerleri ise her bir ekleme karşılık gelen açılardır (Açılar radyan cinsindendir).
Kod gazebo ortamına entegre edilerek simülasyon ortamında çalıştırılmıştır ve joystick kolla kontrol edilmiştir.
Ters kinematiği yaparken faydalı bulduğum linkler:
https://walter.readthedocs.io/en/latest/Kinematics/
http://web.iyte.edu.tr/~gokhankiper/ISMMS/Kutuk.pdf
https://www.youtube.com/watch?v=9HfcMkfLh6k
Ayrıca Angela Sodemann youtube kanalında robot kolun ileri ve ters kinematiği hakkında çok yararlı bilgiler mevcuttur.
İyi çalışmalar 😉
Kodu https://repl.it/languages/python 'a taşıdım. İsterseniz aşağıdaki linke girip kodu deneyebilir veya düzenleyebilirsiniz:
https://repl.it/@TRobotikRobotik/Robot-Kol-Ters-Kinematik-Kodu
Çok yararlı bir gönderi olmuş. Hazırlayan arkadaşımız @aydogansoylu19 'un ellerine ve emeklerine sağlık.