1. ünite / 10 · 4 saat
Robot kolu hücresi: eksenler, uzuvlar ve çalışma alanı
Altı eksen neden gerekir, bu dersin sanal kolu neyden yapılı, TCP nedir ve kol nereye erişebilir.
Bu ünitenin sonunda
- Seri bir kolun eklem, uzuv ve serbestlik derecesi kavramlarını açıklamak
- Altı eksenin üç konum ve üç yönelim için gerektiğini gerekçelendirmek
- Küresel bilek ve bilek merkezini tanımlamak
- Aşağı bakan tutucunun belirli bir yükseklikteki yatay erişimini hesaplamak
Ders notları
Endüstriyel bir robot kolu, döner eklemlerle birbirine bağlanmış rijit uzuvlardan oluşan seri bir zincirdir. Her eklem bir motorla sürülür ve tek bir açıyla tanımlanır. Bağımsız eklem sayısı serbestlik derecesidir (DOF). Üç boyutta bir cismin konumu üç, yönelimi üç sayıyla anlatılır; tutucuyu keyfi bir konuma ve yönelime götürebilmek için en az altı eklem gerekir. Bu yüzden bu dersin kolu altı eksenlidir.
Bu dersin sanal kolu
Kol tamamen bu dersin modelidir; ölçüleri lib/robot-kolu/kinematics.ts içinde tanımlıdır ve hiçbir üreticinin ürünü değildir. Eklemlere q1 ... q6 diyoruz.
- q1: taban, dikey eksen etrafında dönüş (sınır ±170°).
- q2 ve q3: omuz ve dirsek, yatay eksen etrafında eğilme (−100° ... 120° ve ±150°). Uzuv uzunlukları 0,45 m ve 0,45 m; omuz tabandan 0,4 m yukarıda.
- q4, q5, q6: bilek, sırasıyla roll, pitch, roll (±180°, ±120°, ±180°). Üç eksen tek bir noktada kesişir: bilek merkezi. Buna küresel bilek denir; ters kinematiği çözülebilir kılan da budur (3. ünite).
- TCP (tool centre point): tutucunun parmak ucu merkezi. Bilek merkezinden 0,22 m ilerdedir (0,1 m flanş + 0,12 m tutucu).
Çerçeveler ve çalışma alanı
Üç koordinat çerçevesi vardır: dünya (masa üzerinde, Z yukarı), taban ve TCP. Programdaki bütün konumlar dünya çerçevesinde metre cinsindendir; kol dururken sıfır duruşu dikey, yukarı bakar.
Bilek merkezi, omuzdan en çok a2 + a3 = 0,9 m uzaklıkta olabilir; yani erişim bir küre kabuğudur. Tutucu aşağı bakıyorsa bilek merkezi TCP'nin 0,22 m üstündedir ve yatay erişim şuna iner:
Parça alma yüksekliğinde (z = 0,03 m) bu yaklaşık 0,887 m eder; en uzağa 0,18 m yükseklikte erişilir (tam 0,9 m). Eklem sınırları bu kabuğu ayrıca daraltır. Hücrede alma bölgesi A ile yerleştirme bölgesi B, tabandan 0,55 m ileride ve y = ∓0,32 m'dedir; ikisi de rahatça erişim içindedir.
Simülasyon
Öğretim modeli: sanal kol bu dersin kendi modelidir. Uzuv ölçüleri, eklem sınırları, hız ve ivme değerleri ve güvenlik eşikleri bu sayfadaki kodda tanımlı ders sabitleridir; hiçbir robot üreticisinin ürünü, dili ya da eğitim içeriği değildir ve ders resmî bir üretici eğitimi değildir. Gerçek bir hücrede ölçüler üreticinin belgelerinden, güvenlik değerleri risk değerlendirmesinden gelir.
Çalışma alanı: kol nereye erişir
Tutucu aşağı bakarken seçtiğin TCP yüksekliğinde erişilebilen yatay halka çizilir (bilek merkezi omuzdan en çok 0,9 m uzakta olabilir). Alma bölgesi A ve bırakma bölgesi B işaretlidir; halkanın içinde mi, dışında mı görürsün. Kaydırıcıyla yüksekliği değiştir.
Kendin dene
Çalışma alanı simülasyonunda TCP yüksekliğini 0,03 m'den 0,6 m'ye kadar değiştir ve yatay erişim halkasının dış yarıçapını izle. En geniş yarıçapı hangi yükseklikte okuyorsun? Sonra parça alma yüksekliğine (0,03 m) dön ve alma bölgesi A ile yerleştirme bölgesi B'nin halkanın içinde kaldığını doğrula. Son olarak hedefi 0,9 m'nin ötesine çek ve neden hiçbir yüksekliğin yetmediğini yaz.
Kod
ArmScript bloklarını ArmScript simülasyonuna yapıştırıp tarayıcında çalıştırabilirsin. Python blokları yalnızca standart kütüphane kullanır; kendi bilgisayarında çalıştır.
import math
def rz(a): c, s = math.cos(a), math.sin(a); return [[c, -s, 0], [s, c, 0], [0, 0, 1]]
def ry(a): c, s = math.cos(a), math.sin(a); return [[c, 0, s], [0, 1, 0], [-s, 0, c]]
def mm(A, B): return [[sum(A[i][k] * B[k][j] for k in range(3)) for j in range(3)] for i in range(3)]
def mv(A, v): return [sum(A[i][k] * v[k] for k in range(3)) for i in range(3)]
D1, A2, A3, D6, TOOL = 0.4, 0.45, 0.45, 0.1, 0.12 # uzuv ölçüleri (m)
def fk(q): # q: altı eklem açısı, radyan
R2 = mm(rz(q[0]), ry(q[1])) # omuz: taban dönüşü sonra eğilme
R3 = mm(R2, ry(q[2])) # dirsek
R6 = mm(mm(mm(R3, rz(q[3])), ry(q[4])), rz(q[5])) # küresel bilek: roll-pitch-roll
shoulder = [0, 0, D1]
elbow = [a + b for a, b in zip(shoulder, mv(R2, [0, 0, A2]))]
wrist = [a + b for a, b in zip(elbow, mv(R3, [0, 0, A3]))]
tcp = [a + b for a, b in zip(wrist, mv(R6, [0, 0, D6 + TOOL]))]
return tcp, R6
print(fk([math.radians(x) for x in (0, 30, 60, 0, 90, 0)])[0]) # [0.675, 0.0, 0.5697...]# ArmScript ilk program
speed 40 # hız yüzdesi
ptp joints(0, 30, 60, 0, 90, 0) # eklem uzayı: açılar derece
print "bekleme duruşu", here() # TCP'nin konumu
ptp pose(0.5, 0.2, 0.3) # kartezyen hedef, tutucu aşağı bakar
print "hedefe vardı", here()Sık yapılan hatalar
- "Altı eksen" ile "altı motor"u karıştırmak: eksen sayısı bağımsız eklem sayısıdır, tutucunun açılıp kapanması ayrı bir eksen olarak sayılmaz.
- TCP'yi flanşın merkezi sanmak: tutucu takılınca TCP flanştan 0,12 m ileri kayar ve bütün hedefler değişir.
- Erişimi yalnızca uzuv uzunluğuna bakarak hesaplamak: eklem sınırları ve çarpışmalar gerçek erişimi küçültür.
- Dünya çerçevesindeki yüksekliği tabana göre vermek: masa z = 0 kabul edilir, omuz 0,4 m yukarıdadır.
Yazılım mühendisliği bağlantısı
Ölçüleri, eklem sınırlarını ve hız değerlerini koda gömme; tek bir yapılandırma dosyasında tut. Bu dersin kodunda uzuv ölçüleri tek yerde (ARM, LIMITS) tanımlıdır ve bütün testler onlara bağlıdır.
- Birimi adın parçası yap (metre, radyan) ve sınırda dönüştür: dışarıya derece, içeride radyan.
- Bir ölçü değişince hangi testlerin kırılacağını önceden bil: erişim ve ileri kinematik testleri bu yüzden sayılarla yazılır.
Kendini sına
Tutucuyu uzayda istediğin konuma ve yönelime götürebilmek için en az kaç bağımsız eklem gerekir?
Bilek merkezi nedir?
Tutucu aşağı bakarken z = 0,03 m yükseklikte TCP'nin yatay erişimi yaklaşık kaçtır?
TCP neden önemlidir?
