1. 基础知识

基础知识主要是希望大家回顾一下大学物理里讲的速度矢量和角速度矢量部分的知识,用矢量形式去表示,还有叉乘的相关知识,这些我就不赘述了。

想象存在坐标系{A}和{B},把{B}固连在某一刚体上,要求描述BQ^BQBQ相对于坐标系{A}的运动。
首先位置我们是可以确定的,用位置矢量APBORG^AP_{BORG}APBORG​和旋转矩阵BAR^A_BRBA​R来表示。那么求解速度也是一样的:
AVQ^AV_QAVQ​ = AVBORG^AV_{BORG}AVBORG​ + BAR^A_BRBA​R BVQ^BV_QBVQ​
但是要注意,上式只适用于两坐标系姿态保持不变的情况!!

我们再考虑一种情况:两坐标系原点重合且相对线速度为零,固定在坐标系{B}上的矢量BQ^BQBQ以角速度AΩB^A\Omega_BAΩB​相对于坐标系{A}旋转。那么从{A}看固定在{B}中的矢量是如何随时间变化呢?可以根据下图分析:

首先,显然AQ^AQAQ的微分增量一定垂直于AΩB^A\Omega_BAΩB​和AQ^AQAQ;
其次,可以看出微分增量的大小为|ΔQ\Delta QΔQ| = (|AQ^AQAQsin⁡θ\sin\thetasinθ|) (|AΩB^A\Omega_BAΩB​| Δt\Delta tΔt)
回顾大学物理的知识,我们可以得到
QVQ^QV_QQVQ​ = AΩB^A\Omega_BAΩB​ ×\times× AQ^AQAQ
而且一般情况下,Q是相对于{B}变化的,这就要加上一个分量,得到下式
AVQ^AV_QAVQ​ = A(BVQ)^A(^BV_Q)A(BVQ​) + AΩB^A\Omega_BAΩB​ ×\times× AQ^AQAQ
AVQ^AV_QAVQ​ = BARBVQ^A_BR^BV_QBA​RBVQ​ + AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ
实际上,我们也很容易将上式的情况扩展到原点不重合的情况,无非就是再加一个原点线速度的分量,那么最终我们就可以推导出从固定坐标系观测运动坐标系中的矢量导数的最终结果:
AVQ^AV_QAVQ​ = AVBORG^AV_{BORG}AVBORG​ + BARBVQ^A_BR^BV_QBA​RBVQ​ + AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ

2. 连杆的速度“传递”

就如同位姿可以通过连杆间的推导从基座标推导到末端坐标系一样,线速度与角速度也可以。

首先我们看角速度。
当两个ω矢量都是相对于相同坐标系的时候,二者可以相加。那么i+1的角速度就等于连杆i的角速度加一个由于i+1角速度引起的分量,参照坐标系{i}就可以推导出:
iωi+1^i\omega_{i+1}iωi+1​ = iωi^i\omega_iiωi​ + i+1iR_{i+1}^iRi+1i​R θ˙i+1\dot{θ}_{i+1}θ˙i+1​i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​
式中
θ˙i+1\dot{\theta}_{i+1}θ˙i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​ = i+1(00θ˙i+1)^{i+1}\begin{pmatrix}0\\0\\ \dot{\theta}_{i+1}\end{pmatrix}i+1⎝⎛​00θ˙i+1​​⎠⎞​
上式中我们给两边同时左乘 ii+1R^{i+1}_iRii+1​R,最终要得到连杆i+1的角速度相对于坐标系{i+1}的表达式:
i+1ωi+1^{i+1}\omega_{i+1}i+1ωi+1​ = ii+1R_i^{i+1}Rii+1​R iωi^i\omega_iiωi​ + θ˙i+1\dot{θ}_{i+1}θ˙i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​

接下来看线速度。
坐标系{i+1}的原点的线速度等于坐标系{i}原点的线速度加上一个由于连杆i+1的角速度引起的分量,这与我么再第0节推导的结果一样,不是很清楚的可以回到上面再仔细看看,因此我们可以得到
ivi+1^iv_{i+1}ivi+1​ = ivi^iv_iivi​ + iωi^i\omega_iiωi​ ×\times× iPi+1^iP_{i+1}iPi+1​
同样的两边左乘 ii+1R^{i+1}_iRii+1​R,得到
i+1vi+1^{i+1}v_{i+1}i+1vi+1​ = ii+1R_i^{i+1}Rii+1​R(ivi+iωi×iPi+1)\left( \ ^iv_i+ ^i\omega_i \times ^iP_{i+1} \right)( ivi​+iωi​×iPi+1​)

这两个重要的公式希望大家能够好好理解:
i+1ωi+1^{i+1}\omega_{i+1}i+1ωi+1​ = ii+1R_i^{i+1}Rii+1​R iωi^i\omega_iiωi​ + θ˙i+1\dot{θ}_{i+1}θ˙i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​
i+1vi+1^{i+1}v_{i+1}i+1vi+1​ = ii+1R_i^{i+1}Rii+1​R (ivi+iωi×iPi+1)\left( \ ^iv_i+ ^i\omega_i \times ^iP_{i+1} \right)( ivi​+iωi​×iPi+1​)
以上是对于旋转关节的情况,如果是移动关节,那么公式就是下面的形式:
i+1ωi+1^{i+1}\omega_{i+1}i+1ωi+1​ = ii+1R_i^{i+1}Rii+1​R iωi^i\omega_iiωi​
i+1vi+1^{i+1}v_{i+1}i+1vi+1​ = ii+1R_i^{i+1}Rii+1​R(ivi+iωi×iPi+1)\left( \ ^iv_i+ ^i\omega_i \times ^iP_{i+1} \right)( ivi​+iωi​×iPi+1​) + d˙i+1\dot{d}_{i+1}d˙i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​

我们可以通过一个平面两连杆机械臂来理解这组公式。
机械臂的参数以及坐标系确定如下,


经过前面运动学的讲解,这里可以很容易地求出各个齐次变换矩阵
10T^0_1T10​T = (c1−s100s1c10000100001)\begin{pmatrix} c_1 & -s_1 & 0 & 0 \\ s_1 & c_1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}⎝⎜⎜⎛​c1​s1​00​−s1​c1​00​0010​0001​⎠⎟⎟⎞​

21T^1_2T21​T = (c2−s20l1s2c20000100001)\begin{pmatrix} c_2 & -s_2 & 0 & l_1 \\ s_2 & c_2 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}⎝⎜⎜⎛​c2​s2​00​−s2​c2​00​0010​l1​001​⎠⎟⎟⎞​

32T^2_3T32​T = (100l2010000100001)\begin{pmatrix} 1 & 0 & 0 & l_2 \\ 0 & 1& 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}⎝⎜⎜⎛​1000​0100​0010​l2​001​⎠⎟⎟⎞​
对各个连杆依次使用速度和角速度的两个公式:
i+1ωi+1^{i+1}\omega_{i+1}i+1ωi+1​ = ii+1R_i^{i+1}Rii+1​R iωi^i\omega_iiωi​ + θ˙i+1\dot{θ}_{i+1}θ˙i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​
i+1vi+1^{i+1}v_{i+1}i+1vi+1​ = ii+1R_i^{i+1}Rii+1​R (ivi+iωi×iPi+1)\left( \ ^iv_i+ ^i\omega_i \times ^iP_{i+1} \right)( ivi​+iωi​×iPi+1​)
我们可以得到,
1ω1^1\omega_11ω1​ = (00θ˙1)\begin{pmatrix} 0\\ 0\\ \dot\theta_1 \end{pmatrix}⎝⎛​00θ˙1​​⎠⎞​

1v1^1v_11v1​ = (000)\begin{pmatrix} 0\\ 0\\ 0 \end{pmatrix}⎝⎛​000​⎠⎞​

2ω2^2\omega_22ω2​ = (00θ˙1+θ˙2)\begin{pmatrix} 0\\ 0\\ \dot\theta_1 + \dot\theta_2 \end{pmatrix}⎝⎛​00θ˙1​+θ˙2​​⎠⎞​

2v2^2v_22v2​ = (c2s20−s2c20000)\begin{pmatrix} c_2 & s_2 & 0\\ -s_2 & c_2 & 0\\ 0 & 0 & 0 \end{pmatrix}⎝⎛​c2​−s2​0​s2​c2​0​000​⎠⎞​ (0l1θ˙10)\begin{pmatrix} 0\\ l_1\dot\theta_1\\ 0 \end{pmatrix}⎝⎛​0l1​θ˙1​0​⎠⎞​ = (l1s2θ˙1l1c2θ˙10)\begin{pmatrix} l_1s_2\dot{\theta}_1 \\ l_1c_2\dot{\theta}_1 \\ 0 \end{pmatrix}⎝⎛​l1​s2​θ˙1​l1​c2​θ˙1​0​⎠⎞​

3ω3^3\omega_33ω3​ = 2ω2^2\omega_22ω2​

3ω3^3\omega_33ω3​ = (l1s2θ˙1l1c2θ˙1+l2(θ˙1+θ˙2)0)\begin{pmatrix} l_1s_2\dot{\theta}_1\\ l_1c_2\dot{\theta}_1 + l_2(\dot\theta_1 + \dot\theta_2)\\ 0 \end{pmatrix}⎝⎛​l1​s2​θ˙1​l1​c2​θ˙1​+l2​(θ˙1​+θ˙2​)0​⎠⎞​
为了得到相对于基座标的速度和角速度,我们再给出旋转矩阵30R^0_3R30​R

30R^0_3R30​R = 10R^0_1R10​R 21R^1_2R21​R 32R^2_3R32​R = (c12−s120s12c120001)\begin{pmatrix} c_{12} & -s_{12} & 0\\ s_{12} & c_{12} & 0\\ 0 & 0 & 1 \end{pmatrix}⎝⎛​c12​s12​0​−s12​c12​0​001​⎠⎞​

那么通过这个变换,我们就可以得到,

0v3^0v_30v3​ = (−l1s1θ˙1−l2s12(θ˙1+θ˙2)l1c1θ˙1+l2c12(θ˙1+θ˙1)0)\begin{pmatrix} -l_1s_1\dot{\theta}_1 - l_2s_{12}(\dot{\theta}_1 + \dot{\theta}_2)\\ l_1c_1\dot{\theta}_1 + l_2c_{12}(\dot{\theta}_1 + \dot{\theta}_1)\\ 0\end{pmatrix}⎝⎛​−l1​s1​θ˙1​−l2​s12​(θ˙1​+θ˙2​)l1​c1​θ˙1​+l2​c12​(θ˙1​+θ˙1​)0​⎠⎞​

3. 雅可比

紧接着上面的推导出的速度0v3^0v_30v3​,我们来讲一下雅可比矩阵。
简单地说,雅可比矩阵就是多维形式的导数,在这里它就是速度的映射,是一个时变的线性映射:Y˙\dot{Y}Y˙ = 0J(X)X˙^0J(X) \dot{X}0J(X)X˙ 。
在机器人学中,我们通常有以下形式:
0v^0\boldsymbol{v}0v = 0J(Θ)Θ˙^0J(\Theta) \dot{\Theta}0J(Θ)Θ˙
0v^0\boldsymbol{v}0v = (0v0ω)\begin{pmatrix} ^0v\\^0\omega \end{pmatrix}(0v0ω​)
0v^0v0v是3 ×\times× 1的线速度矢量,0ω^0\omega0ω是3 ×\times× 1的角速度矢量。

那么根据0v3^0v_30v3​ = (−l1s1θ˙1−l2s12(θ˙1+θ˙2)l1c1θ˙1+l2c12(θ˙1+θ˙1)0)\begin{pmatrix} -l_1s_1\dot{\theta}_1 - l_2s_{12}(\dot{\theta}_1 + \dot{\theta}_2)\\ l_1c_1\dot{\theta}_1 + l_2c_{12}(\dot{\theta}_1 + \dot{\theta}_1)\\ 0\end{pmatrix}⎝⎛​−l1​s1​θ˙1​−l2​s12​(θ˙1​+θ˙2​)l1​c1​θ˙1​+l2​c12​(θ˙1​+θ˙1​)0​⎠⎞​,我们就可以得到雅可比矩阵
0J^0J0J = (−l1s1−l2s12−l2s12l1c1+l2c12l2c12)\begin{pmatrix} -l_1s_1- l_2s_{12} & -l_2s_12\\ l_1c_1 + l_2c_{12} & l_2c_12\\ \end{pmatrix}(−l1​s1​−l2​s12​l1​c1​+l2​c12​​−l2​s1​2l2​c1​2​)
另外再提一下,雅可比矩阵参考坐标系的变换。
已知坐标系{B}中的雅可比矩阵,即
(BvBω)\begin{pmatrix}^Bv \\^B\omega\end{pmatrix}(BvBω​) = Bv^B\boldsymbol{v}Bv = BJ(Θ)Θ˙^BJ(\Theta)\dot{\Theta}BJ(Θ)Θ˙
容易得到{B}中 6 ×\times× 1的速度矢量在{A}中的变换,
(AvAω)\begin{pmatrix}^Av \\^A\omega\end{pmatrix}(AvAω​) = (BAR00BAR)\begin{pmatrix}^A_BR & 0\\0 & ^A_BR\end{pmatrix}(BA​R0​0BA​R​) (BvBω)\begin{pmatrix}^Bv \\^B\omega\end{pmatrix}(BvBω​)
因此可以得到
(AvAω)\begin{pmatrix}^Av \\^A\omega\end{pmatrix}(AvAω​) = (BAR00BAR)\begin{pmatrix}^A_BR & 0\\0 & ^A_BR\end{pmatrix}(BA​R0​0BA​R​) BJ(Θ)Θ˙^BJ(\Theta)\dot{\Theta}BJ(Θ)Θ˙
显然,可以完成雅可比矩阵的参考坐标系的转换
AJ^AJAJ = (BAR00BAR)\begin{pmatrix}^A_BR & 0\\0 & ^A_BR\end{pmatrix}(BA​R0​0BA​R​) BJ(Θ)^BJ(\Theta)BJ(Θ)

4. 奇异性

根据线性代数中的知识,如果某个Θ\ThetaΘ值使得雅可比矩阵JJJ不可逆,那么这些位置就是机构的奇异位型(singularities of the mechanism) 或者简称 奇异性(singularitries)
可以确定的是,工作空间的边界存在奇异位型。记得我们前面讲过机械臂两个轴共轴导致失去一个自由度的情况吗?这就是在工作空间内的奇异位型。在这种情况下,选择什么样的速度都无法使机械臂运动

5. MATLAB中的雅可比

多余的就不赘述了,直接讲如何在MATLAB中求雅可比以及雅可比的一些应用。

mdl_puma560
J = p560.jacob0(qn)  %qn是默认的位姿之一,其他的有qs、q0等。
%好了,求解雅可比就这么简单。。。一句话
%注意,jacob0()求解的是将关节速度映射到世界坐标系中的末端执行器空间速度
%如果要求末端执行器在自身空间内的速度的话,用下面这句
Jn = jaconb(qn);

上面我们提到了雅可比的奇异性,那么在MATLAB中怎么判断呢?
不要被太多名词迷惑了,本质上就是在问你,如何判断矩阵的奇异性。答案很简单——是否满秩。

rank(J) %就完啦,完啦,啦,a......
jsingu(J) %这句话可以自动分析奇异性,得到的结果是q6可由q4表示

6. 总结

雅可比这一篇大概是耗费时间最多,内容最多的一篇,但是我依然感觉自己写的仍然有点少。事实也确实是这样,雅可比在机器人学中是很重要的知识点,还有力域中的雅可比,这一篇我也不打算讲了,在后面的动力学部分再考虑整理一下吧。

今天下午去看了深圳草莓音乐节,站得腰酸背痛。回学校后想了想还是回实验室把这篇写完。周末终于解放了,回寝洗漱!

中正平和的机器人学笔记——4. 雅可比矩阵(附MTALB代码)相关推荐

  1. 中正平和的机器人学笔记——0. 前言

    中正平和的机器人学笔记--0.前言 一点唠叨的话 没有想到最后还是入了机器人学的坑,心情复杂. 借鉴某同学课设时写csdn blog整理自己所学知识的方法,我也将这周学习到的机器人学的知识记录整理下来 ...

  2. 中正平和的机器人学笔记——1. 机械臂正运动学(附MATLAB代码)

    中正平和的机器人学笔记--1.正运动学 0. 何为运动学?何为正运动学? 运动学主要研究的就是机械臂的运动特性(位置.速度.加速度等),但是不考虑使机械臂产生运动时施加的力和力矩(这部分是动力学).而 ...

  3. 中正平和的机器人学笔记——5. 机械臂动力学

    0. 基础知识 0.1 线加速度 上一篇中我们讲到了在坐标系{A}和坐标系{B}原点重合时,BQ^BQBQ的速度矢量的表示方式: AVQ^AV_QAVQ​ = BARBVQ^A_BR^BV_QBA​R ...

  4. 柔性matlab机械臂运动空间代码,中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)...

    0. 预备知识(别跳过呀) 上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下.这一篇我们就来讲一讲逆运动学问题--已知工具坐标系{T}相对于固定坐标 ...

  5. 机器人学matlab建模实例,中正平和的机器人学笔记——3.几个MATLAB实例

    0. 轨迹 学机器人学前最想知道的,就是如何把机器人末端执行器平滑地从A点移动到B点,也许不太准确,应当说从位姿A移动到位姿B. 0.1 关节空间运动 考虑末端执行器在以下两个笛卡尔位姿之间移动 下面 ...

  6. 中正平和的机器人学笔记——7. 一种气驱型柔性臂的逆运动学模型

    1. 前言 上一篇分析了Air-Octor的正运动学模型,这一篇是学习另一篇论文1的笔记,着重分析这种柔性臂的逆运动学模型,也就是通过kϕk_\phikϕ​ 和 ϕ\phiϕ 以及 sss 来求 l1 ...

  7. 中正平和的机器人学笔记——6. 一种气驱型柔性臂的正运动学模型

    1. 前言 柔性臂是当前机器人领域一个比较热的研究方向,国内外高校如MIT.Stanford.JHU和我校.上交.中科大.北航等等都有做研究.大致可以分为三类:气驱/绳驱,超弹性材料,智能材料(DE/ ...

  8. 【模糊综合评价的运用】——《电子舌技术在食用盐模糊感官评价中的应用》论文笔记(内附MATLAB程序)

    [模糊综合评价的运用]--<电子舌技术在食用盐模糊感官评价中的应用>论文笔记(内附MATLAB程序) 本文目录 1.因素集:(评价指标集)与评价事物相关的因素. 2. 评语集:(评价的结果 ...

  9. Python教学 | Python 中的循环结构(上)【附本文代码和数据】

    查看原文:[数据seminar]Python教学 | Python 中的循环结构(上)[附本文代码和数据] (qq.com) Part1引言 上期文章我们向大家介绍了 Python 程序控制结构中的分 ...

最新文章

  1. 深入理解l内核v4l2框架之video for linux 2(一)
  2. 网易云海外推流部署实践
  3. seo优化源码_武汉seo公司关键词SEO优化实战记录,1个月三个站在首页
  4. solor mysql_solr 同步 mysql
  5. 鸿蒙公测报名表填写,鸿蒙2.0公测报名审核要多久_鸿蒙2.0公测报名审核时间
  6. 搭建网站随笔(WordPress)
  7. 【IDE】我的花里胡哨VS
  8. PXE远程CentOS安装anaconda报错
  9. sql 基本操作语句笔记
  10. PyTorch学习—21.GPU的使用
  11. react-native 自定义view向js暴露接口方法
  12. 【领域适应】训练梯度反向层(gradient reversl layer, GRL)
  13. php出现photo.scr,u盘中了scr病毒怎么办
  14. 机房收费系统——可行性分析报告
  15. 裁判文书网2019年9月份最新爬虫
  16. 81章 老子1章到_《道德经》81章全文(建议收藏)
  17. 致爱丽丝 之MY收藏
  18. mysql handlers_MySQL handler相关状态参数解释
  19. C# Windows服务启动错误1083配置成在该可执行程序中运行的这个服务不能执行该服务
  20. konva实现图层跟随鼠标缩放或者根据中心位置缩放

热门文章

  1. 《数据结构(C语言版)》学习笔记08 查找
  2. java 数组 内存_Java 中数组的内存分配
  3. 简单的一个自动化测试脚本
  4. 图像柔光效果(SoftGlow)的原理及其实现
  5. 城步一中2021高考成绩查询,教师平凡的选择——学考前的城步一中杨美玉
  6. SCOUT MINI Pro松灵机器人j建图定点步骤
  7. Semantic Models for the First-stage Retrieval(检索召回技术综述)
  8. Docker容器启动Redis,MongoDB,MySQL,Nginx
  9. 小程序预览轮播图 大图
  10. python查看虚拟环境列表_Python虚拟环境简明教程