位姿图优化

发布于:2025-03-09 ⋅ 阅读:(16) ⋅ 点赞:(0)

引入

在SLAM的优化过程中,特征点在优化问题中消耗了绝大部分时间。实际上,经过若干次迭代之后,收敛的特征点位置变化很小,发散的外点则已被剔除。对收敛点再进行优化,似乎是有些费力不讨好的。因此,我们更倾向于在优化几次之后就把特征点固定住,而不再实际地优化它们的位置估计。
这种把优化变量去除特征点,只剩下位姿的优化问题就构成了位姿图优化

问题建模

在两个位姿 T i T_i Ti T j T_j Tj之间有一个过度位姿 T i j T_{ij} Tij即满足以下关系:
T i T i j = T j T_iT_{ij}=T_j TiTij=Tj
位姿图
两个位姿构成了结点,过度位姿构成了位姿图的边。
由于存在噪声,这个式子不会严格相等,于是上式两边左乘 T i − 1 T i j − 1 T_i^{-1}T_{ij}^{-1} Ti1Tij1
I = T i − 1 T i j − 1 T j I=T_i^{-1}T_{ij}^{-1}T_j I=Ti1Tij1Tj
之后转换成李代数,定义误差:
e i j = l n ( T i − 1 T i j − 1 T j ) ∨ e_{ij}=ln(T_i^{-1}T_{ij}^{-1}T_j)^\vee eij=ln(Ti1Tij1Tj)
理论 e i j = 0 e_{ij}=0 eij=0,但由于噪声等误差的存在而并不等于0。

分析计算

使用李代数求导的扰动模型:
e ^ i j = ln ⁡ ( T i j − 1 T i − 1 exp ⁡ ( ( − δ ξ i ) ∧ ) exp ⁡ ( δ ξ j ∧ ) T j ) ∨ \hat{e}_{ij} = \ln \left( \boldsymbol{T}_{ij}^{-1} \boldsymbol{T}_i^{-1} \exp\left((-\delta \boldsymbol{\xi}_i)^\wedge\right) \exp\left(\delta \boldsymbol{\xi}_j^\wedge\right) \boldsymbol{T}_j \right)^\vee e^ij=ln(Tij1Ti1exp((δξi))exp(δξj)Tj)
为了使用BCH近似,想把扰动项移到左边或者右边,使用以下的伴随公式:
exp ⁡ ( ( Ad ( T ) ξ ) ∧ ) = T exp ⁡ ( ξ ∧ ) T − 1 \exp\left((\text{Ad}(\boldsymbol{T})\boldsymbol{\xi})^\wedge\right) = \boldsymbol{T} \exp\left(\boldsymbol{\xi}^\wedge\right) \boldsymbol{T}^{-1} exp((Ad(T)ξ))=Texp(ξ)T1
即:
{ T j exp ⁡ ( ( − Ad ( T j − 1 ) δ ξ i ) ∧ ) T j − 1 = exp ⁡ ( − δ ξ i ∧ ) T j exp ⁡ ( ( Ad ( T j ) ξ j ) ∧ ) = exp ⁡ ( δ ξ j ∧ ) T j \begin {cases} \boldsymbol{T_j} \exp\left((-\text{Ad}(\boldsymbol{T_j^{-1}})\boldsymbol{\delta\xi_i})^\wedge\right)\boldsymbol{T_j}^{-1} = \exp\left(\boldsymbol{-\delta\xi_i}^\wedge\right) & \\ \boldsymbol{T_j} \exp\left((\text{Ad}(\boldsymbol{T_j})\boldsymbol{\xi_j})^\wedge\right)= \exp\left(\boldsymbol{\delta\xi_j}^\wedge\right)\boldsymbol{T_j} & \end {cases} {Tjexp((Ad(Tj1)δξi))Tj1=exp(δξi)Tjexp((Ad(Tj)ξj))=exp(δξj)Tj
代入计算得:
e ^ i j = ln ⁡ ( T i j − 1 T i − 1 T j exp ⁡ ( ( − Ad ( T j − 1 ) δ ξ i ) ∧ ) exp ⁡ ( ( Ad ( T j − 1 ) δ ξ j ) ∧ ) ) ∨ ≈ ln ⁡ ( T i j − 1 T i − 1 T j [ I − ( Ad ( T j − 1 ) δ ξ i ) ∧ + ( Ad ( T j − 1 ) δ ξ j ) ∧ ] ) ∨ ≈ e i j + ∂ e i j ∂ δ ξ i δ ξ i + ∂ e i j ∂ δ ξ j δ ξ j \hat{e}_{ij}= \ln \left( T_{ij}^{-1} T_i^{-1} T_j \exp \left( (-\text{Ad}(T_j^{-1}) \delta \xi_i)^\wedge \right) \exp \left( (\text{Ad}(T_j^{-1}) \delta \xi_j)^\wedge \right) \right)^\vee \\ \approx \ln \left( T_{ij}^{-1} T_i^{-1} T_j \left[ I - (\text{Ad}(T_j^{-1}) \delta \xi_i)^\wedge + (\text{Ad}(T_j^{-1}) \delta \xi_j)^\wedge \right] \right)^\vee\\ \approx e_{ij} + \frac{\partial e_{ij}}{\partial \delta \xi_i} \delta \xi_i + \frac{\partial e_{ij}}{\partial \delta \xi_j} \delta \xi_j e^ij=ln(Tij1Ti1Tjexp((Ad(Tj1)δξi))exp((Ad(Tj1)δξj)))ln(Tij1Ti1Tj[I(Ad(Tj1)δξi)+(Ad(Tj1)δξj)])eij+δξieijδξi+δξjeijδξj
通过比较最后两行的式子,我们求出了误差关于两个位姿的雅可比矩阵:
{ ∂ e i j ∂ δ ξ i = − J r e i j Ad ( T j − 1 ) ∂ e i j ∂ δ ξ j = J r e i j Ad ( T j − 1 ) \begin {cases} \frac{\partial e_{ij}}{\partial \delta \xi_i} = - J_re_{ij}\text{Ad}(T_j^{-1}) & \\ \frac{\partial e_{ij}}{\partial \delta \xi_j} = J_re_{ij}\text{Ad}(T_j^{-1}) & \end {cases} {δξieij=JreijAd(Tj1)δξjeij=JreijAd(Tj1)
由于se(3)上的左右雅可比 J r / J l J_r/J_l Jr/Jl形式过于复杂,我们通常取它们的近似。如果误差接近零就可以认为它们近似为I或:
J r − 1 ( e i j ) ≈ I + 1 2 [ ϕ e ∧ ρ e ∧ 0 ϕ e ∧ ] . J_{r}^{-1}(e_{ij}) \approx I + \frac{1}{2} \begin{bmatrix} \phi_{e}^{\wedge} & \rho_{e}^{\wedge} \\ 0 & \phi_{e}^{\wedge} \end{bmatrix}. Jr1(eij)I+21[ϕe0ρeϕe].
E \mathcal{E} E为所有边的集合,那么总体目标函数为:
E i j = min ⁡ 1 2 ∑ i , j ∈ E e i j T Σ i j − 1 e i j . E_{ij}=\min \frac{1}{2} \sum_{i,j \in \mathcal{E}} e_{ij}^T \Sigma_{ij}^{-1} e_{ij}. Eij=min21i,jEeijTΣij1eij.
接下来就可以按照前面的最小二乘问题的方法进行求解。用高斯牛顿法等方法。