视觉SLAM第四讲

因为在 SLAM 中位姿是未知的,而我们需要解决形如“什么样的相机位姿最符合当前观测数据”这样的问题。一种典型的方式是把它构建成一个优化问题,求解最优的 R 、 t \mathrm{R、t} Rt,使得误差最小化。如前所言,旋转矩阵自身是带有约束的(正交且行列式为 1)。它们作为优化变量时,会引入额外的约束,使优化变得困难。通过李群—李代数间的转换关系,我们希望把位姿估计变成无约束的优化问题,简化求解方式。

李群、李代数

李群

旋转矩阵也好,变换矩阵也好,它们对加法是不封闭的,SO(3)和SE(3)关于乘法是封闭的,对于这种只有一个(良好的)运算的集合,我们称之为群。群(Group)是一种集合加上一种运算的代数结构。我们把集合记作 A,运算记作 ·,那么群可以记作G = (A, ·)。群要求这个运算满足以下几个条件:

在这里插入图片描述

三维旋转矩阵构成了特殊正交群SO(3),而变换矩阵构成了特殊欧氏群SE(3)。

在这里插入图片描述

李群是指具有连续(光滑)性质的群。像整数群Z那样离散的群没有连续性质,所以不是李群。而SO(n)和SE(n)在实数空间上是连续的。

李代数

每个李群都有与之对应的李代数。李代数描述了李群的局部性质,准确地说,是单位元附近的正切空间。

李代数由一个集合 V,一个数域 F 和一个二元运算 [, ] 组成。如果它们满足以下几条性质,则称(V, F, [, ]) 为一个李代数,记作 g。

在这里插入图片描述

其中二元运算被称为李括号。从表面上来看,李代数所需要的性质还是挺多的。相比于群中的较为简单的二元运算,李括号表达了两个元素的差异。它不要求结合律,而要求元素和自己做李括号之后为零的性质。作为例子,三维向量 R 3 \mathrm{R} ^{3} R3上定义的叉积 × \times ×是一种李括号,因此 g = ( R 3 , R , × ) \mathrm{g=(R^{3},R,\times )} g=(R3,R,×)构成了一个李代数。读者可以尝试将叉积的性质代入到上面四条性质中。

在这里插入图片描述

在这里插入图片描述

李群李代数间的指数、对数映射

R = e x p ( ϕ ∧ ) \boldsymbol{R}=exp( \phi ^{\wedge } ) R=exp(ϕ)

在这里插入图片描述

推导:

在这里插入图片描述

R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ n ∧ \boldsymbol{R}=\cos \theta \boldsymbol{I}+(1-\cos \theta) \boldsymbol{n} \boldsymbol{n}^{\mathrm{T}}+\sin \theta \boldsymbol{n}^{\wedge} R=cosθI+(1cosθ)nnT+sinθn

概述图:

在这里插入图片描述

BCH

BCH 公式

在这里插入图片描述

其中 [] 为李括号。BCH 公式告诉我们,当处理两个矩阵指数之积时,它们会产生一些由李括号组成的余项。特别地,考虑 SO(3) 上的李代数 ln ⁡ ( exp ⁡ ( ϕ 1 ∧ ) exp ⁡ ( ϕ 2 ∧ ) ) ∨ \ln \left(\exp \left(\phi_{1}^{\wedge}\right) \exp \left(\phi_{2}^{\wedge}\right)\right)^{\vee} ln(exp(ϕ1)exp(ϕ2)),当 ϕ 1 \phi_{1} ϕ1 ϕ 2 \phi_{2} ϕ2 为小量时,小量二次以上的项都可以被忽略掉。此时,BCH 拥有线性近似表达

在这里插入图片描述

BCH 近似的意义

假定对某个旋转 R \mathbf{R} R,对应的李代数为 ϕ \phi ϕ。我们给它左乘一个微小旋转,记作 Δ R \Delta \mathbf{R} ΔR,对应的李代数为 Δ ϕ \Delta \phi Δϕ。那么,在李群上,得到的结果就是 Δ R ⋅ R \Delta \mathbf{R}·\mathbf{R} ΔRR,而在李代数上,根据 BCH 近似,为 J l − 1 ( ϕ ) Δ ϕ + ϕ J_{l}^{-1}(\phi )\Delta \phi +\phi Jl1(ϕ)Δϕ+ϕ。合并起来,可以简单地写成:

在这里插入图片描述

反之,如果我们在李代数上进行加法,让一个 ϕ \phi ϕ加上 Δ ϕ \Delta \phi Δϕ,那么可以近似为李群上带左右雅可比的乘法:

在这里插入图片描述

SO(3)李代数上的求导

下面来讨论一个带有李代数的函数,如何关于该李代数求导的问题。该问题有很强的实际背景。在 SLAM 中,我们要估计一个相机的位置和姿态,该位姿是由 SO(3) 上的旋转矩阵或 SE(3) 上的变换矩阵描述的。不妨设某个时刻小萝卜的位姿为 T T T。它观察到了一个世界坐标位于 p p p的点,产生了一个观测数据 z z z。那么,由坐标变换关系知:

z = T p + w z=Tp+w z=Tp+w

其中 w w w为随机噪声。由于它的存在, z z z往往不可能精确地满足 z = T p z=Tp z=Tp的关系。所以,我们通常会计算理想的观测与实际数据的误差:

e = z − T p e=z-Tp e=zTp

假设一共有 N 个这样的路标点和观测,于是就有 N 个上式。那么,对小萝卜的位姿估计,相当于是寻找一个最优的 T T T,使得整体误差最小化:

min ⁡ T J ( T ) = ∑ i = 1 N ∥ z i − T p i ∥ 2 2 \min _{\boldsymbol{T}} J(\boldsymbol{T})=\sum_{i=1}^{N}\left\|\boldsymbol{z}_{i}-\boldsymbol{T} \boldsymbol{p}_{i}\right\|_{2}^{2} minTJ(T)=i=1NziTpi22

求解此问题,需要计算目标函数 J J J关于变换矩阵 T T T的导数。我们把具体的算法留到后面再讲。这里的重点是,我们经常会构建与位姿有关的函数,然后讨论该函数关于位姿的导数,以调整当前的估计值。然而,SO(3), SE(3) 上并没有良好定义的加法,它们只是群。如果我们把 T T T当成一个普通矩阵来处理优化,那就必须对它加以约束。而从李代数角度来说,由于李代数由向量组成,具有良好的加法运算。因此,使用李代数解决求导问题的思路分为两种:

  1. 用李代数表示姿态,然后根据李代数加法来对李代数求导。
  2. 对李群左乘或右乘微小扰动,然后对该扰动求导,称为左扰动和右扰动模型。第一种方式对应到李代数的求导模型,而第二种则对应到扰动模型。下面来讨论这两种思路的异同。
李代数加法求导

首先,考虑 SO(3) 上的情况。假设我们对一个空间点 p p p 进行了旋转,得到了 R p Rp Rp。现在,要计算旋转之后点的坐标相对于旋转的导数,我们非正式地记为:

∂ R p ∂ R \frac{\partial \boldsymbol {Rp}}{\partial \boldsymbol R} RRp

由于 SO(3) 没有加法,所以该导数无法按照导数的定义进行计算。设 R R R对应的李代数为 ϕ \phi ϕ,我们转而计算:

∂ exp ⁡ ( ϕ ∧ ) p ∂ ϕ \frac{\partial \boldsymbol\exp (\boldsymbol{\phi}^{\wedge })\boldsymbol p }{\partial \boldsymbol \phi} ϕexp(ϕ)p

按照导数的定义,有:

在这里插入图片描述

第 2 行的近似为 BCH 线性近似,第 3 行为泰勒展开舍去高阶项后的近似(但由于取了极限,可以写等号),第 4 行至第 5 行将反对称符号看作叉积,交换之后变号。

不过,由于这里仍然含有形式比较复杂的 J l J_{l} Jl,我们不太希望计算它。而下面要讲的扰动模型则提供了更简单的导数计算方式。

李代数的扰动模型

扰动模型(左乘)

另一种求导方式是对 R R R 进行一次扰动 Δ R \Delta {R} ΔR,看结果相对于扰动的变化率。这个扰动可以乘在左边也可以乘在右边,最后结果会有一点儿微小的差异,我们以左扰动为例。设左扰动 Δ R \Delta {R} ΔR 对应的李代数为 φ \varphi φ。然后,对 φ \varphi φ 求导,即:

在这里插入图片描述

该式的求导比上面更为简单:

在这里插入图片描述

相比于直接对李代数求导,省去了一个雅可比 J l J_{l} Jl的计算。这使得扰动模型更为实用。

习题

p5.证明:

R p ∧ R T = ( R p ) ∧ \mathrm{Rp^{\wedge } R^{T} } =(\mathrm{Rp} )^{\wedge } RpRT=(Rp)

证明: ⇒ ( R p ) ∧ n = ( R p ) × ( R R − 1 n ) = R [ p × ( R − 1 n ) ] = R p ∧ R ⊤ n \Rightarrow(\mathrm{Rp})^{\wedge} \mathrm{n}=(\mathrm{Rp}) \times\left(\mathrm{RR}^{-1} \mathrm{n}\right)=\mathrm{R}\left[\mathrm{p} \times\left(\mathrm{R}^{-1} \mathrm{n}\right)\right]=\mathrm{Rp}^{\wedge} \mathrm{R}^{\top} \mathrm{n} (Rp)n=(Rp)×(RR1n)=R[p×(R1n)]=RpRn

⇒ R p ∧ R T = ( R p ) ∧ \Rightarrow \mathrm{Rp^{\wedge } R^{T} } =(\mathrm{Rp} )^{\wedge } RpRT=(Rp)

第二个等号是因为叉乘的旋转不变性:向量间的叉乘后旋转等于向量分别旋转后再叉乘。

p6.证明:

R exp ⁡ ( p ∧ ) R T = exp ⁡ ( ( R p ) ∧ ) \mathrm{R\exp (p^{\wedge }) R^{T} } =\exp ((\mathrm{Rp} )^{\wedge }) Rexp(p)RT=exp((Rp))

该式称为SO(3) 上的伴随性质

证明: Rexp ⁡ ( p ∧ ) R T = R ∑ n = 0 ∞ p ∧ n n ! R T = ∑ n = 0 ∞ ( R p ∧ R T ) n n ! = exp ⁡ ( R p ∧ R T ) = exp ⁡ ( ( R p ) ∧ ) \mathrm{\operatorname{Rexp}\left(p^{\wedge}\right) R^{T}=R \sum_{n=0}^{\infty} \frac{p^{\wedge n}}{n!} R^{T}=\sum_{n=0}^{\infty} \frac{\left(R p^{\wedge} R^{T}\right)^{n}}{n!}=\exp \left(R p^{\wedge} R^{T}\right)=\exp \left((R p)^{\wedge}\right)} Rexp(p)RT=Rn=0n!pnRT=n=0n!(RpRT)n=exp(RpRT)=exp((Rp))

第二个等号由旋转矩阵的正交性易得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Just-do-it!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值