本文为b站视频的一个笔记
在SLAM中,我们经常要解下面一个问题
F=minJ(T)=Σi=1N∣∣zi−Tpi∣∣2F = minJ(T) = \Sigma_{i=1}^N||z_i - Tp_i||^2F=minJ(T)=Σi=1N∣∣zi−Tpi∣∣2
这个问题中, T是位姿变量。对于求最小值问题,我们第一步就要求函数对于变量的偏导数,比如说我们对y=x2y = x^2y=x2这个函数来说,偏导数就是 y′=2xy' = 2xy′=2x, 初始值x=10x = 10x=10, 设置步长为1,那就是逐步从10->0. 直到偏导数等于0的时候,收敛至稳定解x= 0.
这里我们要求F对T的偏导数
然后将小量 δT\delta TδT 加到T上去迭代
因为表示旋转的李群SO(3)是不能直接相加的,所以这里要费一番功夫来介绍李代数的概念。
一、群的概念
用于机器人中表示位姿的是特殊正交群SO(3):
SO(3)=R∈3×3∣RRT=I,det(R)=1SO(3) = {R\in 3\times 3| RR^T=I, det(R) = 1}SO(3)=R∈3×3∣RRT=I,det(R)=1
严格的来说,群需要满足如下定义:
- 封闭性 ∀a1,a2∈A,a1a2∈A\forall a_1, a_2 \in A, a_1a_2\in A∀a1,a2∈A,a1a2∈A
- 结合律 ∀a1,a2,a3,a1a2a3=a1(a2a3)\forall a_1, a_2, a_3, a_1a_2a_3 = a_1(a_2a_3)∀a1,a2,a3,a1a2a3=a1(a2a3)
- 幺元 ∃a0,s.t.∀a∈A,a0a=aa0=a\exists a_0, s.t. \forall a\in A, a_0a = aa_0 = a∃a0,s.t.∀a∈A,a0a=aa0=a
- 逆 ∀a∈A,∃a−1∈A,s.t.aa−1=a0\forall a \in A, \exists a^{-1} \in A, s.t. aa^{-1}=a_0∀a∈A,∃a−1∈A,s.t.aa−1=a0
上面四个条件用人话说一遍其实就是:1. 两个这种东西相乘,本质还是这个东西。2. 先乘后乘一样。3. 有一个单位阵。4. 有个相反的东西可以让它乘了就回去。可以简单的验证,旋转矩阵集合+矩阵乘法,它是构成群的。
李群是指连续性质的群,很显然,SO(3)是属于李群的。
SO(3)有个缺点,那就是它是由旋转矩阵+乘法构成的,它没有加法。因此直接在SO(3)上求偏导数不行,得想其他办法。而李代数,刚好能解决这个问题。李代数对应李群的正切空间,它描述了李群局部的导数。
二、李代数
首先对旋转矩阵的导数形式进行了探索:
也就是说,旋转矩阵是可以表示成指数形式的。那只要把ϕ\phiϕ找出来,就可以求旋转矩阵的导数了。
李代数的定义
每一个李群都有与之对应的李代数,李代数描述了李群单位元数的正切空间性质
三维空间向量 + R3R^3R3 + 叉乘运算 构成李代数
其中,这个里面证明ϕ\phiϕ是一个单位向量与模长相乘,那么就可以说明它就是旋转向量。