本文转载自微信公众号ROBOTICS
前言
看懂本文,除了了解矩阵、向量、向量点乘、矩阵向量相乘等内容,以及看明白我们干货系列的前四篇文章外,你还需要懂得简单的向量求导运算——其实很简单啦,如果你不知道怎么对向量求导,那就把它当一列标量一个一个写出来,比如这样:
不知道行列怎么分布?把分母乘到右边,算一下左边是3×1向量,右边是3×2矩阵乘以2×1向量 = 3×1向量,左右相等,搞定!简单粗暴,方便有效。哎呀,一不小心,把雅可比矩阵(Jacobian Matrix)都给写出来了呢。(想要知道数学上是怎么定义推导出向量求导方法的请去上数学课,我只负责教你记住啦:p)
正文
上一篇文章我们利用DH参数和坐标变换,推导了机械臂的“正运动学”求解方法:只要知道机械臂的结构以及每个关节的位置(再强调一次,当我们说关节位置时,指的是旋转关节的角度以及平移关节的平移),就可以求出end effector的位置和朝向,即完整的end effector齐次坐标变换矩阵w.r.t 基座/地面坐标系。“正运动学”通常对应着“逆运动学”,不过,这篇文章我们就先讲“瞬时运动学”;因为它与前面所讲的内容一脉相承,在一类机器人控制的理论框架中,也比逆运动学更重要。
瞬时运动学(Instantaneous kinematics)也是描述从关节空间到操作空间的映射,不过“瞬时”表明它不是描述“静态”的位置,而是描述“动态”的速度。还记得正运动学要求解的“函数“是什么吗?如下所示:
其中,q向量表示关节位置,x向量表示end effector的位置和朝向。
在上一篇文章的正运动学求解中,由于空间朝向表示的复杂性,我们最终用齐次坐标变换矩阵T来表示end effector的位置和朝向,而不是一个向量。不过,从数学的角度或抽象理解的角度来讲,上面的式子显然更为通用(更何况我们有“一百种”办法可以用向量来表示空间朝向,分分钟抛弃旋转矩阵——我会尽快写一篇文章介绍)。
现在,当我们说“瞬时运动学”求解的是从关节空间到操作空间的速度映射时,由于速度描述的是短时间内的位置变化,即位置对时间的导数,相信你很自然地会想到我们需要求解这样一个函数:
(一个点就是对时间的一阶求导,两个点就是二阶求导,相信大家都懂的……)
现在我们的任务就是,从“正运动学”公式推导出“瞬时运动学”公式:
有没有觉得上面的式子某个地方很眼熟啊?没错,就是我们一开始提到的向量x对向量q的求导了!将关节空间的速度与操作空间的速度连接起来的,就是由向量求导获得的雅可比矩阵。现在,让我们把这个重要的结论用数学方式表示出来,用J表示向量x对向量q的导数:
根据一开始讲的向量求导方法,J是一个矩阵。这个矩阵其实一点也不抽象:如果我们仔细看它的每一个元素,就会发现它的第i行第j列表示的物理意义就是当第j个关节运动时,操作空间的第i个平动/转动方向会如何运动:
比如第一行第一列,就表示当第一个关节运动某个角度/距离时,end effector相应的在x1这个方向上运动/转动某个距离/角度。如果你还是觉得太抽象,那我们来看一个例子,还是上一篇文章用到的那个平面机械臂:
我们的关节空间是(θ1, θ2),操作空间是(xe, ye),我们也写出了正运动学公式(将link的长度都定为1):
那么雅可比矩阵就是:
注意在我们这个例子中,关节空间有两个自由度、操作空间也有两个自由度,所以我们的雅可比矩阵是正方形的(square matrix);但雅可比矩阵不一定是方阵,这一点大家要记住。
如果你考虑一下当θ1为0, θ2为90°的时候,代入算一下,我们会得到这样的雅可比矩阵:
对应这样的机械臂:
现在你看,如果我们保持第一个关节不动、转动第二个关节,那么在这一个瞬间end effector将只能在x方向运动,速度为1(线速度等于角速度乘以半径,即link的长度),y方向的速度则为0,所以J矩阵的第二列是[1, 0]。
而如果我们保持第二个关节不动、转动第一个关节,end effector的瞬时速度将与end effector与第一个关节轴的连线垂直,其半径为√2,则线速度为√2,分解为x方向的-1和y方向的1,所以J矩阵的第一列为[-1, 1]。
希望这么啰嗦的解释可以让你获得雅可比矩阵最直观的理解,一旦理解了,是不是其实很简单呢?
瞬时运动学的这个公式太优美了,让我们再看一遍:
这个式子表明了,end effector的速度与joint velocity的关系是线性的!这个式子的形式也与我们在线性代数中用尽了各种方法(高斯消元法是其中一种)去求解的线性方程Ax = b一模一样:如果我们想要end effector以某个速度运动,求对应的关节速度,那这个问题就是一个解线性方程的问题了!比起逆运动学,这实在漂亮方便了不知道多少倍呢。
如果你只知道A矩阵是正方形时怎么解,那么学习机器人学就可以帮助你以最直观的方式了解当A矩阵是瘦高型或者矮胖型的时候是什么意义、又如何求解了——又学机器人学又学线性代数,是不是很超值?下一篇文章,作者会教你如何写出雅可比矩阵,更会带你深入地了解它、应用它(比如我们第一篇干货文就提到的奇异点Singularity和冗余自由度Redundancy,都可以从雅可比矩阵获得数学上的理解),顺便还会教你如何对付高瘦矮胖的线性方程。