文章目录

  • 写在前面
  • 矢量积法——改进D-H法
  • 微分变换法——改进D-H法
  • Manipulator for Jacobian(Jacobian for short)——标准D-H法
  • 微分变换法——标准D-H法

写在前面

断更了俩月,找工作加毕业论文,心塞心塞,忙里偷闲还是得总结学习一下~

关于雅可比矩阵,其重要性不言而喻。说实话,踩了挺多坑的,看了许多教材和文献,都没有统一求法(也可能是我道行较浅学艺不精没看出来= = ),主要是没有统一建模的方法,导致标准D-H法有自己的雅可比矩阵求法,改进D-H法也有自己相应的求法。这里只是做个简单的总结分类,没有讨论两种模型对应方法之间的互换关系,本质上都是一样的,因为追根溯源还是得分析SDH(标准DH)和MDH(改进DH)之间的关系。至于他俩有啥不同,我前面的一篇博客中机器人学回炉重造(1):正运动学、标准D-H法与改进D-H法的区别与应用(附ABB机械臂运动学建模matlab代码)已经简单说明了,一是固连的坐标系位置不同,二是坐标系X轴方向的确定方式不同,三是坐标系之间变换的规则不同,但最后都能得到相同的变换矩阵及末端位姿。

下面我陈列一下雅可比矩阵各个求法及对应的建模方法:

1.上一篇博客中,根据定义求雅可比矩阵——改进D-H法

参考文献:Stanford Oussama Khatib大神的《机器人学》公开课及对应的讲义

​ John Craig的《Introduction to robotics: mechanics and control》

2.矢量积法——改进D-H法

参考文献:Stanford Oussama Khatib大神的《机器人学》公开课及对应的讲义

​ 蔡自兴,谢斌《机器人学》

3.微分变换法——改进D-H法

参考文献:蔡自兴,谢斌《机器人学》

4.Manipulator for Jacobian(Jacobian for short)——标准D-H法

参考文献:《Robotics: Modelling, Planning and Control》

​ 《Robot Dynamics and Control Second Edition》

5.微分变换法——标准D-H法

第一个方法在上一篇博客中已经贴了代码了,推导过程ppt中也都有,这里就不再总结了。


矢量积法——改进D-H法

矢量积法求得的雅可比矩阵是相对于基座标系的,市面上的方法都是基于改进D-H法进行建立的

多翻教材!多翻教材!多翻教材!我只是一个愉快的搬运工~

仔细分析上两幅图,可以看出,对于关节i而言,其在末端产生的角速度为:
ω=∑i=1n(ϵˉiZi)q˙i\omega=\sum_{i=1}^{n}\left(\bar{\epsilon}_{i} Z_{i}\right) \dot{q}_{i} ω=i=1∑n​(ϵˉi​Zi​)q˙​i​
其中,ziz_izi​是坐标系{i}的z轴单位向量在基座标系{0}中的表示。

关节i在末端产生的线速度为:
v=∑i=1n[ϵiZi+ϵˉi(Zi×pin0)]q˙iv=\sum_{i=1}^{n}\left[\epsilon_{i} Z_{i}+\bar{\epsilon}_{i}\left(Z_{i} \times p^0_{i n}\right)\right] \dot{q}_{i} v=i=1∑n​[ϵi​Zi​+ϵˉi​(Zi​×pin0​)]q˙​i​
式中,Pin0P^0_{i n}Pin0​表示末端坐标原点相对坐标系{i}的位置矢量在基座标系{0}中的表示,即Pin0=i0R∗pinP^0_{i n} = {^{0}_{i}}R * p_{in}Pin0​=i0​R∗pin​

在公式(1)和(2)中εi={0revolute 1prismatic \varepsilon_{i}=\left\{\begin{array}{ll}{0} & {\text { revolute }} \\ {1} & {\text { prismatic }}\end{array}\right.εi​={01​ revolute  prismatic ​来表示关节是旋转关节还是移动关节,其中εˉ1=1−εi\bar{\varepsilon}_{1}=1-\varepsilon_{i}εˉ1​=1−εi​

所以,对于旋转关节i,雅可比矩阵第i列为
Ji=[zi×pin0zi]=[zi×(i0R∗pin)zi]J_{i}=\left[\begin{array}{c}{z_{i} \times p_{in}^{0}} \\ {z_{i}}\end{array}\right]=\left[\begin{array}{c}{z_{i} \times\left(_{i}^{0} R * p_{in}\right)} \\ {z_{i}}\end{array}\right] Ji​=[zi​×pin0​zi​​]=[zi​×(i0​R∗pin​)zi​​]
对于移动关节i,有
Ji=[zi0]J_{i}=\left[\begin{array}{c}{z_{i}} \\ {0}\end{array}\right] Ji​=[zi​0​]
附上Matlab代码:

% use the vector product method to construct jacobian matrix
% 改进D-H法建模
% 该方法求出的雅可比矩阵是相对于基座标系{0}的
function J = shiliangji_Jacobian_MDH(T)n = length(T); % number of degrees of freedom
k = [0; 0; 1];% preallocationg the Jacobian matrix
Jv = zeros(3, n);
Jw = zeros(3, n);for i = 1: 6R = T{i}(1: 3, 1: 3);T_i_n = (inv(T{i})) * T{n};p_i_n = T_i_n(1: 3, 4);z_i = R * k;Jv(:, i) = cross(z_i, R*p_i_n);Jw(:, i) = z_i;
endJ = [Jv; Jw];endfunction [p_xyz, T] = My_Forward_Kinematics_MDH(theta, d, a, alp)
% 改进D-H建模
%Theta, d, a, Alpha are lists (1 row matrix) with n inputs
%       Where n is the number of links in the arm.
%
% theta:     Joint Angles (theta)
% d:     Link offset
% a:     Link Length
% alp:   Link Twist (alpha)
% n:     Robot degrees of freedom
n = length(theta);
% deg2rad可能需要可能不需要,视情况而定
th = theta;
% th = deg2rad(theta);
% alp = deg2rad(alp);T1_n = eye(4);
T{n} = zeros(4);for i = 1 : nTi_n= [cos(th(i))             -sin(th(i))               0            a(i);sin(th(i))*cos(alp(i))  cos(th(i))*cos(alp(i))  -sin(alp(i))  -sin(alp(i))*d(i);sin(th(i))*sin(alp(i))  cos(th(i))*sin(alp(i))  cos(alp(i))   cos(alp(i))*d(i);0                        0                         0            1];T1_n = T1_n * Ti_n;T{i} = T1_n;
endp_xyz = T{n}(1: 3, 4)';end

微分变换法——改进D-H法

市面上的微分变换法也是基于改进D-H法建立的,不过该方法求得的雅可比矩阵是相对于末端坐标系的,因此最后需要左乘旋转矩阵

我直接贴上蔡自兴《机器人学》中的公式,如下

附上Matlab 代码:

% Differential transformation for jacobian
% 改进D-H法建模
% 该方法求出的雅可比矩阵是相对于末端坐标系{n}的,需要左乘矩阵转变为相对于基系
function J = weifen_Jacobian_MDH(T)n = length(T);
k = [0 0 1];% preallocationg the Jacobian matrix
Jv = zeros(3, n);
Jw = zeros(3, n);for i = 1: 5T_i_n = inv(T{i}) * T{n};J_T_ix = k * cross(T_i_n(1: 3, 4), T_i_n(1: 3, 1));J_T_iy = k * cross(T_i_n(1: 3, 4), T_i_n(1: 3, 2));J_T_iz = k * cross(T_i_n(1: 3, 4), T_i_n(1: 3, 3));Jv(:, i) = [J_T_ix; J_T_iy; J_T_iz];Jw(:, i) = [T_i_n(3, 1); T_i_n(3, 2); T_i_n(3, 3)];
end
J_T = [Jv; Jw];
J_T(:, 6) = [0; 0; 0; 0; 0; 1];R_0_n = T{n}(1: 3, 1: 3);
TT = zeros(6, 6);
TT(1: 3, 1: 3) = R_0_n;
TT(4: 6, 4: 6) = R_0_n;J = TT * J_T; % 将相对于末端的雅可比矩阵变换成相对于基系的end

Manipulator for Jacobian(Jacobian for short)——标准D-H法

在提到的两个参考书中,这个方法都是基于标准D-H坐标系的,并且该方法求得的雅可比矩阵是相对于基座标系的

这个方法的推导过程有些麻烦,但是看懂了理解起来就很清晰了,不过我有些公式没整明白,还得多看看多想想才行。其过程请翻阅《Robot Dynamics and Control Second Edition》中的p107-p116,结果如下

对于旋转关节i,有
Ji=[zi−1×(pn−pi−1)zi−1]J_{i}=\left[\begin{array}{c}{z_{i-1} \times\left(p_{n}-p_{i-1}\right)} \\ {z_{i-1}}\end{array}\right] Ji​=[zi−1​×(pn​−pi−1​)zi−1​​]
对于移动关节i,有
Ji=[zi−10]J_{i}=\left[\begin{array}{c}{z_{i-1}} \\ {0}\end{array}\right] Ji​=[zi−1​0​]
其中,zi−1z_{i-1}zi−1​表示坐标系{i-1}的z轴单位向量在座标系{0}中的表示;pn−pi−1p_n - p_{i-1}pn​−pi−1​表示末端坐标系{n}原点相对于坐标系{i-1}原点的位置矢量,pnp_npn​由i0T_{i}^{0} Ti0​T中的位置矢量给出,pi−1p_{i-1}pi−1​由i−10T_{i-1}^{0} Ti−10​T中的位置矢量给出。

看着和上面的矢量积法非常类似,就是下标和位置矢量不一样。比较一下两者的不同,我觉得因为在改进D-H法中,关节i的轴线是ziz_izi​,而在标准D-H法中,关节i的轴线是zi−1z_{i-1}zi−1​,因此这个方法和矢量积法本质是一样的。

附上Matlab代码:

% 求manipulator jacobian or jacobian for short,不需要进行微分计算
% 标准D-H法建模
function J = My_Jacobian(T)n = length(T); % number of degrees of freedom
k = [0; 0; 1];% preallocationg the Jacobian matrix
Jv = zeros(3, n);
Jw = zeros(3, n);for i = 1: 6if i == 1R = eye(3);p_im = T{n}(1: 3, 4);elseR = T{i-1}(1: 3, 1: 3);p_im = T{n}(1: 3, 4) - T{i-1}(1: 3, 4);endzi_1 = R * k;Jv(:, i) = cross(zi_1, p_im);Jw(:, i) = zi_1;
end% Assemblying the Jacobian matrix
J = [Jv; Jw];end% 标准D-H法求正运动学
% p_xyz:    the position vector of the last joint
% T:        homogeneous transformation
function [p_xyz, T] = My_Forward_Kinematics(theta, d, a, alp)
%Theta, d, a, Alpha are lists (1 row matrix) with n inputs
%       Where n is the number of links in the arm.
%
% theta:     Joint Angles (theta)
% d:     Link offset
% a:     Link Length
% alp:   Link Twist (alpha)
% n:     Robot degrees of freedom
n = length(theta);
% deg2rad可能需要可能不需要,视情况而定
th = theta;T1_n = eye(4);
T{n} = zeros(4);for i = 1 : nTi_n= [cos(th(i)),   -sin(th(i))*cos(alp(i)),   sin(th(i))*sin(alp(i)),    a(i)*cos(th(i));sin(th(i)),    cos(th(i))*cos(alp(i)),  -cos(th(i))*sin(alp(i)),    a(i)*sin(th(i));0,               sin(alp(i)),              cos(alp(i)),               d(i);0,                         0,                        0,                 1];T1_n = T1_n * Ti_n;T{i} = T1_n;
endp_xyz = T{n}(1: 3, 4)';
end

微分变换法——标准D-H法

简单来说,微分变换法,不管是基于标准DH法来求还是基于改进DH法来求,两种计算方法的区别最终还是归结于两种建模方式的不同。基于改进DH法,从前面程序J_T(:, 6) = [0; 0; 0; 0; 0; 1];可以看出微分相对于末端 旋转 本地坐标系就是自己Z轴 且没有平移就是000 001,前面五个关节的Ji分别对应T16到T56;而基于标准DH法,关节坐标系从{0}到{5},{6}直接是末端坐标系,因此六个关节的Ji分别对应T06到T56。

附上Matlab代码:

% 微分变换法
% 标准dh法
% 该方法求出的雅克比矩阵是相对于末端坐标系{n}的,需要左乘矩阵转变为相对于基系
function J = weifen_Jacobian_SDH(T)n = length(T);
k = [0 0 1];% preallocationg the Jacobian matrix
Jv = zeros(3, n);
Jw = zeros(3, n);for i = 1: 6if i == 1T_i_n = T{n};elseT_i_n = inv(T{i-1}) * T{n};endJ_T_ix = k * cross(T_i_n(1: 3, 4), T_i_n(1: 3, 1));J_T_iy = k * cross(T_i_n(1: 3, 4), T_i_n(1: 3, 2));J_T_iz = k * cross(T_i_n(1: 3, 4), T_i_n(1: 3, 3));Jv(:, i) = [J_T_ix; J_T_iy; J_T_iz];Jw(:, i) = [T_i_n(3, 1); T_i_n(3, 2); T_i_n(3, 3)];
end
J_T = [Jv; Jw];R_0_n = T{n}(1: 3, 1: 3);
TT = zeros(6, 6);
TT(1: 3, 1: 3) = R_0_n;
TT(4: 6, 4: 6) = R_0_n;J = TT * J_T;
end

机器人学回炉重造(2-2):雅可比矩阵的求法——矢量积法、微分变换法、Manipulator Jacobian(Jacobian for short)相关推荐

  1. 机器人学回炉重造(2-3):基本雅可比矩阵与其他雅可比矩阵

    文章目录 基本雅可比矩阵 定义 求法 其他雅可比矩阵 定义 求法 补充:几何雅可比与解析雅可比 基本雅可比矩阵 定义 用笛卡尔坐标描述线速度(linear velocity)和角速度(angular ...

  2. 机器人学回炉重造(2-4):运动学奇异位型分析

    文章目录 什么是运动学奇异位型? 例子:平面二连杆机械手的奇异位型 奇异位型解耦 腕部奇异位型 手臂奇异位型 转载:6轴串联关节机器人的奇异点 参考文献 什么是运动学奇异位型? 在初步系统地了解了机器 ...

  3. 机器人学回炉重造(1-2):各种典型机械臂的正运动学建模(标准D-H法)

    文章目录 写在前面 三连杆平面机械臂 平行四边形操作臂 闭链结构 例:平行四边形操作臂 球形臂 拟人臂 球腕 斯坦福机械臂 带球形手腕的拟人化机械臂 DLR机械臂 参考文献 写在前面 本文所有机械臂均 ...

  4. 机器人学回炉重造(5-2):关节空间规划方法——梯形加减速(与抛物线拟合的线性函数)、S型曲线规划

    文章目录 写在前面 学习代码都记录在[个人github](https://github.com/xuuyann/RobotLearningCode)上,欢迎关注~ 梯形加减速(与抛物线拟合的线性函数) ...

  5. Vue回炉重造之封装防刷新考试倒计时组件

    你好,我是Vam的金豆之路,可以叫我豆哥.2019年年度博客之星.技术领域博客专家.主要领域:前端开发.我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀 ...

  6. 《回炉重造 Java 基础》——集合(容器)

    整体框架 绿色代表接口/抽象类:蓝色代表类. 主要由两大接口组成,一个是「Collection」接口,另一个是「Map」接口. 前言 以前刚开始学习「集合」的时候,由于没有好好预习,也没有学好基础知识 ...

  7. 真人电影中的幻想生物迷墙:索尼克为什么被骂到回炉重造?

    <大侦探皮卡丘>上映在即,当网友们对着雷佳音配音的皮卡丘大呼好萌好萌时,我们仿佛又来到了大型真香现场--明明在几个月之前,当人们看到毛茸茸的大叔音皮卡丘时还每个细胞都充满了拒绝. 也有一种 ...

  8. Vue回炉重造之封装一个实用的人脸识别组件

    你好,我是Vam的金豆之路,可以叫我豆哥.2019年年度博客之星.技术领域博客专家.主要领域:前端开发.我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀 ...

  9. 回炉重造之数据结构【一】基本概念

    回炉重造之数据结构[一]绪论 文章目录 回炉重造之数据结构[一]绪论 数据结构的基本概念 基本概念和术语 数据结构的三要素 算法和算法评价 算法的基本概念 算法效率的度量 数据结构的基本概念 基本概念 ...

最新文章

  1. 欧洲、加拿大、澳大利亚新增2.1万个点可购买比特币现金
  2. Selenium3自动化测试——13.下载文件功能
  3. Linux 编程中的API函数和系统调用的关系【转】
  4. The greatest happiness 2019-11-13
  5. Bzoj3628: [JLOI2014]天天酷跑
  6. 华为python673集_python库-collections模块Counter类
  7. Transformer好文章阅读链接
  8. 玩转 SpringBoot 2.x 整合 Mybatis
  9. 惠普m154a状态页_惠普新品NS—1005w无线智能应用与驱动安装篇
  10. RFM模型——构建数据库营销的商业战役!(转)
  11. matlab如何看线性趋势线,“excle直线拟合“excel 趋势线 是怎么计算出来的
  12. 设置指定ip访问mysql数据库
  13. windows bat批处理基础命令学习教程(转载)
  14. Apache SeaTunnel(Incubating) 2.2.0-beta 版本发布!API 重构,连接器与引擎解偶
  15. SNF快速开发平台--多组织+多平台+多系统处理方案
  16. library(igraph)
  17. 散粉在哪个步骤用_定妆粉是在哪个步骤用
  18. [深度分析]我对区块链的认识--概述(一)
  19. c语言volatile含义,c语言中volatile关键字是什么含义怎么办呢?
  20. nfc java_NFC 开发

热门文章

  1. AI芯片赋能未来城市 地平线多款全新产品与解决方案亮相安博会
  2. windows下搭建Linux开发环境
  3. 计算机出现161/162/511的问题
  4. Byte数组转字符串再getBytes和原来不一样
  5. 软考高级之信息系统案例分析七重奏-《4》
  6. 一起来学SpringBoot(七)持久层框架
  7. 符号测执行软件测试,基于符号执行与模糊测试的混合测试方法
  8. win10系统隐藏u盘EFI分区的方法
  9. 教师评职称用计算机二级证书,教师晋升职称需要的荣誉证书,有年限限制吗?是五年之内的证书才有效吗...
  10. 告诉你个广告业务存储神器