在多视角几何中,特别是在一些恢复相机运动轨迹的模型中,我们需要将相机的旋转和平移表示出来。通常情况下,我们都是在欧几里得空间中用R和t来进行相应的运算得到相机轨迹。然而,在很多论文中,作者们却喜欢用Lie algebra se(3)、so(3) 以及 Lie group SE(3)、SO(3) 之类的表示。紧接着,出现了很多术语,比如twist, tangent space,也出现了一些运算,比如exp(),log()之类的,看得我是云里雾里。
比如下面这个公式,
是由三个角速度组成的向量,表示对应的旋转矩阵,
表示由三个角速度组成的反对称矩阵(skew-symmetric matrix)。
自然要问为啥通过指数运算能够把角速度映射到旋转矩阵,它的背后又有什么样的物理意义,这中间是否有一些尽量直观的解释。
本篇博客将从最基础的内容出发,用直观的容易理解的方式对旋转矩阵和李代数之间的关系进行推导,如有错误,请指出,希望共同进步。
预备知识:
在进入正题之前,我们先需要复习下向量叉积(cross product),以及反对称矩阵(skew symmetric matrix),在计算机视觉中最初遇到这些概念应该是在求解本征矩阵时,然而,他们在沟通刚体变换矩阵和李代数之间扮演着十分重要的作用。
对给定的两个三维实数向量,它们的叉积可以通过下面的公式计算出来:
![叉积](http://img.e-com-net.com/image/info5/77c74f38db604b81a2a86169fc50d9f6.png)
叉积有如下性质:
这说明通过叉积运算得到的结果实际上是一个垂直于
u,v 平面的向量。
这种两个向量的运算可以通过一个矩阵来表示,即
![\large u\times v = \hat{u}v](http://img.e-com-net.com/image/info5/a238a394b2824565a135148883783245.png)
其中 是一个3*3的实数矩阵:
![反对称矩阵](http://img.e-com-net.com/image/info5/fcf698b98e6d4e8c81bd9719b147e38e.png)
注意向量u上带一个帽子表示的是由它构成的反对称矩阵。同时由这个矩阵也很容易看出有
请记住这个性质
。并且任意一个3*3的反对称矩阵,我们能够找到一个三维向量和它对应。
至于什么是刚体变换,什么是旋转矩阵,旋转矩阵有哪些性质这些更基础的知识在这里不再一一补充。
下面的内容中,都是基于3维空间,所以没有特别说明时,所说的旋转矩阵都是3*3的,平移向量也是3维的。并且所有向量上带一个帽子的表示的是它的反对称矩阵形式。
旋转矩阵与 so(3):
我们知道对于旋转矩阵,旋转矩阵本身乘以它的转置等于单位矩阵:
对上式求导可以得到:
![旋转矩阵求导](http://img.e-com-net.com/image/info5/dff3574e7f9044cfa6876b53f8ea853a.png)
(1) 这个1式推得的结果不正好满足反对称矩阵的性质吗?因此肯定存在一个三维向量,使得该向量组成的反对称矩阵满足:
![这里写图片描述](http://img.e-com-net.com/image/info5/9a5ffa867edf48fabf379b642363139f.png)
(2) 对2式中两边各右乘一个旋转R(t),得到:
![这里写图片描述](http://img.e-com-net.com/image/info5/cd47164c18654b2ca90f58232afceb3c.png)
(3) 这个等式是不是很熟悉?一个变量的导数等于它本身再乘以一个系数。Bingo,是他是他就是他,我们高斯微积分中熟悉的指数!
在介绍我们期待已久的指数映射前,先挖掘挖掘(3)式的一些含义。如果初始时刻
![\large R(t_{0})=I](http://img.e-com-net.com/image/info5/790cf171d7794bb484b133eb92411b0b.png)
,那么有
![\large {\color{Blue} \dot{R}(t_{0})=\hat{w}(t_{0})}](http://img.e-com-net.com/image/info5/a212ccf26dc3487fb47da67e2068b943.png)
。那么在单位矩阵附近的一个旋转矩阵,我们能用一阶导来近似得到:
这是不是有点类似于速度位移之类的。我们把所有的这些反对称矩阵集合起来就组成了一个所谓的李代数Lie algebra
so(3) :
![这里写图片描述](http://img.e-com-net.com/image/info5/b6572a6e25724dd4b1f99083ab1bac57.png)
而把所有的旋转矩阵集合起来呢,就有了一个所谓的李群Lie group
SO(3)
注意是大写
:
![这里写图片描述](http://img.e-com-net.com/image/info5/3f82a147542b4f75b8a8e67f2c675794.png)
上式中的约束表示R是旋转矩阵。由前面的推导公式三知道如果R是单位矩阵,那它的导数就是一个反对称矩阵,所以只有反对称矩阵组成的空间,即
so(3),我们称之为在在单位矩阵处的正切空间tangent space.为什么称为正切呢?回忆二维曲线在某处的导数是一条切线。对于这个三维球面,那么它的导数应该是个切面。如下图所示,图片来源于tangent space 的 wiki:
![lie group and computer vision : 李群、李代数在计算机视觉中的应用_第1张图片](http://img.e-com-net.com/image/info5/ebd7ae86d71641fabdb0ba0074745c89.jpg)
可是对于那些不是单位矩阵的旋转矩阵R该怎么找在他们位置处的正切空间呢?由公式3我们知道,在反对称矩阵的右边乘以R就能够得到R的导数,所以在非单位矩阵的R处的正切空间就是反对称矩阵乘以R就行了。
指数映射:
回到公式(3),把旋转矩阵R用x替换掉,如下:
![这里写图片描述](http://img.e-com-net.com/image/info5/65e9fa9e4598450a9e260307c6217b07.png)
求微分方程得到:
![这里写图片描述](http://img.e-com-net.com/image/info5/789d3c7f78f84c9483cd1f3699498a7d.jpg)
其中
![\large e^{\hat{w}t}](http://img.e-com-net.com/image/info5/4f72daee242b4c6abd5baa3964f8d8f3.png)
是矩阵的指数映射: ) (4) 好了,此时我们假设R(0)=I,即单位矩阵,就可以得到:
(5) 当然可以验证验证这个指数是不是旋转矩阵:
![这里写图片描述](http://img.e-com-net.com/image/info5/102fc340ad324686af5c5950599dfe7b.png)
所以,我们能够说指数映射将
so(3)映射到了
SO(3):
![这里写图片描述](http://img.e-com-net.com/image/info5/a91db2398d684ffba3b2cb7bc5bb9ae0.jpg)
也就是说找了一个通道,它将切平面上的一点可以映射到球面体上去。但是,指数还带一个矩阵这不好算吧,没关系,马上带来Rodrigues formula for rotation matrix。首先不妨看看简单的情况,假设
w 模长为1,
||w||=1 ,这时候有如下性质:
![这里写图片描述](http://img.e-com-net.com/image/info5/803dc2eff3a446c991534bb2efd1c077.png)
此时指数映射的泰勒展开式(4)式能够整理成如下形式:
![这里写图片描述](http://img.e-com-net.com/image/info5/5953b9ce01b646c6a06031d583fd9854.jpg)
注意公式中两个括号里面的内容,他们就是sin(t)和(1-cost(t)),其实这种形式的推导在欧拉方程那里也见到过。最后得到: 当然,对于任意的旋转矩阵,我们也能够找到一组对应的w,t:
上面推导的是连续时间的,并且假设
||w||=1 ,即旋转速度为单位速度,
t 是一个时间跨度,联合起来的物理意义就是在单位旋转速度
w 下,经过时间t后,旋转了多少。可是,我们常常见到的是另一种情况,单位时间t,旋转速度却不为单位模长了,
||w||≠1 。表达成公式就是如下情况:
简单整理:
![这里写图片描述](http://img.e-com-net.com/image/info5/09040dabaf4f40c8ba4eb3689c532e24.jpg)
这个时候
||w||≠1 ,因此,有
![lie group and computer vision : 李群、李代数在计算机视觉中的应用_第4张图片](http://img.e-com-net.com/image/info5/e254269bb76a4858845fb57506607198.jpg)
最后,综合起来就是:
![lie group and computer vision : 李群、李代数在计算机视觉中的应用_第5张图片](http://img.e-com-net.com/image/info5/526d44e1e92b4d7684c9b595d1f7eda4.jpg)
即:
![这里写图片描述](http://img.e-com-net.com/image/info5/6c773f354bd342a89235b978d5d67baa.jpg)
这公式就只和
w 这个三维向量有关了,
||w|| 的计算轻松加随意,三维向量变换成反对称矩阵也是容易,所以整个将三维旋转速度映射到旋转矩阵编程实现是不是也很容易了。
刚体变换和SE(3):
前面还只说了旋转,实际上刚体变换还有平移。所以,和只有旋转矩阵构成的李群SO(3) 一样,我们也可以有由刚体变换得到的李群SE(3) :
![这里写图片描述](http://img.e-com-net.com/image/info5/dcc23b79b8fd4fd7a69c4b6c931065ed.jpg)
和之前的推导一样,我们可以对如下的刚体变换矩阵求导:
![这里写图片描述](http://img.e-com-net.com/image/info5/5c902656b2074dc5870598dbf61cc588.png)
对这个矩阵的每部分进行分析可知,存在一个反对称矩阵和三维向量
![\large {\color{Blue} \hat{w}(t)\in so(3),v(t)\in \mathbb{R}^{3}}](http://img.e-com-net.com/image/info5/71b2232de95746d8a31926d22b984c49.png)
使得下面两式成立:
![这里写图片描述](http://img.e-com-net.com/image/info5/d195f0b2b27f4829b75876c4033c70fd.png)
即可以得到:
![这里写图片描述](http://img.e-com-net.com/image/info5/b284e205cf7c4c44b99d2ac8252497ad.png)
所以,我们可以和反对称矩阵一样,定一个矩阵
![\large \hat{\xi}\in \mathbb{R}^{4\times 4}](http://img.e-com-net.com/image/info5/87d3baa267324a9bb2e390339aa0b17a.png)
,注意这里这个帽子不代表反对称矩阵了:
![这里写图片描述](http://img.e-com-net.com/image/info5/e6d40f2e1525473188af2417b6671a67.jpg)
接着我们就能得到:
这和之前的推导太像了。由于有了前面的铺垫,我们可以直接给出g(t)附近的近似,而不必像之前那样从R(t)=I开始:
![\large \hat{\xi}\in \mathbb{R}^{4\times 4}](http://img.e-com-net.com/image/info5/87d3baa267324a9bb2e390339aa0b17a.png)
可以称之为在曲线g(t)处的”正切向量”,而在机器人领域,我们称它为twist。这个twist呢,就像我们开葡萄酒塞时螺旋的角速度和前进的线速度。于是把这些twist集合起来就有了刚体变换的李代数
se(3): 当然这个twist矩阵也可以表示成一个六维的向量
![\large {\color{Blue} \xi\in \mathbb{R}^{6}}](http://img.e-com-net.com/image/info5/c0393d1d483e452cb7a16feb7f83d8b1.png)
:
![这里写图片描述](http://img.e-com-net.com/image/info5/6ef9c3a192ab4ff48403fba0b5f09ce0.png)
同理,由
![这里写图片描述](http://img.e-com-net.com/image/info5/03b2d1a0e7014a108e5b3fdbc4b4970f.png)
可以得到:
![这里写图片描述](http://img.e-com-net.com/image/info5/213afbedc14d4db284bc2c6212a4f45f.jpg)
如果假设g(0)=I,有
![这里写图片描述](http://img.e-com-net.com/image/info5/29a29ecf51854d4fafb7bf92166f2521.jpg)
又到了指数映射,这个矩阵的指数映射可以写成如下形式:
![这里写图片描述](http://img.e-com-net.com/image/info5/8dea3f8e8258491ba99f468651c6841a.png)
于是我们知道了如何将
se(3) 映射到
SE(3)。
这里也来一个去掉时间t的版本:
矩阵的各个部分对应如下:
到这里基本理清了SE,SO之类的与刚体变换之间的关系,看视觉SLAM类的论文以及相应代码中有关lie部分应该没啥压力了。
各种论文里涉及到的求解位姿矩阵时的非线性最小二乘优化(牛顿法,LM法),其中增量都是在单位矩阵处的tangent space se(3)上计算,获得的增量(即相邻位姿变换关系)通过指数映射映射回多面体SE(3)上。
通过这种方式,能够避免奇异点,保证很小的变换矩阵也能够表示出来。这一段引用自论文《Scale Drift-Aware Large Scale Monocular SLAM》。
这篇博文可以说是我看慕尼黑工大(TUM)多视角几何教学视频的笔记,YouTube链接点击这里,这位牛的飞老师的英语吐字清晰,大家应该能够听懂。当然,老师也是参看的别人的文档,这里我也把讲lie 和计算机视觉的两个文档传到了csdn上,供大家下载。
祝好
–白巧克力
(转载请注明作者和出处:http://blog.csdn.net/heyijia0327 未经允许请勿用于商业用途)