www.gusucode.com > matlab编程求解机器人的正逆解 采用遗传算法对机器人进行路径规划源码程序 > code/基本代码/CoorTransform.m
%此程序主要用来求质心坐标及建立惯性系 %求坐标变换矩阵 %CD_Trans( a,d,theta,alpha ) Initialization CD0_trans = cell(1,7); CDf_trans = cell(1,7); CD0_Ter2Ba = cell(1,7); CDf_Ter2Ba = cell(1,7); Coordinate0_Ba = cell(1,7); Coordinatef_Ba = cell(1,7); Coordinate_Ter = cell(1,7); Coordinate_0 = cell(1,7); %惯性系下各质心坐标 SAT_Ba = [0 0 0 1]'; theta_i0 = [90 90 90 0 90 -90 0]; theta_id = [90 80 70 25 90 -75 0]; for i=1:7 CD0_trans{i} = CD_Transd(A(i),d(i),theta_i0(i),Alpha(i)); CDf_trans{i} = CD_Transd(A(i),d(i),theta_id(i),Alpha(i)); end %求到基坐标系的变换矩阵 for i=1:7 CD0_Ter2Ba{i} = eye(4); CDf_Ter2Ba{i} = eye(4); for j = 1:i CD0_Ter2Ba{i} = CD0_Ter2Ba{i}*CD0_trans{j}; CDf_Ter2Ba{i} = CDf_Ter2Ba{i}*CDf_trans{j}; end end for i = 1:7 Coordinate_Ter{i} = [0,0,0,1]'; end Coordinate_Ter{3} = [-1.25,0,0,1]'; Coordinate_Ter{4} = [-1.25,0,0,1]'; for i = 1:7 Coordinate0_Ba{i} = CD0_Ter2Ba{i}*Coordinate_Ter{i}; Coordinate0_Ba{i} = Coordinate0_Ba{i}(1:3); Coordinatef_Ba{i} = CDf_Ter2Ba{i}*Coordinate_Ter{i}; Coordinatef_Ba{i} = Coordinatef_Ba{i}(1:3); end for i=1:7 Coordinate = [0 0 0]'; Coordinate_f = [0 0 0]'; Coordinate = m(i)*Coordinate0_Ba{i}+Coordinate; Coordinate_f = m(i)*Coordinatef_Ba{i}+Coordinate_f; end Coordinate = Coordinate/sum(m); %质心坐标 Coordinate_f = Coordinate_f/sum(m); %建立惯性坐标系原点为系统质心,求得惯性坐标系和基坐标系之间的变换矩阵 CD0_in2Ba =[eye(3),-Coordinate; 0,0,0,1]; CDf_in2Ba = [eye(3),-Coordinate_f; 0 0 0 1]; CD0_e = CD0_Ter2Ba{7}\CD0_in2Ba; CDf_e = CDf_Ter2Ba{7}\CDf_in2Ba; Q0 = RPY2Q(eye(3)); Qe = RPY2Q(CD0_e(1:3,1:3)); Q_d0 = RPY2Q(eye(3)); Q_ed = RPY2Q(CDf_e(1:3,1:3)); Pe = CD0_e(1:3,4); Ped = CDf_e(1:3,4); q0 = Q0(2:4);yita0 = Q0(1); qe = Qe(2:4);yitae = Qe(1); q_ed = Q_ed(2:4);yita_ed = Qe(1);