700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > matlab欧拉迭代 matlab机械臂正逆运动学求解问题 使用牛顿-欧拉迭代算法

matlab欧拉迭代 matlab机械臂正逆运动学求解问题 使用牛顿-欧拉迭代算法

时间:2022-05-28 14:35:07

相关推荐

matlab欧拉迭代 matlab机械臂正逆运动学求解问题 使用牛顿-欧拉迭代算法

代码复制的有问题,详细见本楼,谢谢。

clc;clear;

DR=pi/180;

%time

j = 1;

for i = 0 : 0.1 : 2

%input

theta= 45 * DR *(1+6*exp((-1)*i/0.3)-8*exp((-1)*i/0.4));

theta_d= (-9*pi)/20*exp(-0.3*i)+20*exp(-2.5*i);

theta_dd= (27*pi/200)*exp(-0.3*i) - 50*exp(-2.5*i);

% DH parameters

the(1) = theta*DR; d(1)=2; a(1)=0; alp(1)=0;

the(2) = theta*DR; d(2)=0; a(2)=0; alp(2)=90*DR;

the(3) = theta*DR; d(3)=0; a(3)=3; alp(3)=0;

the(4) = 0; d(4)=0; a(4)=4; alp(4)=0;

%base link

w00=[0;0;0]; v00=[0;0;0]; w00d=[0;0;0];v00d=[0;9.8;0];

% rotation matrix

T01=[cos(the(1)), (-1)*sin(the(1)), 0, a(1); sin(the(1))*cos(alp(1)), cos(the(1))*cos(alp(1)), -sin(alp(1)), -sin(alp(1))*d(1); sin(the(1))*sin(alp(1)), cos(the(1))*sin(alp(1)), cos(alp(1)), cos(alp(1))*d(1); 0,0,0,1];

T12=[cos(the(2)), (-1)*sin(the(2)), 0, a(2); sin(the(2))*cos(alp(2)), cos(the(2))*cos(alp(2)), -sin(alp(2)), -sin(alp(2))*d(2); sin(the(2))*sin(alp(2)), cos(the(2))*sin(alp(2)), cos(alp(2)), cos(alp(2))*d(2);0,0,0,1];

T23=[cos(the(3)), (-1)*sin(the(3)), 0, a(3); sin(the(3))*cos(alp(3)), cos(the(3))*cos(alp(3)), -sin(alp(3)), -sin(alp(3))*d(3); sin(the(3))*sin(alp(3)), cos(the(3))*sin(alp(3)), cos(alp(3)), cos(alp(3))*d(3);0,0,0,1];

T34=[cos(the(4)), (-1)*sin(the(4)), 0, a(4); sin(the(4))*cos(alp(4)), cos(the(4))*cos(alp(4)), -sin(alp(4)), -sin(alp(4))*d(4); sin(the(4))*sin(alp(4)), cos(the(4))*sin(alp(4)), cos(alp(4)), cos(alp(4))*d(4);0,0,0,1];

R01= T01(1:3,1:3); R12= T12(1:3,1:3); R23= T23(1:3,1:3); R34= T34(1:3,1:3);

R10= R01'; R21= R12'; R32= R23'; R43= R34';

T10=T01';T21=T12';T32=T23';T43=T34';

p10= T10(1:3,4);p21= T12(1:3,4); p32= T23(1:3,4); p43= T34(1:3,4);

%center distance

pc11=[2;0;0]; pc22=[3;0;0];pc33=[4;0;0];

z=[0;0;1];

% link mass

m1=4; m2=2; m3=2;

% inertia tensor

Ic1=0; Ic2=0; Ic3=0;

% outward recrusion

%link1

w11 = R10*w00 + theta_d*z;

w11d = R10*w00d + cross(R10*w00, z*theta_d) + theta_dd*z;

v11d = R10*(cross(w00d, p10) + cross(w00, cross(w00, p10)) + v00d);

vc11d = cross(w11d, pc11) + cross(w11, cross(w11, pc11)) + v11d;

F11 = m1*vc11d;

N11 = Ic1*w11d + cross(w11, Ic1*w11);

% link2

w22 = R21*w11 + theta_d*z;

w22d = R21*w11d + cross(R21*w11, z*theta_d) + theta_dd*z;

v22d = R21*(cross(w11d, p21) + cross(w11, cross(w11, p21)) + v11d);

vc22d = cross(w22d, pc22) + cross(w22, cross(w22, pc22)) + v22d;

F22 = m2*vc22d;

N22 = Ic2*w22d + cross(w22, Ic2*w22);

% link3

w33 = R32 * w22 + theta_d * z;

w33d = R32*w22d + cross(R32*w22, z*theta_d) + theta_dd*z;

v33d = R32*(cross(w22d, p32) + cross(w22, cross(w22, p32)) + v22d);

vc33d = cross(w33d, pc33) + cross(w33, cross(w33, pc33)) + v33d;

F33 = m3*vc33d;

N33 = Ic3*w33d + cross(w33, Ic3*w33);

% Inward iterations: i: 3->1

f44 = [0; 0; 0]; n44 = [0; 0; 0];

% i = 3

f33 = R34*f44 + F33;

n33 = N33 + R34*n44 + cross(pc33, F33) + cross(p43, R34*f44);

tau3 = n33'* z;

Tau_3(j) = tau3;

%plot(i,Tau_3,'-b')

% i = 2

f22 = R23*f33 + F22;

n22 = N22 + R23*n33 + cross(pc22, F22) + cross(p32, R23*f33);

tau2 = n22'* z;

Tau_2(j) = tau2;

%plot(i,Tau_2,'-k')

% i =1

f11 = R12*f22 + F11;

n11 = N11 + R12*n22 + cross(pc11, F11) + cross(p21, R12*f22);

tau1 = n11'* z;

Tau_1(j) = tau1;

%plot(i,Tau_1,'-r')

j = j + 1;

%tau4 = tau1+ tau2+tau3

end

i = 0: 0.1:2

plot(i, Tau_3,'-b')

hold on;

plot(i, Tau_2,'-r')

hold on;

plot(i, Tau_1,'-g')

hold on;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。