YFM 发表于 2015-11-28 21:08:58

发六自由度机器手臂Inverse Kinematic 的Matlab代码


1. 首先由DH参数和各个关节角度q向量算出Transform MatrixT(q) 并得到末端在世界坐标系中的坐标X(q)。

2. 给q加一个少量的扰动得到q_ist,算出此时的雅克布矩阵 J(q_ist),Transform Matrix T(q_ist) 得到末端在世界坐标系中的坐标X(q_ist)。

3. 计算X(q)和X(q_ist)的差值 为err。 最后根据梯度下降发不断减小差值err使q_ist逐渐走向q。

Matlab的main函数片段:
%% q: Gelenkwinkel
%q=sym('q',);
%assume(q, 'real');

clear;
q=;
%% Jacobian test
q3=; % Tn+1
q2=; % Tn
delta_q=[-0.2*pi/180;
    -0.2*pi/180; 0; 0; 0; 0]; %speed
%%offset generation
q_rand=4*rand(6,1)-2;
q_ist=q+q_rand;
%% Robot parameter
D = ;
e2 = 0.0098;
aa = deg2rad(30);
ca = cos(aa);
sa = sin(aa);
c2a = cos(2*aa);
s2a = sin(2*aa);
d4b = D(3)+sa/s2a*D(4);
d5b = sa/s2a*D(4)+sa/s2a*D(5);
d6b = sa/s2a*D(5)+D(6);

%% DH parameter: . Winkel sind in RAD und Positionen in Meter


DH_Parameter = [ -q(1)*pi/180      D(1)0    pi/2;...
               (q(2)-90)*pi/1800   D(2) pi;...
               (q(3)+90)*pi/180-e2   0    pi/2;...
                  q(4)*pi/180      -d4b0    2*aa;...
               (q(5)-180)*pi/180 -d5b0    2*aa;...
               (q(6)+90)*pi/180-d6b0    pi ];

%% Erzeuge Transformationsmatrizen

T1 = DH(DH_Parameter(1,:));
T2 = DH(DH_Parameter(2,:));
T3 = DH(DH_Parameter(3,:));
T4 = DH(DH_Parameter(4,:));
T5 = DH(DH_Parameter(5,:));
T6 = DH(DH_Parameter(6,:));

%debug=T6(3,4);
%% Transformation Hand-Roboter ( Tipp: Anschlie脽end mit matlabFunction in eine Funktion umwandeln f眉r Inverse Kinematik)
%T(q) = ...
T_q=T1*T2*T3*T4*T5*T6;
%% Jacbobi-Matrix
%J(q) = ...
%J=zeros(4,4,6);
%n=3;
%J(:,:,n)=T1;
A=zeros(4,4,6);
A(:,:,1)=T1;
A(:,:,2)=T2;
A(:,:,3)=T3;
A(:,:,4)=T4;
A(:,:,5)=T5;
A(:,:,6)=T6;
J_q=Jacobian_calu(A);


J_test=Jacobi_Matrix(q);



%% when velocity == diff(tx ty tz) Jacobian correct
diff=Transformations_Matrix(q3)-Transformations_Matrix(q2);
velocity= J_test*delta_q;



%matlabFunction(J,'File','Jacobi_Matrix.m');
%% Inverse Kinematik

% q_soll_Transp = IK_Transp(q_ist,);

%q_soll_Pseudo = IK_Transp(q,);
q_soll_Pseudo = IK_Pseudo(q_ist,);

a=0;



dory_m 发表于 2016-1-30 09:31:15

学习,谢谢!!!

fuquan_dai 发表于 2016-1-30 11:07:55

谢谢分享!!!!

dory_m 发表于 2018-3-30 08:08:44

学习,谢谢!!!

Internationale 发表于 2018-6-3 12:21:06

学习了,谢谢楼主

Garrys 发表于 2018-6-3 17:57:39

这个看上去好复杂,谢谢分享

zf12862177 发表于 2018-6-3 18:21:52

谢谢楼主分享
页: [1]
查看完整版本: 发六自由度机器手臂Inverse Kinematic 的Matlab代码