机器人学中雅可比矩阵求导计算(Angeles法)

442
0
2020年12月12日 09时03分

文章目录

 

  • 算法求解过程
  • 代码及解析(参考Robotics Toolbox)

 

算法求解过程

 

微信图片_20201209133503

 

参数说明:

 

  • a i a_iai:{0}-{i}之间的矢量距离
  • e i e_iei:在base系下描述的关节轴向量
  • p pp:{0}-{p}之间的矢量距离
  • r i r_iri:{i}-{p}之间的矢量距离

 

微信图片_20201209133522

 

微信图片_20201209133533

 

微信图片_20201209133544

 

代码及解析(参考Robotics Toolbox)

 

1607492600(1)

 

以下内容转载请联系!

 

% SerialLink.jacob_dot Derivative of Jacobian
%
% JDQ = R.jacob_dot(Q, QD) is the product (6x1) of the derivative of the Jacobian (in the world frame) and the joint rates.
% Notes::
% - This term appears in the formulation for operational space control XDD = J(Q)QDD + JDOT(Q)QD
%
function Jdot = jacob_dot(robot, q, qd)
	n = robot.n;
    links = robot.links;
    % 使用Angeles的表示法:
    %   [Q,a] ~ [R,t] the per link transformation                                       相邻连杆间的变换
    %   P ~ R   the cumulative rotation t2r(Tj) in world frame                          世界坐标系的累积旋转变换t2r(Tj)
    %   e       the last column of P, the local frame z axis in world coordinates       P的最后一列,世界坐标中的局部坐标系z轴
    %   w       angular velocity in base frame                                          base坐标系中的角速度 
    %   ed      deriv of e                                                              e的导数,其中e为关节轴向量在base下的表示
    %   r       is distance from final frame                                            {i}距最后坐标系的距离
    %   rd      deriv of r                                                              r的导数
    %   ud      temporary variable                                                      ud = e × rd

    %            e1        e2      ...      en        
    %   J = [----------------------------------------]           
    %          e1 x r1   e2 x r2   ...    en x rn     
    %
    %          w 
    %   t = [-----]
    %          v
    %
    %   t = J * dot_q
    %   robert.h.x.s
    % 提取数据,为算法计算做准备
    for i=1:n
        T = links(i).A(q(i));
        Q{i} = t2r(T);          % 旋转矩阵
        a{i} = transl(T)';      % 平移矩阵
    end
    % P为累积变换,e{i}为{i}系的旋转轴z轴变换到base系下的表示,P195
    P{1} = Q{1};
    e{1} = [0 0 1]';
    for i=2:n
        P{i} = P{i-1}*Q{i};
        e{i} = P{i}(:,3);
    end

    % step 1 求{i}在base系下的角速度w{i},有速度叠加(注意点:旋转矩阵求逆==求转置),P207-P209
    w{1} = qd(1)*e{1};
    for i=1:(n-1)
        w{i+1} = qd(i+1)*[0 0 1]' + Q{i}'*w{i};
    end

    % step 2 求dot_e,P207-P209
    ed{1} = [0 0 0]';
    for i=2:n
        ed{i} = cross(w{i}, e{i});
    end

    % step 3 求dot_r,方法同step2(注意点:有矢量叠加),P207-P209
    rd{n} = cross(w{n}, a{n});
    for i=(n-1):-1:1
        rd{i} = cross(w{i}, a{i}) + Q{i}*rd{i+1};
    end

    % 求{i}-{p}的距离,P198
    r{n} = a{n};
    for i=(n-1):-1:1
        r{i} = a{i} + Q{i}*r{i+1};
    end

    % 求d(e x rd)/dt,其中d(e x rd)/dt = dot_e x r + e x dot_r ,P207-P209
    ud{1} = cross(e{1}, rd{1});
    for i=2:n
        ud{i} = cross(ed{i}, r{i}) + cross(e{i}, rd{i});
    end

    % step 4 swap ud and ed,目的:为了统一工具箱的描述形式
    v{n} = qd(n)*[ud{n}; ed{n}];
    for i=(n-1):-1:1
        Ui = blkdiag(Q{i}, Q{i});                               % blkdiag 分块对角矩阵
        v{i} = qd(i)*[ud{i}; ed{i}] + Ui*v{i+1};
    end

    Jdot = v{1};    % 结果得到的是 dot_J * dot_q,即公式的后半部分

 

详细参考《Fundamentals of Robotic Mechanical Systems Theory, Methods, and Algorithms》,着重参考5.1-5.5部分,具体公式推导有空再补。

 

微信图片_20201209133819

发表评论

后才能评论