关于李理论的意义与SLAM应用
什么是李理论
在日常的线性代数里,我们用一个矩阵就能揉捏一个二维向量,旋转、缩放、仿射都可以,反正矩阵乘一下就行。但到了高维就没这么轻松了,尤其是旋转这种操作,矩阵要连乘,写几步就一长串,而且旋转矩阵自带约束,不能随便加减。李理论干的事情,就是把旋转从二维推广到更高的维度,并且给出一个能连续转动的数学描述。
从几何上讲,李理论表达的是高维空间里的连续旋转,比如一个物体慢慢转过去,中间每个角度都得有定义,不能转一半突然跳了。从数学上讲,它是研究更难的微分方程时准备的一套统一理论,地位有点像伽罗瓦理论之于代数方程的根:先找出一类对象背后的公共结构,再拿这套结构去解决一大片问题。
之前在写无人机的时候,我们表达一个旋转用到了四元数的概念,一般小飞机都用四元数去表示,那么为什么四元数可以表达姿态呢?答案就是它是李理论的产物。单位四元数本身就住在一个三维球面上,模长为 1 这个约束让它天然成为一个李群,和 SO3 之间是差一个正负号的双覆盖关系,q和-q对应的是同一个旋转。李理论(Lie theory)包含了李群、李代数、李括号等等,最早由 Sophus Lie 研究,但真正被发扬光大还是在他去世之后。接下来就进入李理论的正题。
李理论各概念之间的关系
在维基百科里搜索李理论,会弹出一张很漂亮的图片(就是下面这张),要想看懂这张图,得先把群的概念捡起来:
- 群是群论研究的代数结构,也就是一个集合配上一套满足条件的运算。

一个群可以由各种更为简单的群拼出来。如果一个群只包含有限个元素,那它就是有限群;有限群可以一路往下分解,最后拆不动的那些部件就叫单群。单群里有很大一部分能按相似的方式凑出无限多个,叫做无限族,剩下的就是零零散散的散在单群。下面这张图叫做E8根系图,图里的根是一组线性独立的向量,整个代数的结构都可以由它们的线性组合搭出来。至于为什么要画成这么对称的花样,可能就是为了美吧。
李群就更特殊了,它既是群又是流形。作为群而言,它满足封闭、结合、幺元、逆元这几条性质。
- 封闭性:在群内的元素按照运算得到的元素仍在群内
- 结合性:比如g(h*f)=(g*h)f
- 幺元:e*g=g*e=g
- 逆元:g*h=h*g=e
流形这个词听着唬人,其实用一段圆弧就能感受出来:圆上被红色标记的那段弧就是一个流形,它可以丝滑地摊成一段直线,直线也能反向弯回弧。高维也一样,比如三维的圆环形,随便取一个足够小的面片,它和平面之间也可以平滑地互相变换,平面能弯成曲面,曲面也能压回平面。

用拓扑学的说法,流形就是可以局部欧几里得空间化的一个拓扑空间,即在此拓扑空间中,每个点附近局部类似于欧氏空间。更精确地说,n维流形是一个拓扑空间,其性质是每个点都有一个邻域,该邻域同胚于n维欧氏空间的一个开集。通俗点说,拓扑允许我们把图形像锻打钢铁一样随意拉长压扁,只要不撕开也不粘住;流形就是局部能这样被压平的图形。每压平一块就得到一张图卡,很多张图卡拼起来盖住整个流形就叫图册,名字跟地图册是一个意思。
李代数和李群有直接关系,我们举一个现实的例子:地球模型和地图的制作。古代人靠一步一步测量,把地面上的信息一笔一笔画到平面的图纸上,相当于经历了一个从流形变成平面的过程;现在的人已经飞入太空,可以直观地观察地球全貌,再把球面投影到一个平面上制成地图,这张地图就相当于李代数。

在复数域我们可以理解为一个映射过程:
单位圆上的一个点 $e^{i\theta}$ 也可以理解为一个向量,把它投影到虚轴上,就完成了李群映射到李代数。而这个过程就是指数映射,反过来把平面上的点送回流形,就是对数映射。而李代数就是李群在幺元处的特殊空间,也叫切空间,可以看成李群贴在幺元附近的一张平面地图。
接下来我们把它升级到三维:

球面就是我们的李群,平面就是李代数。通过指数映射,李群中的每个元素 $G$ 在李代数中都有一个等价的元素 $X_3$,满足 $G=exp(X_3)$;李代数上通过原点 $\epsilon$ 的每条直线在李群上都对应一条等价的路径 $\gamma(t)=exp(vt)$,使得李群流形里的乘法运算可以在李代数的线性空间里找到对应的写法。也就是说,球面上绕着幺元的转动,可以直接拉到平面上,用我们熟悉的向量来研究,这就是李代数最实用的地方。
李代数是对李群的局部描述,离幺元远了就会失真,就像地图离投影中心越远畸变越大。现在在球面上取几个点,并投影到平面上:

其中的 $\vec g·\vec h$ 为乘积,在三维空间这几个值都是向量,所以我们可以做出大胆的猜测:
可惜现实没有这么美好,实际上我们可以用Taylor展开得到:
而其中的[,]就是李括号,它的计算方式为:
简单缩写一下可以写作:$R=log(\vec g·\vec h)$,$A=log(\vec g)$,$B=log(\vec h)$,最终得到的这个公式叫做BCH公式。这个公式最早是Campbell和Baker先后研究出来的,Hausdorff处理了它的收敛性,后来Dynkin才把完整级数写清楚,所以有些书上也叫BCH-Dynkin公式。注意看第一项就是普通加法,后面全是李括号的嵌套,这就说明只有当A、B可以交换(李括号为零)时,对数才老老实实等于两项相加,一旦不可交换,就得把括号项一层层补上。
这样我们就可以在李代数上进行乘法了。在SLAM里其实没人会把整个级数写出来,一般只取前一两项:比如 $log(exp(A)exp(B)) \approx A+B+\frac{1}{2}[A,B]$,扰动很小的时候干脆只留 $A+B$,也就是“在李代数上加个增量,再指数映射回李群”这个标准套路。我们在两边再取指数就得到了逆变换,这就是李群和李代数沟通的桥梁:指数变换和对数变换,顺便也把李群的乘法和李代数的加法联系起来了。
李群的性质
就在刚刚,我们完成了与李群、李代数和李括号的第一次见面。可以把李括号理解成李群里的一种运算,它存在的意义就是沟通李群和李代数:有了BCH公式,李群里的乘法就能搬到李代数上算,不然每次都去啃那个又长又麻烦的Taylor展开,谁也受不了。

接下来认识几个SLAM里最常见的符号:SO3,SE3,so3,se3。其中大写的是李群,小写的是李代数。
- SO3:三维空间旋转矩阵群
- SE3:三维特殊欧几里得群
- so3:SO3对应的李代数,一个三维向量$\phi$配上帽子符号$\wedge$,就能变成反对称矩阵
- se3:SE3对应的李代数,是一个六维向量,把旋转部分和平移部分拼在一起
补充几个数学中用到的群
- SU3:特殊幺正群,代表了复数三维空间上的幺正矩阵。
其中SO3包含现实含义:一个物体的连续三维运动,可以理解为一个旋转矩阵R关于时间t的函数。旋转矩阵有个硬性条件:
两边对t求导得:
移项得:
其中$R^TR’$满足反对称矩阵($A^T=-A$),记为:$\hat \omega$
我们经过简单计算得到:
这下旋转矩阵的导数有了一个干净的表达式:它等于自己乘上一个反对称矩阵。$\hat \omega$里的$\omega$可以理解成角速度向量,帽子符号$\wedge$负责把一个三维向量排成反对称矩阵。旋转矩阵的微分关系到这里就写清楚了,解这个微分方程得到:
这里的exp不是普通数的指数,而是矩阵指数。这个结果说明,常角速度的旋转可以写成指数映射的形式,$\hat \omega$是李代数里的元素,$exp(\hat \omega t)$又回到了李群里。把它具体展开就是教科书上的Rodrigues公式,角度很小的时候还可以近似成$exp(\hat \phi^\wedge)\approx I+\hat \phi^\wedge$,这就是SLAM里更新旋转时最好用的近似。
SE3也是同样的套路,它把旋转和平移装进一个4x4的齐次变换矩阵,用来表示相机的位姿。se3里的元素记作$(\rho,\phi)$,$\rho$管平移、$\phi$管旋转,两者被指数映射揉在一起,出来的平移部分并不直接等于$\rho$,中间还隔着一层雅可比矩阵,这也是SE3比SO3麻烦的地方。写优化的时候,我们不会直接去加那个4x4矩阵,而是在se3上算一个增量$\delta \xi$,再用$T\leftarrow T exp(\delta \xi^\wedge)$更新回去,既不用管正交约束,又方便求导。左乘和右乘对应的是不同的参考坐标系,这个等以后写SLAM的时候再展开。
总结
这一期把李群、李代数、指数映射和BCH公式串了一遍,能看出来它们讲的就是同一件事:李群负责准确描述旋转和位姿,李代数负责省事地计算,两边靠指数映射和对数映射来回转换。上面挂的这篇arXiv论文讲的是李对称群方法在微分方程里的应用,正好呼应了开头“李理论是解微分方程的统一理论”这句话,想往数学方向深挖的可以翻一翻。李理论在SLAM里到处都会用到,等之后写SLAM文章的时候再回来补上实际的代码。