採用的是John H.Craig在【機器人學導論】中的改進DH模型
1.六軸座標系
2.DH參數
i |
αi−1 |
ai−1 |
di |
θi初值 |
1 |
0 |
0 |
0 |
0 |
2 |
-90 |
a1 |
0 |
-90 |
3 |
0 |
a2 |
0 |
-90 |
4 |
-90 |
a3 |
d4 |
0 |
5 |
90 |
0 |
0 |
0 |
6 |
-90 |
0 |
d6 |
0 |
3.相鄰關節變換矩陣
3.1 基礎變換
ii−1T=⎣⎢⎢⎡cθisθicαi−1sθisαi−10−sθicθicαi−1cθisαi−100−sαi−1cαi−10ai−1−sαi−1dicαi−1di1⎦⎥⎥⎤(3-1)
3.2 各個軸間變換
按照第二節給出的DH參數。其中ci=cθi,si=sθi
10T=⎣⎢⎢⎡c1s100−s1c1000010a0001⎦⎥⎥⎤(3-2)
21T=⎣⎢⎢⎡c20−s20−s20−c200100a1001⎦⎥⎥⎤(3-3)
32T=⎣⎢⎢⎡c3s300−s3c30000100001⎦⎥⎥⎤(3-4)
43T=⎣⎢⎢⎡c40−s40−s40−c4001000001⎦⎥⎥⎤(3-5)
54T=⎣⎢⎢⎡c50s50−s50c500−1000001⎦⎥⎥⎤(3-6)
65T=⎣⎢⎢⎡c60−s60−s60−c6001000d601⎦⎥⎥⎤(3-7)
3.3 末端變換矩陣
60T=10T21T32T43T54T65T=⎣⎢⎢⎡r11r21r310r12r22r320r13r23r330xyz1⎦⎥⎥⎤(3-8)
xyzr11r21r31r12r22r32r13r23r33βαγ=c1(a1+a3c23−d4s23+a2c2)−d6(s23c1c5+s1s4s5+s5c4c1c23)=s1(a1+a3c23−d4s23+a2c2)−d6(s23s1c5−c1s4s5+s5c4s1c23)=−a3s23−d4c23−a2s2+d6(s23c4s5−c23c5)=c1[c23(c4c5c6−s4s6)−s23s5c6]+s1(s4c5c6+c4s6)=s1[c23(c4c5c6−s4s6)−s23s5c6]−c1(s4c5c6+c4s6)=s23(−c4c5c6+s4s6)−c23s5c6=c1[c23(−c4c5s6−s4c6)+s23s5s6]+s1(−s4c5s6+c4c6)=s1[c23(−c4c5s6−s4c6)+s23s5s6]−c1(−s4c5s6+c4c6)=s23(c4c5s6+s4c6)+c23s5s6=−c1(c23c4s5+s23c5)−s1s4s5=−s1(c23c4s5+s23c5)+c1s4s5=s23c4s5−c23c5=atan2(−r31,r112+r212)=atan2(r21/cβ,r11/cβ)=atan2(r32/cβ,r33/cβ)(3-9)
若β=±90°,則
βαγ=±90°=0°=±atan2(r12,r22)
4. matlab符號表達式推算
function []=test()
syms t1 t2 t3 t4 t5 t6
syms a1 a2 a3 d4 d6
a0=0;a4=0;a5=0;
d1=0;d2=0;d3=0;d5=0;
T0_1 = Trans(0,0,0,t1)
T1_2 = Trans(-90,a1,0,t2)
T2_3 = Trans(0,a2,0,t3)
T3_4 = Trans(-90,a3,d4,t4)
T4_5 = Trans(90,0,0,t5)
T5_6 = Trans(-90,0,d6,t6)
T0_6 = T0_1*T1_2*T2_3*T3_4*T4_5*T5_6;
x=simplify(T0_6(1,4));
y=simplify(T0_6(2,4));
z=simplify(T0_6(3,4));
[rz ry rx]=Rot2Eular(T0_6(1:3,1:3));
end
function [T]=Trans(alpha,a,d,t)
T=[cos(t) -sin(t) 0 a;...
cosd(alpha)*sin(t) cos(t)*cosd(alpha) -sind(alpha) -sind(alpha)*d;...
sind(alpha)*sin(t) cos(t)*sind(alpha) cosd(alpha) cosd(alpha)*d;...
0 0 0 1];
end
function [z y x] = Rot2Eular(r)
z = simplify(atan2(-r(1,1),(r(1,1)^2+r(2,1)^2)^0.5));
y= simplify(atan2(r(2,1)/cos(z),r(1,1)/cos(z)));
x= simplify(atan2(r(3,2)/cos(z),r(3,3)/cos(z)));
end
5.matlab正解計算
function [pose]=fkine(rob,q)
pose.trans=[0 0 0];
pose.quat=[1 0 0 0];
s1=sin(q(1));c1=cos(q(1));
s2=sin(q(2));c2=cos(q(2));
s3=sin(q(3));c3=cos(q(3));
s4=sin(q(4));c4=cos(q(4));
s5=sin(q(5));c5=cos(q(5));
s6=sin(q(6));c6=cos(q(6));
s23=sin(q(2)+q(3));c23=cos(q(2)+q(3));
a1=rob.a1;a2=rob.a2;a3=rob.a3;
d6=rob.d6;
tmp1 = a1+a3*c23-rob.d4*s23+a2*c2;
tmp2 = s23*c1*c5+s1*s4*s5+s5*c4*c1*c23;
tmp3 = s23*s1*c5-c1*s4*s5+s5*c4*s1*c23;
%% XYZ
pose.trans(1)=c1*tmp1-d6*tmp2;
pose.trans(2)=s1*tmp1-d6*tmp3;
pose.trans(2)=-a3*s23-d4*c23-a2*s2+d6*(s23*c4*s5-c23*c5);
%% quat
r11 = c1*(c23*(c4*c5*c6-s4*s6)-s23*s5*c6)+s1*(s4*c5*c6+c4*s_6);
r21 = s1*(c23*(c4*c5*c6-s4*s6)-s23*s5*c6)-c1*(s4*c5*c6+c4*s6);
r31 = s23*(-c4*c5*c6+s4*s6)-c23*s5*c6;
r12 = c1*(c23*(-c4*c5*s6-s4*c6)+s23*s5*s6)+s1*(-s4*c5*s6+c4*c6);
r22 = s1*(c23*(-c4*c5*s6-s4*c6)+s23*s5*s6)-c1*(-s4*c5*s6+c4*c6);
r32 = s23*(c4*c5*s6+s4*c6)+c23*s5*s6;
r13 = -c1*(c23*c4*s5+s23*c5)-s1*s4*s5;
r23 = -s1*(c23*c4*s5+s23*c5)+c1*s4*s5;
r33 = s23*c4*s5-c23*c5;
R=[r11 r12 r13;r21 r22 r23;r31 r32 r33];
pose.quat=rotm2quat(R);
end