Ters kinematik problemi nasıl çözülebilir?


20

Bir robot kolunun ileri kinematiği kolayca çözülebilir. Her eklemi Denavit – Hartenberg dönüşüm matrislerini kullanarak temsil edebiliriz .

Örneğin, bağlantısı doğrusal bir aktüatörse, dönüşüm matrisine sahip olabilir:ith

Ti=[10000100001dben0001] burada uzatma uzunluğu ile tanımlanırdben

oysa dönen bir bağlantı şunlar olabilir:

Tben=[100L0marulαben-günahαben00günahαbenmarulαben00001] burada α olan açı ve L bağlantının uzunluğudur.

Daha sonra tüm dönüşüm matrislerini çarparak uç efektörün konumunu ve yönünü bulabiliriz: ΠTben .

Soru, ters problemi nasıl çözebiliriz?

Matematiksel olarak, istenen bir son birim konumu için M , parametreler bulmak dben , αben öyle ki ΠTben=M . Bu denklemi çözmek için hangi yöntemler var?

Yanıtlar:


11

Eskiden öğrenirken, bunu devam ederken uydurdum, TK problemini çözmek için basit gradyan kullandım.

Modelinizde, her bir eklemi küçük bir miktar döndürmeye çalışın, uç nokta pozisyonu hatası için ne kadar fark yarattığını görün. Bunu yaptıktan sonra, her eklemi sağladığı fayda ile orantılı bir miktarda döndürürsünüz. Sonra bunu yeterince yakın olana kadar tekrar tekrar yaparsınız.

Genellikle bu, gradyan takibi veya tepe takibi olarak bilinir. İki serbestlik derecesine sahip bir robot kolu hayal edin:

IK

Döner mafsal A Küçük bir bit, uç noktayı a yönünde hareket ettirir . B eklemini küçük bir parça döndürmek , bitiş noktasını b yönünde hareket ettirir . Her ikisi de bizi aynı miktarda hedefe yaklaştırıyor, bu yüzden her iki eklemi de aynı hızda döndürmeliyiz.

Eklem açılarına karşı hedefe olan mesafenin bir grafiğini çizseydik, şöyle olurdu:

IK

Bazı konturlarda sadece yardım etmek için renklendirdim. Bu algoritmanın izlediği yolu görebiliriz. Fark edeceğiniz şey, ortak alanda, izlenen yolun optimal görünmediğidir. Bir eğri alır. Ancak, gerçek alanda, son noktanın hedefe oldukça düz bir çizgi çektiğini görürsünüz. Ayrıca sorunun iki çözümü olduğunu ve algoritmanın en yakınını bulduğunu da görebilirsiniz.

Ters kinematik problemini çözmenin tek yolu bu değildir. Kesinlikle en iyi yol da değil.

Artıları:

  • Kavramsal olarak basit, sadece bunu öğreniyorsanız çok harika.
  • Denavit-Hartenberg dönüşüm matrislerinin görüşü size korku veriyor olsa bile, uygulanması kolaydır.
  • Her türlü eklemi kullanmanıza izin veren çok geneldir: son noktanın hareket etmesine nasıl neden olduklarını tahmin edebildiğiniz sürece döner, doğrusal, başka bir şey.
  • Sıfır veya sonsuz sayıda çözüm olsa bile iyi baş eder.

Eksileri:

  • Çözümü bulmak için birçok tekrarlama yapmak yavaştır. Ancak, gerçek kolun, hesaplandığı gibi algoritmanın ilerlemesini takip etmesini sağlayabilirsiniz.
  • Yerel minima sıkışmış olabilir. IE Yeterince iyi bir çözüm bulursa mümkün olan en iyi çözümü bulamayabilir.

Çok eski web sitemde daha fazla ayrıntı var: İyi görünümlü dokulu ışık kaynaklı kabarık eğlenceli akıllı ve esnek sayfa .



1

İki geniş yaklaşım vardır:

  • uç efektör pozu verilen analitik çözümler, eklem koordinatlarını doğrudan hesaplar. Genel olarak çözüm benzersiz değildir, bu nedenle bir dizi olası ortak koordinat hesaplayabilirsiniz. Bazıları, robotun ortamındaki (veya kendisindeki) şeylere çarpmasına neden olabilir veya göreviniz belirli bir çözümü seçmenize yardımcı olabilir, yani. dirseğin yukarı (veya aşağı) veya robotun kolunun gövdesinin soluna (veya sağına) sahip olmasını tercih edebilirsiniz. Genel olarak, analitik bir çözüm elde edilmesinde kısıtlamalar vardır, 6 eksenli robotlar için küresel bir bilek (tüm eksenlerin kesiştiği) varsayılır. Birçok farklı robot türü için analitik çözümler on yıllar boyunca hesaplanmıştır ve muhtemelen robotunuz için bir çözüm sunan bir kağıt bulabilirsiniz.
  • diğer cevaplarda açıklandığı gibi sayısal çözümler, ileri kinematikler doğru çözümü verene kadar eklem koordinatlarını ayarlamak için bir optimizasyon yaklaşımı kullanır. Yine, bu konuda büyük bir literatür ve birçok yazılım var.

MATLAB için Robotik Araç Kutumu kullanarak Denavit-Hartenberg parametrelerini kullanarak iyi bilinen 6 eksenli bir robot modeli oluşturuyorum

>> 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|
+---+-----------+-----------+-----------+-----------+-----------+

o zaman rastgele bir ortak koordinat seçin

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

sonra ileri kinematiği hesaplar

>> 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

Şimdi 6 eklemli ve küresel bir bileğe sahip bir robot için yayınlanmış bir analitik çözüm kullanarak ters kinematiği hesaplayabiliriz

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

ve voila, orijinal ortak koordinatlarımız var.

Sayısal çözüm

>> 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 =

     []

başarısız olmuştur ve bu genellikle iyi bir başlangıç ​​çözümüne ihtiyaç duydukları için yaygın bir sorundur. Hadi deneyelim

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

Şimdi bir cevap veriyor ama analitik çözümden farklı. TK sorununa birden fazla çözüm olduğu için sorun değil. İleri kinematiği hesaplayarak çözümümüzün doğru olduğunu doğrulayabiliriz

>> 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

ve bunun başladığımız dönüşümle aynı olup olmadığını kontrol etmek (ki bu).

Diğer kaynaklar:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.