Kanca
Lise seviyesinde iki eklemli bir kolda aynı noktaya "dirsek yukarı" veya
"dirsek aşağı" iki farklı şekilde uzanılabildiğini gördün. Şimdi bunu kodda
test edeceksin: altı eksenli bir kolda forward_kinematics ile bir poz
üret, inverse_kinematics ile geri çöz — dönen açılar başlangıç
açılarınla birebir aynı çıkar mı?
Hazır
BoştaBağlantı yalnız bu sahnenin durumunu taşır; hesap veya ad içermez.
Genel 6 eksenli kol — jenerik örnek kol, belirli bir üretici modeline karşılık gelmez.
TCP: x 0.5 · y 0 · z -0.25 m · Alet RPY: R 180° · P 0° · Y 0°
Geliştirici ayrıntıları · çalışma sınırları
- azami çalışma süresi
- 8 s
- azami çıktı boyutu
- 64 KiB
- azami çıktı olayı
- 100
- azami eklem izi örneği
- 500
Ne oldu
robot.forward_kinematics(acilar) robotu HİÇ hareket ettirmez — sadece
"bu altı açıyla TCP nerede olurdu" sorusunu yanıtlar ve x/y/z alanları
olan bir poz nesnesi döner (önceki derste gördüğün get_tcp() ile aynı tip).
robot.inverse_kinematics(x=, y=, z=) bunun tersini yapar: bir konumdan
eklem açılarına döner — sayısal (iteratif) bir çözücü kullanır, çünkü altı
eklemli genel bir kol için kapalı formda tek bir formül yoktur.
Burada ilginç bir şey oluyor: hesaplanan_acilar, baslangic_acilari ile
BİREBİR AYNI çıkmaz — ama robot.movej(hesaplanan_acilar) sonrası TCP yine
aynı (x, y, z) noktasında olur. Sebep şu: altı eklemli bir kol, üç sayıyla
(x, y, z) tanımlanan bir konuma birden fazla açı kombinasyonuyla
ulaşabilir — konum üç serbestlik derecesi ister, kolun kendisi altı taşır.
Kalan üç serbestlik derecesi "aynı noktaya farklı dirsek/bilek
konfigürasyonlarıyla ulaşma" olarak ortaya çıkar. Çözücü, senin başlangıç
açılarını değil, ARAMAYA nereden başladığını (bu ortamda robotun o anki
duruşunu) esas alır — bu yüzden farklı bir geçerli çözüme iner.
Gerçek dünyada
Gerçek robot kontrolörleri de aynı belirsizlikle karşılaşır: bir
GetRobTarget/ters kinematik çağrısı birden fazla geçerli eklem
konfigürasyonundan birini döner (genelde robotun "o anki konfigürasyon"una
en yakın olanı, ani sıçramaları önlemek için). Mecademic ve ABB gibi
üreticiler bu yüzden konfigürasyon bilgisini (dirsek yukarı/aşağı, bilek
flip gibi) hedef veriyle birlikte ayrıca taşır — sadece (x, y, z) yetmez.
Dene
baslangic_acilari'nı [10, -45, 60, 0, 45, 0] yap ve tekrar çalıştır.
Yeni poz değişir mi? hesaplanan_acilar, yeni baslangic_acilari ile
aynı mı çıkıyor? Round-trip'in konumu (x, y, z) her zaman koruduğunu ama
açıları koruma GARANTİSİ vermediğini kendi gözlemlerinle doğrula.
Sonraki
Bu, Hat D'nin Python API'sinin son durağı. Sıradaki dersler ROS 2'nin temel
kavramlarını (düğüm, konu, servis) ele alıyor — burada öğrendiğin
movej/movel/FK/IK fikirleri orada da karşına, farklı bir arayüzle,
tekrar çıkacak.