Kratka navodila za uporabo Robotics Toolbox

Transcription

Kratka navodila za uporabo Robotics Toolbox
Kratka navodila za uporabo Robotics Toolbox (release 7)
Robotic Toolbox za Matlab release 7. (Peter I. Corke) je orodje, ki omogoča konstukcijo robotov,
njihov grafični prikaz, računanje direktne in inverzne kinematike, načrtovanje enostavnih trajektorij
gibanja, ter izračune direktne in inverzne dinamike. Skonstruiranega robota, oziroma njegov
dinamični model, je možno uporabiti tudi kot blok v Simulinku.
Toolbox je prosto dostopen na internet naslovu http://www.cat.csiro.au/cmst/staff/pic/robot/ in ni
uraden Mathworks izdelek. Ko program razpakirate ga je potrebno dodati v Matlab-ov 'Toolbox'
direktorij in nastaviti pot do njega (z opcijo 'Add with subfolders' za Matlab 6).
V nadaljevanju so opisane nekatere funkcije, ki so na razpolago. Do njih dostopamo z ukazi v
Matlab-ovem delovnem prostoru.
Homogene transformacije
Izračun matrike TR za translacijo za x po X osi, y po Y osi in z po Z osi:
TR = transl(x,y,z)
Matrike za rotacijo okoli X,Y ali Z osi za kot dobimo z:
RX = rotx(kot), RY = roty (kot), RZ = rotz(kot)
Transformacijska matrika TR za rotacije roll, pitch, yaw (rotacije okoli Z, Y, X) za podane kote:
TR = rpy2tf([R P Y])
Iz transformacijske matrike TR izračuna kote roll/pitch/yaw.
tr2rpy(TR)
Primer
Koordinatni sistem preslikajte glede na univerzalni koordinatni sistem na naslednji način:
-
rotirajte okoli Z za − π 2 ,
rotirajte okoli Y za π 2 ,
premaknite po X za 0.5,
in izračunajte položaj koordinatnega izhodišča novega sistema v originalnem KS.
Rešitev:
Najprej izračunamo transformacijsko matriko T:
T = transl(0.5, 0.0, 0.0) * roty(pi/2) * rotz(-pi/2),
nato izračunamo položaj novega KS v starem:
nov_položaj=T*[0 0 0 1]'.
Robot, konstrukcija robota, direktna in inverzna kinematika
Robota opišemo s pomočjo klasične Denavit-Hartenberg predstavitve na naslednji način:
L1 = link([α a θ d T])
Kjer so (glejte sliko 3.8 iz podlag za predavanja):
α kot med osema sklepa, to je kot med zi-1 in zi osjo vzdolž xi osi,
a najkrajša razdalja med osema sklepov, med zi-1 in zi osjo vzdolž xi osi,
θ kot zasuka posameznega sklepa, to je kot xi-1 in xi osjo vzdolž zi-1 osi,
d najkrajša razdalja med normalama na osi sklepa, to je med izhodiščem i-1 koordinatnega sistema
do xi osi, vzdolž zi-1 osi,
T indikator tipa sklepa, če je postavljen na 0 je sklep rotacijski, če je 1 je translacijski.
Ko določimo vse njegove člene z ukazi Li= link(..), sestavimo n-osnega robota z naslednjim
ukazom:
moj_robot = robot({L1 L2 L3 .. Ln})
in ga izrišemo z :
plot(moj_robot,q),
kjer je q vektor dolžine n, ki označuje trenutni položaj osi robota in ga moramo prej definirati. Če
gre za rotacijo so uporabljene enote radiani, pri translaciji pa niso definirane, oziroma so po
uporabnikovi izbiri (metri, čevlji ...).
Ročno premikanje robota v notranjih koordinatah:
drivebot(moj_robot)
Položaj vrha robota (direktni kinematični model), glede na trenutne vrednosti notranjih koordinat q
izračunamo z ukazom:
DH = fkine(moj_robot,q)
Inverzno kinematiko izračunamo z ukazom:
qnov = ikine(moj_robot, DH, q0, M)
kjer je DH matrika določena po Denavit-Hartenberg postopku, ki označuje položaj in orientacijo
vrha robota. M je vektor s šestimi členi, ki ga moramo določiti, če ima robot manj kot 6 prostostnih
stopenj M. Število enic v vektorju mora biti enako številu sklepov robota. Začetna (približna)
rešitev, kot jo poda uporabnik, je podana z vektorjem q0.
Opozorilo! Na ta način dobimo zmeraj samo eno rešitev inverzne kinematike, zato je takšen način
izračuna veliko manj učinkovit, kot če uporabimo simbolično izpeljane enačbe. Če je q0 daleč od
prave rešitve se podaljša čas izračuna.
PRIMER: Scara robot
Vpišemo naslednje zaporedje ukazov:
L1 = link([0 1 0 0 0])
L2 = link([0 1 0 0 0])
moj_robot = robot({L1 L2})
moj_robot.name = 'Scara'
Z ukazom robot smo tako skonfigurirali dvoosnega robota z imenom Scara, kar nam Matlab prikaže
kot:
moj_robot =
Scara (2 axis, RR)
grav = [0.00 0.00 9.81]
alpha
0.000000
0.000000
A
1.000000
1.000000
theta
0.000000
0.000000
standard D&H parameters
D
0.000000
0.000000
R/P
R
R
(std)
(std)
Robota izrišemo tako, da določimo vrednosti notranjih koordinat, s katerimi se bo robot izrisal in z
uporabo ukaza plot.
q = [0,0]
% Izris robota v začetnem položaju, Slika 1
plot(moj_robot,q)
disp('Stisni tipko za nadaljevanje')
pause
% Stisni tipko za nadaljevanje
q = [pi/4,-pi/2] % Zasuk osi za pi/4 in –pi/2, Slika 2
plot(moj_robot,q)
Poglejmo si sedaj še izračun direktne in inverzne kinematike. Izračunajmo najprej položaj vrha
robota, če imamo podani notranji koordinati:
q = [pi/4, -pi/2]
vrh = fkine(moj_robot, q)
Sedaj iz položaja vrha robota izračunajmo nazaj vrednost notranjih koordinat:
q0 = [1 1]
M = [1 1 0 0 0 0]
qnov = ikine(moj_robot, vrh, q0, M)
Vidimo, da se q in qnov razlikujeta, saj ima inverzna kinematika v primeru ko je vrh robota v točki,
ki jo razberemo iz matrike vrh dve rešitvi, programski paket pa nam vrne samo eno.
2
1
Z
yz x
0
Scara
-1
-2
2
1
2
1
0
0
-1
-1
-2
Y
-2
X
Slika 1: Robot Scara v začetnem položaju
2
Z
1
zy
x
0
Scara
-1
-2
2
1
2
1
0
0
-1
Y
-1
-2
-2
X
Slika 2: Robot Scara, zasuk osi za q1 =pi/4 rad in q2=–pi/2 rad