Kanca
Açık kaynaklı bir robot deposunu (repository) klonladığında, robot
tanımının .urdf uzantılı tek bir XML dosyasında durduğunu görürsün.
İçini açtığında <link> ve <joint> etiketleri art arda sıralanır — DH
tablosundaki a, α, d, θ dörtlüsü burada hiç yok; onun yerine
origin (konum-yönelim) ve axis (eksen) etiketleri var. Aynı robotu
tarif eden iki bambaşka dil.
Sahne
Genel 6 eksenli kol — jenerik örnek kol, belirli bir üretici modeline karşılık gelmez.
Çerçeveler: X kırmızı · Y yeşil · Z mavi · soluk taban · parlak alet
Turuncu halka ve ok: etkin J6 dönme ekseni
Kontroller
TCP: x 0.5 · y 0 · z -0.25 m
Alet RPY: R 180° · P 0° · Y 0°
Ne oldu
URDF (Unified Robot Description Format), ROS ekosisteminin robot tanımlamak için kullandığı bir XML lehçesi. İki temel eleman etrafında kurulu:
<link> — robotun katı bir parçası (bağlantı). Alt elemanları:
inertial (kütle ve eylemsizlik), visual (görsel geometri), collision
(çarpışma kontrolü için kullanılan, genelde daha basit bir geometri).
<joint> — tam olarak iki linki (parent, child) birbirine
bağlar. type özniteliği eklem türünü belirler:
URDF type | Anlamı | DH karşılığı |
|---|---|---|
revolute | sınırlı açıyla döner, limit zorunlu | dönel eklem, θ canlı parametre |
continuous | sınırsız döner (limit yok) | dönel eklem, ama DH'de ayrı bir tür değil |
prismatic | doğrusal kayar, limit zorunlu | doğrusal eklem, d canlı parametre |
fixed | hiç hareket etmez | DH zincirinde genelde yer almaz |
Bunlar en sık kullanılan dördü; URDF şeması ayrıca floating (altı
serbestlik dereceli) ve planar (bir düzlem içinde hareket) türlerini de
tanımlar.
Her jointin origin elemanı, ebeveyn link çerçevesinden bu eklemin
çerçevesine sabit bir dönüşümü (xyz + roll-pitch-yaw) taşır; axis ise
dönme veya kayma yönünü tanımlar.
URDF bir ağaçtır. Her link'in yalnızca bir ebeveyni olabilir, dolayısıyla model döngü içeremez. Bunun pratik sonucu şu: delta veya paralel robotlar gibi kapalı kinematik zincirler URDF'de doğrudan ifade edilemez — bu tür mekanizmalar ya açık bir alt zincire indirgenerek yaklaşık modellenir, ya da simülatörün kendi ek kısıtlarıyla (loop closure) tamamlanır.
Kritik fark: DH, ardışık İKİ eklem EKSENİ arasındaki ilişkiyi dört
sayıyla (a, α, d, θ) özetleyen minimal, akademik bir gösterim —
b-universite-dh-ileri-kinematik dersinde gördüğün gibi bu dörtlü
matrise dönüşür. URDF ise her linke AÇIK bir koordinat çerçevesi
iliştirir ve her jointin konumunu doğrudan ebeveyne göre tarif eder —
daha uzun ama görsel/çarpışma geometrisini de aynı dosyada taşıyabilen,
yazılım mühendisliği amaçlı bir format. İkisi de aynı açık kinematik
zinciri tarif edebilir; DH matematiksel türetme için, URDF simülasyon ve
görselleştirme yazılımları için optimize edilmiş.
Yukarıdaki 6 eksenli robotun DH tanımına bak
(lib/robotics/robots/genericSixDof.ts): birinci eklemin alpha = π/2
olması, bir URDF dosyasında o eklemin <origin rpy="1.5708 0 0"> gibi bir
satıra karşılık geleceği anlamına gelir — aynı fiziksel dönüşü, farklı bir
XML köşesinde taşırsın.
Gerçek dünyada
Bu platformun reference-python/ klasöründeki PyBullet tabanlı projesi
gerçek bir URDF dosyasıyla çalışıyor: load_robot() fonksiyonu KUKA iiwa
robotunu p.loadURDF("kuka_iiwa/model.urdf", useFixedBase=True) çağrısıyla
yükler; joint_info() fonksiyonu ise her eklemin URDF'ten gelen tipini
(JOINT_REVOLUTE, JOINT_PRISMATIC, JOINT_FIXED vb.) okuyup insan
tarafından okunabilir bir isme çevirir. Yani PyBullet, DH değil URDF'i
"anadili" olarak konuşur — bu yüzden bu hattın (Hat G) geri kalanında
URDF sürekli karşına çıkacak.
Dene
genericSixDofRobot'un altı ekleminin alpha değerlerine bak (kod
içinde: π/2, 0, π/2, −π/2, π/2, 0). Kaydırıcıları oynatırken, bu
dönüşlerden her birinin bir URDF dosyasında <joint><origin rpy="...">
şeklinde nasıl yazılacağını zihninde canlandırmaya çalış — sayı aynı,
gösterim farklı.
Kaynak kodu: load_robot, genericSixDofRobot
Sonraki
Bir sonraki ders, bu URDF dosyasının PyBullet içinde nasıl fiziksel bir sahneye (yerçekimi, çarpışma, engeller) dönüştüğünü ele alıyor.