1. 前言

上一篇文章我们从几何意义的角度出发介绍了雅克比矩阵的求解方法,我觉得这种方式是最容易让人接受的一种,但是从几何意义求解雅克比矩阵并不能体现出雅克比矩阵的本质(微分),因此这篇文章我们介绍一下通用雅克比矩阵的求解方式,也就是利用数学推导来求解。   这篇文章数学公式较多,如果你刚开始了解机器人雅克比矩阵可以暂时跳过,老实说这篇文章是偏理论的,只是为了加深对矩阵求导以及雅克比矩阵的理解,实际应用是比较少的。

 2. 解析法

解析法的基本思想是我们已经通过正运动学求出了末端位姿和关节角度之间的关系,从数学上来说末端位姿的导数就代表了末端位姿的变化率,也就是速度和角速度。因此我们只要写出正运动学表达式,求这个表达式的导数就自然可以求解出关节角速度和末端笛卡尔速度和角速度之间的关系了。   顺着上面的思路我们首先来表达一下机器人末端执行器的位姿,还记得我们前面介绍的齐次变换矩阵吗?我们就用它来表达机器人的正运动学模型。 以六关节机器人为例,当机器人各个关节的关节角度为gif,机器人末端执行器位姿可以描述为:   fk

(1)正运动学方程

  为了求解gif的变化与末端执行器位姿变化之间的关系,直接对上式求导即可。   对于矩阵以及矩阵连乘的导数运算你可能还是需要花一些时间去接受。矩阵求导是对其中每一个元素求导,另外对于以下矩阵函数:   CodeCogsEqn (3)

(2)矩阵乘法

  它的导数与普通函数的导数相同,同样也满足链式法则,即:   CodeCogsEqn (4)

(3)矩阵乘法的导数

  总的来说矩阵导数就是对矩阵的每一个元素求导,矩阵函数连乘的导数等于分别对每一个矩阵函数求导再整体求和。刚接触矩阵导数时你可能会很疑惑,为什么矩阵导数与正常函数的导数拥有同样的运算法则呢?说实在的,我刚接触这一部分时也是百思不得其解,直到后来看到了一种解释,才真正开始思考这其中的内在逻辑。所谓矩阵函数可以认为是分布在空间中的多个函数的一个集合,所谓矩阵乘法就是将这些函数按照设定的顺序相乘再相加而已。在函数运算中我们知道乘法求导满足链式法则。矩阵乘法呢?是函数的多次的乘法和加法呀!当然满足链式法则。如果你仍然存在疑惑可以自己写个小一点的矩阵,让他们相乘验证一下。总的来说就一句话,矩阵乘法是空间上的操作,矩阵函数求导是时间上的操作,两者互不干涉。   回到正题,我们对机器人正运动学进行求导:   1

(4)机器人正运动学导数

  其中n代表机器人关节数,根据DH参数求解机器人正运动学的过程,关节变量 q_i 只会出现在齐次变换矩阵 T_i_i-1 中。因此机器人正运动学的导数可以展开成如下形式:   CodeCogsEqn

(5)机器人正运动学导数展开式

  这个方程有点长但是并不复杂,来分析一下它。首先正运动学函数是6个矩阵的连乘,那么根据链式法则,求导时应该是分别求每一个矩阵的导数,把结果加在一起。(这个等式其实从侧面反映出一个事实,末端执行器的位姿变化等于每一个关节变量引起的位姿变化的叠加,即速度满足叠加原理!) 为了不失一般性,我们拿其中的一项作分析:   delta_x_qi

(6)关节i引起的末端执行器位姿变化

  等式左侧的物理含义是关节变量 q_i 引起的末端执行器位姿变化。我们不妨再来看一下一个齐次变换矩阵的内部构成:   T_i_i-1_m

(7)连杆 i 齐次变换矩阵

  因为矩阵求导就是对每一个元素求导,所以:   dot_T_i_i-1

(8)连杆 i 齐次变换矩阵导数

  接下来我们分别研究一下旋转矩阵求导以及平移向量求导代表的物理含义,分别讨论旋转关节和平移关节的情形。  

2.1 旋转关节

还记得之前介绍罗德里格斯公式时的推导过程吗?如果你忘记了可以翻看一下12. 机器人正运动学---姿态描述之轴角(旋转向量)这里我们直接引用结论,任意旋转矩阵的导数具有如下形式:   a

(9)旋转矩阵的导数

  其中a代表三维角速度向量对应的反对称矩阵。对应到当前问题应该是下式:   CodeCogsEqn

(10)连杆 i 旋转矩阵导数

  (9)和(10)两个公式除了角标其他都相同。有一个问题,前面这个等式参考系是谁?你如果能够想明白这个问题,说明你基本已经理解本篇文章要讲的内容了。这个问题其实不难回答,首先思考旋转矩阵 CodeCogsEqn (1) 是相对于谁的?通过角标你应该不难理解这是坐标系 i 相对于坐标系 i-1 的旋转矩阵,也就是说我们描述 CodeCogsEqn (1) 时是以坐标系 i-1 为参考坐标系的。因此由这个旋转矩阵导出的变量理应是在坐标系 i-1 中描述的(角标的重要性)。   再来,平移向量的导数呢?所谓平移向量的导数可以用高中物理知识来解答一下。思考一下坐标系 i 相对于坐标系 i-1 的位姿之所以发生变化是因为什么?只有一个原因,那就是关节 i 发生了旋转,如果单看坐标系 i 和坐标系 i-1 之间的变换关系,这就是一个圆周运动问题。在圆周运动中,位移的导数(即此处平移向量的导数),如下:   CodeCogsEqn (2)

(11)连杆 i 平移向量导数

  将式(10)和(11)代入式(6)将得到:   CodeCogsEqn (3)

(12)关节 i 引起的末端执行器位姿变化量

  这里值得一提的是角速度可以拆分成标量部分和矢量部分,即CodeCogsEqn (4),在此处关节是绕着CodeCogsEqn (5)轴旋转的,因此CodeCogsEqn (1)。将CodeCogsEqn (7)CodeCogsEqn (8)展开并进行矩阵运算后可以得到   CodeCogsEqn (13)

(13)关节 i 引起的末端执行器位姿变化量乘开

  在角速度反对陈矩阵运算中有这样一个恒等关系:CodeCogsEqn (10),其中CodeCogsEqn (11),这样式(13)可以进一步简化为:   CodeCogsEqn (12)

(14)关节 i 引起的末端执行器位姿变化量简化结果

  到这里才终于看见一点眉目。从上式可以看出关节 i 以 CodeCogsEqn (14) 的速度旋转时,末端执行器的角速度为 CodeCogsEqn (15),线速度为 CodeCogsEqn (16)。整理一下即为   CodeCogsEqn (17)

(15)关节 i 旋转导致末端产生速度和角速度

  可以看到这个结果和我们上一篇几何法推导的雅克比矩阵一致。

2.2 平移关节

平移关节的推导过程与前面的旋转关节完全一致,不同的是,它的旋转矩阵求导是等于0的,因为关节变量只在齐次变换矩阵的平移向量中才有体现(你可以在matlab中用符号表达式写出这个齐次变换矩阵,找一找其中的关节变量)。具体的推导过程这里就不赘述了。  

3. 总结

这篇文章主要介绍了利用解析法推导雅克比矩阵,由于个人能力有限,所述内容难免存在疏漏,欢迎指出,欢迎讨论。  

4. 参考文献

[1] 霍伟,机器人动力学与控制