0x01 graphic

Modelowanie Manipulatorów

Wydział: IMIR

Kierunek: Automatyka i Robotyka

Rok: I mgr

Temat: Kinematyka - lab2

Grupa: 2

Prowadzący: mgr inż. Dariusz Baran

Imię i nazwisko: Paweł Piec i Marcin Baszak

Data: 20.03.2011r

Nasze zadanie polegało na przygotowaniu procedury obliczającej współrzędne złączowe danej pozycji efektora. Wejściem naszej procedury jest macierz przekształcenia jednorodnego T0E a wynikiem działania są wartości zmiennych złączowych q1, q3, q4 i d2.

W celu wyliczenia wartości zmiennych złączowych skorzystano z zależności wyznaczonych w sprawozdaniu nr 1.

Wszystkie wartości zmiennych zostały dobrane tak jak w sprawozdaniu nr 1 (tak aby były w zakresie)

Poniżej zawartość mPlików:

  1. Utworzenie modelu Model.m

%Model

clear

clc

syms q1 d2 a2 q3 a3 q4 d5

A1=mA(q1,0,0,0);

A2=mA(0,-d2,a2,0);

A3=mA(q3,0,a3,sym(-pi/2));

A4=mA(q4,0,0,sym(-pi/2));

A5=mA(sym(pi/2),d5,0,0);

zmie=[1 0 0 0;0 1 0 0;1 0 0 0;1 0 0 0];

T03=A1*A2*A3;

T3e=A4*A5;

T0e=A1*A2*A3*A4*A5;

zam(zmie,T03);

  1. Wyliczenie i przedstawienie wartości zmiennych Obliczenia.m

clc

% przyjecie parametrow

s2r=pi/180;

r2s=180/pi;

q1z=25;

q3z=45;

q4z=-30;

a2z=0.1;

a3z=0.2;

d2z=0.6;

d5z=0.2;

% wyznaczanie przykladowych wartosci i macierzy transformacji

q1r=q1z*s2r;

q3r=q3z*s2r;

q4r=q4z*s2r;

T0E=subs(T0e,{q1,q3,q4,a2,a3,d2,d5},{q1r,q3r,q4r,a2z,a3z,d2z,d5z});

for i=1:4

for j=1:4

if abs(T0E(i,j))<0.0000001

T0E(i,j)=0;

end

end

end

% wyznaczenie wektora pa

pax=T0E(1,4)-T0E(1,3)*d5z;

pay=T0E(2,4)-T0E(2,3)*d5z;

paz=T0E(3,4)-T0E(3,3)*d5z;

%obliczenie kata Theta3

K=((pax^2+pay^2-a2z^2-a3z^2)/(2*a3z*a2z));

q31r=atan2(sqrt(1-K^2),K);

q31s=q31r*r2s;

q32r=atan2(-sqrt(1-K^2),K);

q32s=q32r*r2s;

%obliczenie kata Theta1

K1=pay*(a3z*cos(q31r)+a2z)-pax*(a3z*sin(q31r));

K2=pax*(a3z*cos(q31r)+a2z)+pay*(a3z*sin(q31r));

q11r=atan2(K1,K2);

q11s=q11r*r2s;

K12=pay*(a3z*cos(q32r)+a2z)-pax*(a3z*sin(q32r));

K22=pax*(a3z*cos(q32r)+a2z)+pay*(a3z*sin(q32r));

q12r=atan2(K12,K22);

q12s=q12r*r2s;

d21=-paz;

%obliczenie kąta Theta4

q41r=atan2(T0E(3,2),-T0E(1,2)*cos(q11r+q31r)-T0E(2,2)*sin(q11r+q31r));

q41s=q41r*r2s;

q42r=atan2(T0E(3,2),-T0E(1,2)*cos(q12r+q32r)-T0E(2,2)*sin(q12r+q32r));

q42s=q42r*r2s;

% zakresy ruchu

zrq1=[-120*s2r, 120*s2r];

if ((q11r>zrq1(1))&&(q11r<zrq1(2)))

t1=(sprintf('Pierwszy zestaw rozwiązań:\nKąt Theta1.1 w zakresie ruchu i wynosi: %3.0f st',q11s));

else

t1=(sprintf('Kąt Theta1.1 poza zakresem ruchu i wynosi: %3.0f st',q11s));

end

if ((q12r>zrq1(1))&&(q12r<zrq1(2)))

t12=(sprintf('Drugi zestaw rozwiązań:\nKąt Theta1.2 w zakresie ruchu i wynosi: %3.0f st',q12s));

else

t12=(sprintf('Kąt Theta1.2 poza zakresem ruchu i wynosi: %3.0f st',q12s));

end

zrq3=[-90*s2r, 90*s2r];

if ((q31r>zrq3(1))&&(q31r<zrq3(2)))

t2=(sprintf('Kąt Theta3.1 w zakresie ruchu i wynosi: %3.0f st',q31s));

else

t2=(sprintf('Kąt Theta3.1 poza zakresem ruchu i wynosi: %3.0f st',q31s));

end

if ((q32r>zrq3(1))&&(q32r<zrq3(2)))

t22=(sprintf('Kąt Theta3.2 w zakresie ruchu i wynosi: %3.0f st',q32s));

else

t22=(sprintf('Kąt Theta3.2 poza zakresem ruchu i wynosi: %3.0f st',q32s));

end

zrq4=[-90*s2r, 0];

if ((q41r>zrq4(1))&&(q41r<zrq4(2)))

t3=(sprintf('Kąt Theta4.1 w zakresie ruchu i wynosi: %3.0f st',q41s));

else

t3=(sprintf('Kąt Theta4.1 poza zakresem ruchu i wynosi: %3.0f st',q41s));

end

if ((q42r>zrq4(1))&&(q42r<zrq4(2)))

t32=(sprintf('Kąt Theta4.2 w zakresie ruchu i wynosi: %3.0f st',q42s));

else

t32=(sprintf('Kąt Theta4.2 poza zakresem ruchu i wynosi: %3.0f st',q42s));

end

zrd2=[0.3, 0.8];

if ((d21>zrd2(1))&&(d21<zrd2(2)))

t4=(sprintf('Przesów D2 w zakresie ruchu i wynosi: %1.1f m\n',d21));

else

t4=(sprintf('Przesów D2 poza zakresem ruchu i wynosi: %1.1f m\n',d21));

end

% wyznaczenie pa

pas=subs(T0e,{q1,q3,q4,a2,a3,d2,d5},{q11r,q31r,q4r,a2z,a3z,d21,d5z});

for i=1:4

for j=1:4

if abs(pas(i,j))<0.0000001

pas(i,j)=0;

end

end

end

psx=pas(1,4)-pas(1,3)*d5z;

psy=pas(2,4)-pas(2,3)*d5z;

psz=pas(3,4)-pas(3,3)*d5z;

% dpax dpay dpaz powinny byc rowne 0

dpax=pax-psx;

dpay=pay-psy;

dpaz=paz-psz;

% wyswietlenie wartości zadanych i wartości obliczonych

qz=[ d2z q1z q3z q4z];

t5=(sprintf('Wartości zadane:\nd2: %1.1f m\tq1: %1.0f st\tq3: %1.0f st\tq4: %1.0f st\t',d2z,q1z,q3z,q4z));

qo=[ d21 q11s q31s q41s];

t6=(sprintf('\nWartości wyliczone :\nzestaw 1 -> d2: %1.1f m\tq1: %1.0f st\tq3: %1.0f st\tq4: %1.0f st\t\nzestaw 2 -> d2: %1.1f m\tq1: %1.0f st\tq3: %1.0f st\tq4: %1.0f st\t',d21,q11s,q31s,q41s,d21,q12s,q32s,q42s));

disp(t1)

disp(t2)

disp(t3)

disp(t4)

disp(t12)

disp(t22)

disp(t32)

disp(t4)

disp(t5)

disp(t6)

%macierz rotacji

R03=T03(1:3,1:3);

W wyniku działania powyższych mPlików otrzymano:

0x01 graphic

Wyznaczenie 3-ch pierwszych współrzędnych złączowych poprzez numeryczne rozwiązanie układu równań:

  1. Utworzenie modelu (plik Model3.m)

clc

format short

syms th1 d2 a2 th3 a3 th4 d4

A1=mA(th1,0,0,0);

A2=mA(0,d2,a2,0);

A3=mA(th3,0,a3,sym(-pi/2));

T03=A1*A2*A3;

T03p=subs(T03,{a2,a3},{0.12,0.2});

  1. Dokonanie obliczeń (plik Lab3.m)

%transformacja kąt-radian radian-kąt

r2s=180/pi;

s2r=pi/180;

%współrzędne punktu końcowego

pax=0.1590;

pay=0.3;

paz=0.35;%0.6;

%układ równań

y1=pax-T03p(1,4);

y2=pay-T03p(2,4);

y3=paz-T03p(3,4);

%wyliczenie zmiennych

rozw=solve(y1,y2,y3,'th1,th3,d2');

A=rozw.d2;

B=rozw.th1;

C=rozw.th3;

d21=double(A(1,1));

q11r=double(B(1,1));

q11s=q11r*r2s;

q31r=double(C(1,1));

q31s=q31r*r2s;

%przyjęcie dopuszczalnych zakresów ruchu

zrq1=[-120*s2r, 120*s2r];

zrq3=[-90*s2r, 90*s2r];

zrd2=[0.3, 0.8];

t1=(sprintf('Współrzedne położenia Pax= %1.2f m\tPay= %1.2f m\tPaz= %1.2f m\t',pax,pay,paz));

%sprawdzenie, czy otrzymane wartości mieszczą się w zakresie ruchu

if ((q11r>zrq1(1))&&(q11r<zrq1(2)))

t2=(sprintf('Kąt Theta1.1 w zakresie ruchu i wynosi: %3.0f st',q11s));

else

t2=(sprintf('Kąt Theta1.1 poza zakresem ruchu i wynosi: %3.0f st',q11s));

end

if ((q31r>zrq3(1))&&(q31r<zrq3(2)))

t3=(sprintf('Kąt Theta3.1 w zakresie ruchu i wynosi: %3.0f st',q31s));

else

t3=(sprintf('Kąt Theta3.1 poza zakresem ruchu i wynosi: %3.0f st',q31s));

end

if ((d21>zrd2(1))&&(d21<zrd2(2)))

t4=(sprintf('Przesów D2 w zakresie ruchu i wynosi: %1.1f m\n',d21));

else

t4=(sprintf('Przesów D2 poza zakresem ruchu i wynosi: %1.1f m\n',d21));

end

disp(t1)

disp(t2)

disp(t3)

disp(t4)

  1. W wyniku działania otrzymaliśmy:

0x01 graphic

Następnym etapem jest przetestowanie działania obliczeń analitycznych i numerycznych dla 6 punktów przestrzeni roboczej dla 3-ch pierwszych zmiennych złączowych:

Współrzędne punktów

Metoda analityczna

Metoda numeryczna

x

y

z

q1[o]

q3[o]

d2[m]

q1[o]

q3[o]

d2[m]

0.05

-0.28

-0.35

-53

-39

0.35

-53

-39

0.35

0.15

-0.23

-0.40

-23

-51

0.40

-23

-51

0.40

0.30

0.00

-0,45

0

0

0.45

0

0

0.45

0.28

0.05

-0.50

-16

39

0.50

-16

39

0.50

0.26

0.10

-0.55

-10

46

0.55

-10

46

0.55

0.24

0.15

-0.60

4

41

0.60

4

41

0.60

Jak widać wyniki uzyskane za pomocą obu metod są takie same. Metoda numeryczna jest o tyle łatwiejsza że nie wymaga od użytkownika umiejętności przekształceń macierzy i wyznaczania kątów.