Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

2. ünite / 10 · 4 saat

İleri kinematik: eklem açılarından TCP'ye

Dönüş matrisleri zinciri: altı eklem açısını bilerek tutucunun konumunu ve yönelimini hesapla; bir iki eklemli kolu altı eksene taşı.

Bu ünitenin sonunda

  • Z ve Y eksenleri etrafında dönüş matrislerini yazmak
  • Eklem dönüşlerini zincirleyerek TCP konumunu ve yönelimini bulmak
  • Sıfır duruşunun ve HOME duruşunun TCP konumunu elle doğrulamak
  • Bilekteki üç dönüşün tutucu yönünü nasıl belirlediğini açıklamak

Ders notları

İleri kinematik (FK) şu soruyu yanıtlar: eklem açılarını biliyorum, tutucu nerede ve nereye bakıyor? ESOF 323'te iki eklemli bir kol için x = l1 cos θ1 + l2 cos(θ1 + θ2) yazmıştın. Altı eksende aynı fikri, düzlem yerine dönüş matrisleriyle uygularız.

Dönüş matrisleri

Rz(a) = [[cos a, −sin a, 0], [sin a, cos a, 0], [0, 0, 1]]    Ry(a) = [[cos a, 0, sin a], [0, 1, 0], [−sin a, 0, cos a]]

Ry(a), Z eksenini (0, 0, 1) → (sin a, 0, cos a) noktasına götürür: pozitif q2 kolu +X yönüne yatırır. Her eklemin dönüşü, bir öncekinin çerçevesinde yapılır; bu yüzden matrisler soldan sağa çarpılır.

Zincir

R = Rz(q1) · Ry(q2) · Ry(q3) · Rz(q4) · Ry(q5) · Rz(q6)

Konum için uzuv vektörleri ilgili çerçevede toplanır: omuz (0, 0, 0,4); dirsek = omuz + R2·(0, 0, 0,45); bilek merkezi = dirsek + R3·(0, 0, 0,45); TCP = bilek merkezi + R6·(0, 0, 0,22). Bilekteki q4, q5, q6 bilek merkezini oynatmaz çünkü üç eksen ondan geçer; TCP ise bilek merkezinden R6 yönünde 0,22 m ilerdedir, yani bilek açıları aracı bilek merkezi etrafında çevirir ve yalnız q6 (araç ekseni etrafında roll) TCP'yi yerinde bırakır.

Elle doğrulama

Sıfır duruşunda (hepsi 0) kol dikey yukarıdır: TCP = (0, 0, 0,4 + 0,45 + 0,45 + 0,22) = (0, 0, 1,52). HOME duruşunda (q = 0°, 30°, 60°, 0°, 90°, 0°) üst kol dikeyden 30°, ön kol 90° (yatay) yatmıştır ve toplam eğim q2 + q3 + q5 = 180° olduğundan tutucu aşağı bakar: TCP = (0,675; 0; 0,570) m.

Simülasyonlar

Öğ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.

İleri kinematik: eklem kaydırıcıları, TCP okuması

Altı eklemi derece olarak kaydır; TCP konumu, bilek merkezi, tutucunun aşağıya sapması ve yakın tekillikler anında okunur. Eklem sınırları kaydırıcı aralıklarıdır. HOME düğmesi (0°, 30°, 60°, 0°, 90°, 0°) tutucuyu aşağı baktırır.

İki eklemli kol kinematiği

Hedefi taşımak ve ters kinematiği çözmek için tuvalde sürükle, ya da ileri kinematiğe geçip eklem açılarını kendin ayarla. Gölgeli halka erişilebilir çalışma alanıdır.

Yukarıdaki iki eklemli kol simülasyonu ESOF 323 7. haftadakinin aynısıdır, yeniden kullanıldı. 7. haftayı aç

Kendin dene

İleri kinematik simülasyonunda q1 ... q6 kaydırıcılarını tek tek oynat ve her birinin TCP'yi nasıl taşıdığını yaz: hangi eklem konumu çok, hangisi yalnızca yönelimi değiştiriyor? Sonra HOME duruşuna dön ve TCP'nin (0,675; 0; 0,570) olduğunu oku. q4, q5 ve q6'yı sırayla oynat: okuma kutusundaki bilek merkezi yerinde kalıyor mu, TCP kalıyor mu? Yukarıdaki ESOF 323 iki eklemli kol simülasyonunda aynı mantığı düzlemde dene.

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.

Python: ileri kinematik (dönüş matrisleri)
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: eklem ve kartezyen hedef
# 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

  • Matrisleri ters sırada çarpmak: her dönüş bir öncekinin çerçevesinde olduğundan sıra soldan sağadır, değişirse TCP yanlış yere gider.
  • Derece ile radyanı karıştırmak: kodda her şey radyan, kaydırıcılar derece gösterir; sınırda çevir.
  • Bilek açılarının konumu hiç etkilemediğini sanmak: bilek merkezi sabit kalır ama q4 ve q5 aracı onun etrafında çevirir, TCP 0,22 m yarıçapında oynar; yalnız q6 TCP'yi yerinde bırakır.
  • Sıfır duruşunu "kol yatay" sanmak: bu dersin sıfır duruşu dikey, yukarıdır.

Yazılım mühendisliği bağlantısı

İleri kinematik saf bir işlevdir: aynı girdi, aynı çıktı, yan etki yok. Bu yüzden en kolay test edilen parçadır ve sonraki her şey ona dayanır.

  • Kapalı biçimli bilinen duruşlarla (sıfır, HOME) test et: sayıyı elle hesapla, koda güvenme.
  • Özellik testi ekle: uzuv uzunlukları hangi açıda olursa olsun sabit kalmalı; rastgele eklem açılarıyla bu test yazılır.

Kendini sına

  1. Sıfır duruşunda (bütün eklemler 0) bu dersin kolunda TCP nerededir?

  2. Dönüş matrisleri neden zincir sırasıyla soldan sağa çarpılır?

  3. Yalnız q6 değişirken TCP'nin konumu neden değişmez?

  4. HOME duruşunda (0°, 30°, 60°, 0°, 90°, 0°) tutucu neden aşağı bakar?

Macademia'da ilgili

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç