本节书摘来自华章社区《机器人与数字人:基于matlab的建模与控制》一书中的第2章,第2.3节指数映射和k过程,作者[美]顾友谅(edward y.l.gu),更多章节内容可以访问云栖社区“华章社区”公众号查看
2.3指数映射和k过程
如前面所述,李群的so(3)旋转矩阵常用来表示三维旋转。这已经被公认为最为通用、稳定和独特的方法。然而,在许多应用实例中,希望执行给定坐标系绕自身单位向量k旋转角度,而不是使用一个连续的旋转,即从基坐标系的三个基本旋转矩阵的乘积公式(22)计算出来。由于这种连续旋转变换的矩阵乘法一般是不可交换的,因此此旋转方法在机器人路径规划应用中更加直观、自然、简单有效。
将一个单位向量k=k1
k2k3投影到给定坐标系中进行旋转,显然,‖k‖2=k21+k22+k23=1。给出其相应的斜对称矩阵为
基于以上介绍的单位斜对称矩阵k特有的性质,提出了一个实用的旋转表达方法,称为k过程。首先,令k∈瘙綆3为3×1向量。将它的斜对称矩阵k∈so(3)代入指数映射公式(26)中得到:
exp(k)=r∈so(3)(27)
指数映射结果是旋转矩阵,它应该等同于绕k轴旋转角度。
将式(27)左边按照泰勒级数展开,结合上面提到的k的性质,得到:
方程(29)和方程(211)提供了递归求逆算法,可以求解给定旋转矩阵r的向量k和旋转角度。乍一看,此公式没有唯一的符号。然而,对于每个余弦值都存在正负角度,假如公式(29)选择+(或-),那么方程(211)将相对应地得到k(或-k)。因此,可以选择一对可能的和k或者-和-k,且任何一对都是正确的。
例如,如果要使一个坐标系绕轴(121)t自身旋转60°(π/3),则单位坐标轴和其斜对称矩阵为
因此,单位向量为k=(040820816504082)t。显然,由于余弦函数是偶函数,可以取旋转角度为-60°。在这种情况下,轴线k相应变为负值。这两种选择显然是等价的,因为初始坐标系绕轴线旋转角度与绕相反的轴旋转负角度在三维空间中有同样的终点。
第二个实例是建立一个新的坐标系1,使得它的z1轴在基坐标系0下沿向量z10=(1-1-1)t。虽然可能有不同方法来建立坐标系1的方向矩阵r10,但我们只是尝试用k过程。将基坐标系z0=(001)t轴和新坐标系z1轴的公共法向量通过叉积确定为
因此,当r=rt,r ≠i时,必须使用这个公式来确定k。
例如,如果
这样,无论是k1=2/2,k2=-2/2还是k1=-2/2,k2=2/2,都与=±180°相对应,其旋转结果相同。可以任取一组这样的单位向量
因此,仅在rt=r但r≠i的情况下,可以使用上面的方法来确定k,以及设置=180°。这样的情况在第3章中将会再次提到。
如果方程(28)两边都右乘单位向量k,很容易得到
rk=k+sinkk+(1-cos)k2k=k
因为kk=k×k≡0。这个结果显示单位向量k是k过程中特征值为1的旋转矩阵r的特征向量。因此,如果在matlab中进行k过程反解数值编程,对于给定的旋转矩阵r,可以利用内部求特征值
函数特征向量eig(r)而不需要通过方程(211)确定k,以避免可能产生的奇异点。在先前的数值实例中,
可以清楚地看到,一旦内部函数eig(r)被调用,元素“val”沿着输出矩阵的对角线打印出三个特征值,而“vec”打印输入矩阵r的三列特征向量。显然,因为最后一个对角元素“val”是10000,其对应的特征向量是“vec”的第三列,即(040820816504082)t,得到的结果和公式(212)是一致的。如果令r=i,则单位矩阵在matlab工作窗口中输出如下结果:
这一结果表明特征值+1对应的单位特征向量为k=(-07071070710)t。从上面的例子中得到这个向量为负值,但它并不影响最终旋转结果,因为在这种特殊情况下,旋转角度可以选择±180°。
总之,基于数学上的完美指数映射在公式(27)中的so(3)和so(3),研究了式(28)中简洁的旋转矩阵r∈so(3)的正向和逆向方程,以及式(29)和式(211)中的k过程。后面将会发现,k过程在机器人运动学、数字人运动规划尤其是路径定向规划方面是非常有用的。