李群和李代数
还记得我们在ch2章中指出,SLAM的本质是一个优化问题。视觉SLAM就是根据摄像机的观测结果,通过优化的方法来确定摄像机位姿和特征点位置的一个过程。在ch3的介绍中我们知道,摄像机的姿态可用变换矩阵来表示,也可以用旋转矢量
来表示。
是一个
的矩阵含有9个未知数,而
只含有3个未知数。因此
的表示法存在信息冗余,其中的元素应当满足某些约束,如正交阵的各种约束。这种约束使得SLAM中的优化问题是带约束的,给实际执行带来困难。为了将这种有约束优化问题转换成无约束优化问题,需要用到本章所讨论的李群和李代数等数学知识。
一、李群
所谓的群,就是定义在一个集合和一种运算上的代数结构。比如整数和加法就构成了一种群,去掉零的有理数和乘法也构成群。并不是任意一个集合加一种运算都能构成群,这种定义在集合上的运算必须满足如下“封结幺逆”条件,读者可用上述两个群代入协助理解
(1)封闭性:两个元素的运算结果仍属于这个集合。
(2)结合律:以加法为例,因此满足结合律。矩阵的叉乘就不满足结合律,即
。
(3)幺元:存在一个元素,这个元素与集合中任意元素
的运算结果仍等于这个
。整数加法群中的
和有理数乘法群中的
都是幺元。
(4)逆:对于任意一个元素,在集合中一定可以找到另外一个元素与此元素的运算结果等于幺元。对于整数加法群,逆就是求相反数;对于去零有理数乘法群,逆就是求倒数。
李群是指具有连续性质的群,例如前面所说的整数加法群就不是连续群。本书主要用到的李群是三维旋转变换群和三维欧氏变换群
。
群中的元素为坐标变换矩阵
,运算为矩阵乘法。
中的元素为坐标变换矩阵
,运算也是矩阵乘法。关于
的概念可参考上一篇博客ch3。两个正交阵之和并不一定是正交阵,因此无法在
或
的集合上定义加法运算。如此一来更无法定义其中元素的微分或导数,这是因为微分的本质是差分的极限。SLAM优化中需要不断改变变换矩阵的值以寻找目标函数的最优值,因此需要用到变换矩阵的微分或导数运算。为了解决这个问题,引入李代数的概念。
二、李代数
李代数由一个集合,一个数域
和一个二元运算
组成,并满足如下条件。三维向量
,实数和叉乘运算就构成了一个李代数,读者可代入以下各条验证。
(1)封闭性,集合中任意两个元素经二元运算后的结果仍在集合中。
(2)双线性,两个集合的线性组合与第三个集合作二元运算,等于这两个集合分别与第三个集合作二元运算的线性组合。即有
(3)自反性,集合中元素与自身的二元运算结果为零。
(4)雅可比等价:
其中的二元运算又称为李括号。
常见的李代数有和
。为了解释这两种李代数,需要先定义一种李括号。前面已经介绍过叉乘矩阵,即任意一个列阵
按如下方式排列得到
(1)
根据上式可知,已知一个叉乘矩阵也可反求对应的列阵,记为。在此定义下,两个列阵
的李括号为
(2)
至此,我们可以定义。它是一种李代数,其集合元素是三维坐标列阵
,它的数域是实数,它的二元运算或李括号为式(2)。
类似地,李代数也是一种李代数,其集合元素是六维坐标列阵
,其中三维坐标列阵
表示平移。
就是
中的元素。它的数域也是实数,它的李括号为
(3)
其中
(4)
需要补充说明的是,向量和矢量是同一个概念,向量或矢量与坐标列阵或矩阵是完全不同的概念。为了区分起见,本博客中使用了不同的符号予以区分,矢量一般加上箭头。高翔博士著作中常用向量来称呼坐标列阵,这可能是某种习惯,大家要注意。数组是计算机行业的用语,可用于在计算机中表征矩阵。
三、李群与李代数之间的映射关系
1.映射方法
我们知道李群中的元素为旋转矩阵或变换矩阵
,李代数
中的元素为
,这二者之间有什么关系呢?研究表明,这种关系为
(5)
即中的元素坐标列阵
,转换为叉乘矩阵后再求指数运算就可以得到
中的元素旋转矩阵
,我们简称这种关系为指数映射。反过来,在已知
的情况下可通过对数映射求
,即
(6)
现在想想我们为什么要引入李代数呢?我们前面讲到,李群
中的元素不满足加法运算但满足乘法运算。对数可以将实数乘法运算转换成加法运算。若此规律对矩阵也适用,则李群
通过式(6)映射到李代数
上后,其元素
就会满足加法运算,从而为导数的定义提供可能。
类似地,李群中的元素为旋转矩阵或变换矩阵
,李代数
中的元素为
,它们之间的映射关系为
(7)
其逆映射为
(8)
2.计算方法
我们虽然明确了李群和李代数之间的关系,然而还不清楚如何具体计算式(5-8)中的函数。这并不是实数的指数和对数函数,而是矩阵的指数和对数函数,因此需要进一步明确。对于式(5),其具体计算方法就是前面介绍的罗德里格斯公式。令
,则
(9)
式(6)的具体计算方法为
(10)
对于式(7),计算时先根据分离得到
和
,然后式(9)计算
,按下式计算中间变量
(11)
最后按下式计算的最终结果
(12)
在已知的情况下计算
的过程也不难。先从
左上角取出
,然后根据式(10)计算得到
的值。接着计算
并根据式(11)求得
。最后从
左上角取出
,因为现在
均为已知,所以这是一个关于
的线性方程组,不难求得。在确定
和
的情况下,按
排列即可。
四、坐标对变换矩阵的求导方法与比较
这里第1小节先给出讨论位矢对变换矩阵的求导的目的和方法。第2小节分析李代数求导和扰动模型法的区别。第2节内容比较难,可暂时跳过。
1.坐标对变换矩阵的求导方法
在前篇ch2中已提到SLAM实质上是一个优化问题并给出了优化模型。对于视觉SLAM而言,由于作用在相机上的外力未知,一般不采用运动方程,这样优化模型就只剩下量测方程。根据博文ch3中二、4节的分析,在考虑量测噪声的情况下量测方程可写为
(13)
其中为量测噪声,
为观测结果,即
的齐次坐标。
即
为世界坐标系中的齐次坐标,这里按计算机视觉的惯例不与世界坐标系中的坐标
区分。
为坐标变换矩阵。为了求解最优的相机位姿
,令
。为了简化起见,这里先假设
,即路标的世界坐标是已知的。对于每一个路标点或观测,都可得到一个方程共N个。优化的目的是通过调整相机的位姿或
的值,使得正体误差最小,即
(13)
取极值的方法是先求驻点即一阶导数,那么应该如何求呢?我们已经知道
上没有定义加法,因此
没有定义,即无法计算
。由于
的信息浓缩在
中,因此可将
理解为
,进而得到
的具体算法。这种具体算法有两种,有兴趣的读者可看下一小节的进一步分析。常用的那种称为扰动模型法,其结果为
(14)
对于只有旋转的情况,扰动模型法的结果为
(15)
2.*不同求导方法的比较与讨论
根据导数的定义,表示
发生微小变化后
的变化量。那么我们如何让
发生微小变化呢?显然不能让
中的元素任意发生微小变化,这是因为
不满足加法法则,
中元素任意发生变化后不能保证它仍然是变换矩阵。第一种办法是让
发生微小变化
,这样
就会变成
所对应的值
,进而可计算
。其结果记为
,称为李导数求导方法。这种方法所得结果比较复杂,不利于实际应用。第二种方法是先假设
的变化量可用一个变换矩阵
左乘来表征,即变化后的变化矩阵为
。由于
满足乘法法则,因此
仍然是一个变换矩阵,可求得其对应的
。计算
并求极限可得
的第二种计算方法。其结果记为
,称为扰动模型法。
为什么两种导数计算方法的结果会不同呢?其本质是两种求导方法中的自变量不同。李导数求导时的自变量是,而扰动模型求导数时的自变量是
。举一个简单的例子,用x表示
,用y表示
,设二者关系为
。用
表示
。计算李导数相当于求
,其结果为
(16)
用扰动模型计算导数时相当于计算,其结果为
(17)
两个结果显然不同,二者相差。
这两种不同的求导方法会对优化结果产生影响吗?显然,我们如果以或x为自变量时,当然要选择李导数的求导方法。如果选择
或y为自变量时,就要选择扰动模型法来计算导数。两种导数的计算结果仅相差
或
。在优化时,若
或
仅发生微小的变化(在每一步的迭代中事实也是如此),则这
或
可视为固定,因此采用不同的求导方法来优化一般不会对结果产生影响。
上面论述过程中一方面强调不能之间对求导,一方面又说扰动模型其实就是对
求导,这是否存在矛盾?前者强调的是求导方法,后者强调的是求导对象。事实上,两种求导方法中自变量都是
,李导数求导方法中应变量的变化是根据
的变化计算,而扰动模型法中应变量的变化是根据
的变化来计算。
五、总结
视觉SLAM的本质是一个静态优化问题,优化变量为变换矩阵。优化过程中需要将目标函数对优化变量求导。由于
不满足加法法则,无法直接定义求导方法。通过引入李导数,将欧式群
映射到李代数
上,从而使得导数计算变得可能。求导方法有两种,在实际应用中,我们常使用扰动模型法,其结果如式(14)和(15)所示。