11.10.2013 Views

Materiály k 3. přednášce: Inverzní úloha kinematiky, Jacobián - FBMI

Materiály k 3. přednášce: Inverzní úloha kinematiky, Jacobián - FBMI

Materiály k 3. přednášce: Inverzní úloha kinematiky, Jacobián - FBMI

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Přednáška 3<br />

Inovace výuky předmětu Robotika v lékařství<br />

<strong>Inverzní</strong> <strong>úloha</strong> <strong>kinematiky</strong>, <strong>Jacobián</strong> kinematického řetězce, Newtonova<br />

iterační metoda s Jakobiánem<br />

<strong>Jacobián</strong> kinematického řetězce je matice, která transformuje limitně malou změnu orientace<br />

a polohy koncového bodu kinematického řetězce na limitně malou změnu zobecněných<br />

souřadnic v jednotlivých kin. dvojicích řetězce a naopak. Platí tedy následující vztahy :<br />

( q)<br />

q&<br />

x&<br />

= J ⋅<br />

( q)<br />

x<br />

q&<br />

= J ⋅<br />

T &<br />

(5.1)<br />

x& je vektor kartézských rychlostí koncového bodu kinem.<br />

řetězce<br />

q& je vektor zobecněných rychlostí v jednotlivých kinem.<br />

dvojicích řetězce<br />

Můžeme také říci, že Jakobián transformuje zobecněné rychlosti (vyjádřené v systému<br />

souřadnic dané kin. dvojice) v kinematických dvojicích řetězce na kartézské rychlosti jeho<br />

koncového bodu (vyjádřené v systému souřadnic prvního členu řetězce- rámu).<br />

Způsob získání jakobiánu :<br />

Vypočteme matice rychlostí základních pohybů kin. dvojic řetězce :<br />

V<br />

V<br />

V<br />

V<br />

V<br />

10<br />

1<br />

= 10<br />

ω ⋅ DRZ<br />

21 = ω<br />

2<br />

21<br />

32 = ω<br />

3<br />

32<br />

43 = ω<br />

4<br />

43<br />

54 = ω<br />

5<br />

54<br />

⋅ DRX<br />

⋅ DRX<br />

⋅ DRX<br />

⋅ DRZ<br />

(5.2)<br />

Poté všechny matice rychlostí základních pohybů převedeme do systému souřadnic poslední<br />

kinem. dvojice, abychom je mohli sečíst.<br />

V<br />

V<br />

V<br />

10<br />

5<br />

21<br />

5<br />

32<br />

5<br />

= T ⋅T<br />

⋅T<br />

⋅T<br />

⋅ V ⋅T<br />

⋅T<br />

⋅T<br />

⋅T<br />

−1<br />

54<br />

−1<br />

54<br />

−1<br />

43<br />

−1<br />

43<br />

−1<br />

32<br />

−1<br />

32<br />

−1<br />

21<br />

21<br />

2<br />

10<br />

1<br />

= T ⋅T<br />

⋅T<br />

⋅ V ⋅T<br />

⋅T<br />

⋅T<br />

= T ⋅T<br />

⋅ V ⋅T<br />

⋅T<br />

−1<br />

54<br />

−1<br />

43<br />

32<br />

3<br />

= T ⋅ ⋅T<br />

− V V<br />

, tj. platí<br />

43<br />

5<br />

1<br />

54<br />

43<br />

4<br />

54<br />

43<br />

32<br />

54<br />

21<br />

43<br />

32<br />

54<br />

43<br />

54<br />

Stránka 1 z 6


Inovace výuky předmětu Robotika v lékařství<br />

V = V + V + V + V + V<br />

50<br />

5<br />

10<br />

5<br />

21<br />

5<br />

32<br />

5<br />

43<br />

5<br />

54 .<br />

5<br />

(5.3)<br />

Tuto celkovou matici rychlosti mezi tělesem 5 vůči tělesu 0 v systému souřadnic tělesa 5, tj.<br />

V převedeme do systému souřadnic tělesa 0 následovně :<br />

50<br />

5<br />

V<br />

50<br />

0<br />

= T ⋅T<br />

⋅T<br />

⋅T<br />

⋅T<br />

⋅ V ⋅T<br />

⋅T<br />

⋅T<br />

⋅T<br />

⋅T<br />

−1<br />

10<br />

−1<br />

21<br />

−1<br />

32<br />

−1<br />

43<br />

−1<br />

54<br />

Matice rychlosti V 50 vyjadřuje rotační a translační rychlost tělesa 5 vůči tělesu 0 vyjádřenou<br />

0<br />

v systému souřadnic tělesa 0. Dále musíme vyjádřit vektor translačních rychlostí koncového<br />

bodu M kinematického řetězce vůči tělesu 0 (rámu), tj.<br />

v = T ⋅r<br />

= T ⋅ V ⋅r<br />

&<br />

M<br />

1<br />

n1<br />

M<br />

n<br />

n1<br />

v obecné podobě, ale v našem příkladu<br />

v = T ⋅ V ⋅ r ,<br />

M<br />

0<br />

50<br />

50<br />

5<br />

M<br />

5<br />

n1<br />

n<br />

M<br />

n<br />

.<br />

50<br />

5<br />

přičemž pro celkovou transformační matici platí vztah<br />

T = T ⋅ T ⋅ T ⋅ T ⋅ T<br />

50<br />

10<br />

Matici rychlosti<br />

21<br />

50<br />

0<br />

32<br />

43<br />

54<br />

,<br />

54<br />

43<br />

32<br />

21<br />

10<br />

(5.5)<br />

(5.4)<br />

V tak i vektor translačních složek rychlosti koncového bodu M<br />

v<br />

použijeme pro získání <strong>Jacobián</strong>u paže. Nejdříve si z obou dvou sestavíme vektor translační a<br />

rotační složky kartézské rychlosti následovně :<br />

⎡v<br />

⎢<br />

⎢v<br />

⎢<br />

⎣<br />

v<br />

M<br />

x 0<br />

M<br />

y 0<br />

M<br />

z 0<br />

⎡ω<br />

x<br />

⎢<br />

⎢ω<br />

y<br />

⎢<br />

⎣<br />

ω z<br />

rychlostí je<br />

⎤<br />

⎥<br />

⎥ = T50 ⋅ V50<br />

⋅r<br />

5<br />

⎥<br />

⎦<br />

500<br />

500<br />

500<br />

⎤ ⎡V<br />

⎥ ⎢<br />

⎥ = ⎢V<br />

⎥ ⎢<br />

⎦ ⎣<br />

V<br />

500<br />

500<br />

500<br />

( 3,<br />

2)<br />

( 1,<br />

3)<br />

M<br />

5<br />

⎤<br />

( )⎥ ⎥⎥ ,<br />

2,<br />

1<br />

⎦<br />

(5.6)<br />

⎡ 0 − ωza<br />

ωya<br />

⎤<br />

O<br />

⎢<br />

⎥ ⎡<br />

b Ω ⎤<br />

ba v<br />

Ω ba = ⎢ ωza<br />

0 − ωxa<br />

⎥ a a<br />

a<br />

V .<br />

a<br />

ba = a ⎢ ⎥<br />

T<br />

⎢<br />

⎥ ⎢ 0 0 ⎥<br />

⎣−<br />

ωya<br />

ωxa<br />

0<br />

⎣ ⎦<br />

⎦<br />

(5.7)<br />

protože platí že submatice úhlových<br />

0<br />

Stránka 2 z 6


Inovace výuky předmětu Robotika v lékařství<br />

Pokud z výrazů 5.6 a 5.7 na pravých stranách vytkneme zobecněné rychlosti, získáme rovnici<br />

v maticovém tvaru, kde matice na pravé straně představuje <strong>Jacobián</strong> paže, tj.:<br />

⎡ vx<br />

⎢<br />

⎢ v y<br />

⎢ vz<br />

⎢<br />

⎢ω<br />

x<br />

⎢<br />

ω<br />

⎢ y<br />

⎢<br />

⎣<br />

ω z<br />

M<br />

0<br />

M<br />

0<br />

M<br />

0<br />

500<br />

500<br />

500<br />

⎤<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

=<br />

[ J ( q)<br />

]<br />

⎡q&<br />

1 ⎤<br />

⎢ ⎥<br />

⎢<br />

q&<br />

2 ⎥<br />

⋅ ⎢q&<br />

⎥ 3<br />

⎢ ⎥<br />

⎢q&<br />

4 ⎥<br />

⎢<br />

⎣q&<br />

⎥<br />

5 ⎦<br />

, kde q& n je n-tá zobecněná rychlost n-té kin. dvojice<br />

Princip newtonovi iterační metody s Jakobiánem, která řeší úlohu inverzní <strong>kinematiky</strong> je<br />

patrný z následujícího diagramu :<br />

kde:<br />

X<br />

f(g) – X = g(q)<br />

g(q) ≤ error<br />

Yes<br />

qk equal to<br />

f(g) – X = g(q)≅0<br />

No<br />

qk+1 = qk – J -1 (qk)g(qk)<br />

X Žádaná poloha koncového bodu kinematického řetězce v kart. souřadnicích.<br />

f ( q)<br />

Aktuální hodnota koncového bodu řetězce, která je funkcí zobecněných<br />

souřadnic jednotlivých kinematických dvojic<br />

J ( q)<br />

Jakobián, který transformuji rychlosti zobecněných souřadnic (v kin. dvojicích)<br />

na rychlosti koncového bodu řetězce (v kart. souřadnicích). Platí tedy X& = J(<br />

q)<br />

q&<br />

a<br />

−1<br />

&<br />

q&<br />

= J ( q)<br />

X .<br />

Stránka 3 z 6


Inovace výuky předmětu Robotika v lékařství<br />

q k vektor zobecněných souřadnic v posledním kroku iterace, kde platí že<br />

f ( qk<br />

) − X = g(<br />

q)<br />

≅ 0<br />

g (q)<br />

chybová hodnota mezi žádanou polohou konc. bodu řetězce a aktuální<br />

hodnotou koncového bodu řetězce při daných zobecněných souřadnicích q .<br />

Vstupem pro newtonovu iterační metodu je žádaná poloha konc. bodu řetězce a jejím<br />

výstupem je odpovídající vektor zobecněných souřadnic, který této požadované poloze<br />

odpovídá. Řešení může být nekonečně mnoho, nebo jen jedno, ale také nemusí existovat,<br />

například pokud je žádaná poloha konc. bodu mimo manipulační prostor paže robota.<br />

Využití symbolic toolboxu Matlabu pro výpočet <strong>Jacobián</strong>u kinematického řetězce v laboratoři<br />

vysvětluje následný okomentovaný kód :<br />

clear all<br />

clc<br />

% konstanty R21,R32,R43,R54,R5M<br />

R10 = sym ('R10');<br />

R21 = sym ('R21');<br />

R32 = sym ('R32');<br />

R43 = sym ('R43');<br />

R54 = sym ('R54');<br />

R5M= sym ('R5M');<br />

% promennne<br />

% zobecněné polohy v kin. dvojicích<br />

fi10 = sym ('fi10');<br />

fi21 = sym ('fi21');<br />

fi32 = sym ('fi32');<br />

fi43 = sym ('fi43');<br />

fi54 = sym ('fi54');<br />

% zobecněné rychlosti v kin. dvojicích<br />

om10 = sym ('om10');<br />

om21 = sym ('om21');<br />

om32 = sym ('om32');<br />

om43 = sym ('om43');<br />

om54 = sym ('om54');<br />

r21=[0; R21; 0; 1]; % pruvodice mezi kinem dvojicemi<br />

r32=[0; 0; R32; 1];<br />

r43=[0; 0; R43; 1];<br />

r54=[0; 0; R54; 1];<br />

r5M=[0; 0; R5M; 1];<br />

% transformacni matice<br />

TT10=[cos(fi10) -sin(fi10) 0 0; sin(fi10) cos(fi10) 0 0; 0 0 1 0; 0 0 0 1];<br />

% rotace kolem z-ove osy o fi10<br />

TT21=[1 0 0 0; 0 cos(fi21) -sin(fi21) 0; 0 sin(fi21) cos(fi21) 0; 0 0 0 1];<br />

% rotace kolem x-ove osy o fi21<br />

Stránka 4 z 6


Inovace výuky předmětu Robotika v lékařství<br />

TT32=[1 0 0 0; 0 cos(fi32) -sin(fi32) 0; 0 sin(fi32) cos(fi32) 0; 0 0 0 1];<br />

% rotace kolem x-ove osy o fi32<br />

TT43=[1 0 0 0; 0 cos(fi43) -sin(fi43) 0; 0 sin(fi43) cos(fi43) 0; 0 0 0 1];<br />

% rotace kolem x-ove osy o fi43<br />

TT54=[cos(fi54) -sin(fi54) 0 0; sin(fi54) cos(fi54) 0 0; 0 0 1 0; 0 0 0 1];<br />

% rotace kolem z-ove osy o fi54<br />

TT50=TT10*TT21*TT32*TT43*TT54; % výsledná transformacni matice z prostoru<br />

telesa 5 do prostoru telesa 0<br />

% poloha koncového bodu M vůči rámu v homogennim zobrazení<br />

rM0=TT50*r5M;<br />

% Rychlosti<br />

% diferencialni operatory zakladnich pohybu<br />

DTX = [0 0 0 1;0 0 0 0;0 0 0 0;0 0 0 0];<br />

DTY = [0 0 0 0;0 0 0 1;0 0 0 0;0 0 0 0];<br />

DTZ = [0 0 0 0;0 0 0 0;0 0 0 1;0 0 0 0];<br />

DRX = [0 0 0 0;0 0 -1 0;0 1 0 0;0 0 0 0];<br />

DRY = [0 0 1 0;0 0 0 0;-1 0 0 0;0 0 0 0];<br />

DRZ = [0 -1 0 0;1 0 0 0;0 0 0 0;0 0 0 0];<br />

% rychlosti zakladnich pohybu<br />

V10S1=om10*DRZ;<br />

V21S2=om21*DRX;<br />

V32S3=om32*DRX;<br />

V43S4=om43*DRX;<br />

V54S5=om54*DRZ;<br />

% inverzni transformacni matice<br />

ITT10=inv(TT10);<br />

ITT21=inv(TT21);<br />

ITT32=inv(TT32);<br />

ITT43=inv(TT43);<br />

ITT54=inv(TT54);<br />

V10S5=ITT54*ITT43*ITT32*ITT21*V10S1*TT21*TT32*TT43*TT54;%transformace<br />

rychlosti V10S1 (v prostoru 1) na V10S5 (v prostoru 5)<br />

V21S5=ITT54*ITT43*ITT32*V21S2*TT32*TT43*TT54;<br />

V32S5=ITT54*ITT43*V32S3*TT43*TT54;<br />

V43S5=ITT54*V43S4*TT54;<br />

% vysledna matice rychlosti soustavy (z telesa 5 do telesa 0 v prostoru<br />

souradnic 5)<br />

V50S5=V10S5+V21S5+V32S5+V43S5+V54S5;<br />

simV50S5=simplify(V50S5); % zjednoduseni formalni uprava<br />

% rychlost bodu M vuci ramu<br />

Stránka 5 z 6


vM0=TT50*simV50S5*r5M;<br />

Inovace výuky předmětu Robotika v lékařství<br />

simvM0=simplify(vM0); % zjednoduseni formalni uprava, odsud beru translacni<br />

cast Jakobianu<br />

% vysledna matice rychlosti soustavy (z telesa 5 do telesa 0 v prostoru<br />

% souradnic 0)<br />

V50S0=ITT10*ITT21*ITT32*ITT43*ITT54*simV50S5*TT54*TT43*TT32*TT21*TT10;<br />

simV50S0=simplify(V50S0);<br />

%Vypocet J<br />

omega500=[simV50S0(3,2);simV50S0(1,3);simV50S0(2,1)]; %odsud beru rotacni<br />

cast Jakobianu<br />

v500=[simvM0(1,1);simvM0(2,1);simvM0(3,1)]; %odsud beru translační cast<br />

Jakobianu<br />

vkr(1,1)=v500(1,1); %sestaveni vektoru kart.rychlosti konc bodu<br />

vkr(2,1)=v500(2,1);<br />

vkr(3,1)=v500(3,1);<br />

vkr(4,1)=omega500(1,1);<br />

vkr(5,1)=omega500(2,1);<br />

vkr(6,1)=omega500(3,1);<br />

%jacobian([x*y*z; y; x+z],[x y z]) vypočet Jakobianu pomocí fce "jacobian"<br />

J = jacobian([vkr(1,1); vkr(2,1); vkr(3,1); vkr(4,1); vkr(5,1);<br />

vkr(6,1)],[om10 om21 om32 om43 om54])<br />

%ověření správnosti jakobiánu, rozdíl mezi kart. rychlostmi konc. bodu a<br />

%Jakobiáne násobeným vektorem zobecněných rychlostí musí být nulový<br />

"overeni=0"<br />

A=vkr-J*[om10;om21;om32;om43;om54];<br />

overeni=simple (A);<br />

Získaný a ověřený <strong>Jacobián</strong> lze pak implementovat do řídících struktur pro ovládání paže<br />

robota.<br />

Stránka 6 z 6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!