最近在学习高翔的视觉SLAM十四讲,在第三章提到了罗德里格斯公式(Rodrigue’s Formula),但书中并没有给出相应的推导公式。在网上搜了不上相关的博客,看了好几篇才看明白,一些基础知识并没有在公式推导过程中给出,导致一开始看得云里雾里。

所以这篇博客就是总结罗德里格斯公式推导过程以及过程中所对应的所有知识点,包括一些基础知识。

推导流程

image.png
整个推导过程都是围绕这上面这张图展开的,其实罗德里格斯公式推导 - 图2是要旋转的向量,罗德里格斯公式推导 - 图3是旋转后的向量,罗德里格斯公式推导 - 图4是旋转轴方向上的单位向量,罗德里格斯公式推导 - 图5罗德里格斯公式推导 - 图6关于旋转轴上的平行分量,罗德里格斯公式推导 - 图7罗德里格斯公式推导 - 图8关于旋转轴的垂直分量。

搞清楚定义之后,开始进行推导。

根据向量的加法运算:
罗德里格斯公式推导 - 图9

现假设罗德里格斯公式推导 - 图10为旋转轴上的单位向量,则罗德里格斯公式推导 - 图11可以表示为:
罗德里格斯公式推导 - 图12

其中a和b为与k垂直的平面上的两个向量,可以不用在意,知识表述k和平面的垂直关系,后续只用到k。

那么对于罗德里格斯公式推导 - 图13的平行分量和垂直分量,利用向量点乘和叉乘的性质,有:
罗德里格斯公式推导 - 图14
罗德里格斯公式推导 - 图15
罗德里格斯公式推导 - 图16

公式3即点乘的性质,比较好理解。在公式4中,我们知道向量之间叉乘得垂直向量,而k是单位向量,则叉乘罗德里格斯公式推导 - 图17相当于罗德里格斯公式推导 - 图18绕着k旋转了90°,再叉乘一个k就相当于旋转了180°,方向与罗德里格斯公式推导 - 图19相反,所以再加个负号就为垂直分量。至于为什么要这么做,是因为利用叉乘将罗德里格斯公式推导 - 图20三个量关联起来,后面的推导会用到。

对于公式4,还有一种推导方法,根据双重向量积(二重矢积,https://baike.baidu.com/item/%E5%8F%8C%E9%87%8D%E5%90%91%E9%87%8F%E7%A7%AF/7385780?fr=aladdin)的性质,对于给定空间的三个向量a,b,c,有罗德里格斯公式推导 - 图21,所以可以推出:
罗德里格斯公式推导 - 图22

在有了罗德里格斯公式推导 - 图23三个量之间的关系式后,再求旋转后的向量分量罗德里格斯公式推导 - 图24
罗德里格斯公式推导 - 图25
罗德里格斯公式推导 - 图26

那么联立公式4,5,7,8可得:
罗德里格斯公式推导 - 图27

这是向量叉乘形式,现在转化成矩阵相乘形式。对于向量叉乘罗德里格斯公式推导 - 图28,可以转化为矩阵相乘罗德里格斯公式推导 - 图29,其中罗德里格斯公式推导 - 图30表示a的反对成矩阵,那么将k转化为反对称矩阵K,就有:
罗德里格斯公式推导 - 图31
罗德里格斯公式推导 - 图32

联立公式9,10,11,最后得罗德里格斯公式推导 - 图33的表达式:
罗德里格斯公式推导 - 图34

罗德里格斯公式推导 - 图35,则可得罗德里格斯公式:
罗德里格斯公式推导 - 图36

上面的公式是单位向量k的反对称矩阵形式,将其转成视觉SLAM第三讲的公式形式,可以利用向量投影矩阵。先将公式9转换一下:
罗德里格斯公式推导 - 图37
因为罗德里格斯公式推导 - 图38是v在k上的投影,并且k是单位向量,所以由向量投影矩阵,可得:
罗德里格斯公式推导 - 图39

最终,联立公式14,15,即可得旋转向量与旋转矩阵之间的转换关系:
罗德里格斯公式推导 - 图40

相关知识

点乘和叉乘

dot点乘:点乘又称內积。对于罗德里格斯公式推导 - 图41,其几何意义有:
① 点乘的结果是a在b上的投影的模乘以b的模
② 描述了向量之间的夹角
罗德里格斯公式推导 - 图42
矩阵没有点乘一说

cross product叉乘:叉乘又称外积、向量积。对于罗德里格斯公式推导 - 图43,其几何意义有:
① 代表了aOb平面的法向量
② 该法向量长度为罗德里格斯公式推导 - 图44
③ 上式也代表a和b组成的平行四边形的面积
叉乘形成的法向量成右手法则,所以叉乘的顺序会影响结果。

向量投影和向量投影矩阵

https://blog.csdn.net/wlk1229/article/details/84779370

双重向量积

定义:给定空间的三个向量a,b,c,如果先做其中两个向量a,b的向量积a×b,再做所得向量与第三向量的向量 积,那么最后的结果仍然是一个向量,叫做所给三向量的双重向量积,记做:(a×b)×c。

性质:

  • (a×b)×c=(a·c)b-(b·c)a
  • a×(b×c)=-(b×c)×a=(a·c)b-(a·b)c