Hi my new friend!

MASt3R-SLAM

Scroll down

简介

MASt3R-SLAM 是一种基于深度学习的实时单目 SLAM(Simultaneous Localization and Mapping)系统。它结合了传统 SLAM 方法和深度神经网络的优势,能够在环境中实现高精度的相机定位和三维地图构建。相比于先前的DROID-SLAM,进一步提升了优化的效率和精度,本文重点关注前端优化部分。

位姿优化

MASt3R-SLAM的位姿优化函数为gauss_newton_ray_cuda,通过射线对齐方法(Ray Alignment)来优化相机位姿。其核心思想是最小化观测点与地图点之间的距离误差。

  • Sim3群表示

    平移tR3t\in \mathbb{R}^3,旋转q=[qx,qy,qz,qw]q=[q_x,q_y,q_z,q_w],缩放sR+s\in \mathbb{R}^+,则李代数参数化可表示为:

    ζ=[τ,ω,σ]TR7\zeta=[\tau,\omega,\sigma]^T \in \mathbb{R}^7

    其中τR3\tau \in \mathbb{R}^3表示平移,ωR3\omega \in \mathbb{R}^3表示旋转,σR\sigma \in \mathbb{R}表示尺度对数。

  • 相对位姿计算

    给定两个相机位姿Ti,TjSim(3)T_i,T_j \in \mathrm{Sim}(3),其相对位姿TijT_{ij}可通过李代数指数映射计算:

    Tij=TjTi1sij=si1sjqij=qi1qjtij=si1Ri1(tjti)\begin{aligned} T_{ij} &= T_j \circ T_i^{-1}\\ s_{ij}&=s_i^{-1}\cdot s_j\\ q_{ij}&=q_i^{-1}\otimes q_j\\ t_{ij}&=s_i^{-1}\cdot R_i^{-1} (t_j - t_i) \end{aligned}

残差定义

射线方向残差

将点归一化为单位射线:

ri=XiXi\mathbf{r_i}=\frac{X_i}{\|X_i\|}

XjX_j变换到相机ii坐标系下:

Xj,Ci=sijRijXj+tijX_{j,C_i}=s_{ij} R_{ij} X_j+t_{ij}

归一化变换后的点:

rj,Ci=Xj,CiXj,Ci\mathbf{r_{j,C_i}}=\frac{X_{j,C_i}}{\|X_{j,C_i}\|}

射线方向残差定义为:

eray=rirj,Ci\mathbf{e_{ray}}=\mathbf{r_i}-\mathbf{r_{j,C_i}}

距离残差

edist=XiXj,Cie_{dist}=\|\mathbf{X_i}-\mathbf{X_{j,C_i}}\|

雅可比矩阵计算

目标:Ji=eζi,Jj=eζjJ_i=\frac{\partial e}{\partial \zeta_i}, J_j=\frac{\partial e}{\partial \zeta_j}

链式法则分解:

eζj=erj,Cirj,CiXj,CiXj,Ciζi,jζi,jζj\frac{\partial e}{\partial \zeta_j} = \frac{\partial e}{\partial \mathbf{r_{j,C_i}}}\cdot \frac{\partial \mathbf{r_{j,C_i}}}{\partial X_{j,C_i}} \cdot \frac{\partial X_{j,C_i}}{\partial \zeta_{i,j}}\cdot \frac{\partial \zeta_{i,j}}{\partial \zeta_j}

归一化雅可比

r=XX=XXx2+Xy2+Xz2\mathbf{r}=\frac{X}{\|X\|}=\frac{X}{\sqrt{X_x^2+X_y^2+X_z^2}}

n=X=XTXn=\|X\|=\sqrt{X^TX}:

nX=XTnrX=X(Xn)=1nIXn2nX=1n(IXXTn2)=1X(IrrT)=1X(IXXTX2)\begin{aligned} \frac{\partial n}{\partial X}&=\frac{X^T}{n}\\ \frac{\partial \mathbf{r}}{\partial X}&=\frac{\partial }{\partial X}(\frac{X}{n})\\ &=\frac{1}{n}I - \frac{X}{n^2}\frac{\partial n}{\partial X}\\ &=\frac{1}{n}(I-\frac{XX^T}{n^2})\\ &=\frac{1}{\|X\|}(I - \mathbf{r}\mathbf{r}^T)\\ &=\frac{1}{\|X\|}(I-\frac{XX^T}{\|X\|^2}) \end{aligned}

rxXx=1XXx2X3rxXy=XxXyX3rxXz=XxXzX3\begin{aligned} \frac{\partial r_x}{\partial X_x}&=\frac{1}{\|X\|}-\frac{X_x^2}{\|X\|^3}\\ \frac{\partial r_x}{\partial X_y}&=-\frac{X_x X_y}{\|X\|^3}\\ \frac{\partial r_x}{\partial X_z}&=-\frac{X_x X_z}{\|X\|^3} \end{aligned}

同理可得ry,rzr_y,r_zXX的偏导数

Sim3变换雅可比

X=sRX+tX'=sRX+t

李代数扰动:

δζ=[δτ,δω,δσ]T\delta \zeta=[\delta \tau,\delta \omega,\delta \sigma]^T

X=exp(δζ)XX+Xζζ=0δζX'=\exp(\delta \boldsymbol{\zeta})\cdot X \approx X+\left.\frac{\partial X'}{\partial \zeta}\right|_{\zeta=0}\delta \zeta

平移:

Xζ=[XτXωXσ]\frac{\partial X'}{\partial \zeta}=\begin{bmatrix} \frac{\partial X'}{\partial \tau} & \frac{\partial X'}{\partial \omega} & \frac{\partial X'}{\partial \sigma} \end{bmatrix}

Xτ=I3×3\frac{\partial X'}{\partial \tau} = I_{3\times 3}

旋转:

X=RXδR=I+[δω]×X=(I+[δω]×)X=X+[δω]×X\begin{aligned} X'&=RX\\ \delta R&=I+[\delta \omega]_\times\\ X'&=(I+[\delta \omega]_\times)X=X+[\delta \omega]_\times X \end{aligned}

Xω=[X]×=[0xzxyxz0xxxyxx0]\frac{\partial X'}{\partial \omega} = -[X']_\times\\ =\begin{bmatrix} 0 & x'_z & -x'_y \\ -x'_z & 0 & x'_x \\ x'_y & -x'_x & 0 \end{bmatrix}

尺度:

X=sRX+tX'=sRX+t

Xs=RX\frac{\partial X'}{\partial s}=RX

s=eσs=e^\sigma,则:

Xσ=Xssσ=sRX=XtX\frac{\partial X'}{\partial \sigma}=\frac{\partial X'}{\partial s}\cdot \frac{\partial s}{\partial \sigma}=sRX=X'-t\approx X'

rσ=σ(XX)=1X(IXXTX2)Xσ=1X(IXXTX2)X=0\begin{aligned} \frac{\partial r}{\partial \sigma}&=\frac{\partial}{\partial \sigma}(\frac{X'}{\|X'\|})=\frac{1}{\|X'\|}(I-\frac{X'X'^T}{\|X'\|^2})\cdot \frac{\partial X'}{\partial \sigma}\\ &=\frac{1}{\|X'\|}(I-\frac{X'X'^T}{\|X'\|^2})X'=0 \end{aligned}

edistσ=Xσ=XXXσ=XTXX=X\begin{aligned} \frac{\partial e_{dist}}{\partial \sigma}&=\frac{\partial \|X'\|}{\partial \sigma}=\frac{\partial \|X'\|}{\partial X'}\cdot \frac{\partial X'}{\partial \sigma}=\frac{X'^T}{\|X'\|}\cdot X'=\|X'\| \end{aligned}

完整的雅可比为:

对于点X=sRX+tX'=sRX+t:

Jlocal=[I3×3[X]×X]J_{local}=\begin{bmatrix} I_{3\times 3} & -[X']_\times & X' \end{bmatrix}

射线方向误差:

Jraylocal=rXJlocalJi,j=k=13riXkXkζj\begin{aligned} J_{ray}^{local}&=\frac{\partial r}{\partial X'}\cdot J_{local}\\ J_{i,j}&=\sum_{k=1}^3 \frac{\partial r_i}{\partial X'_k} \cdot \frac{\partial X'_k}{\partial \zeta_j} \end{aligned}

伴随变换

优化变量是全局位姿ζi,ζj\zeta_i,\zeta_j,但雅可比是在局部坐标系TijT_{ij}下计算的,需要通过伴随变换转换:

Jglobal=AdTijTJlocalJ_{global}=\mathbf{Ad}_{T_{ij}}^{-T}J_{local}

Sim3伴随表示:

Ad=[sR00[t]×sRsR0tTsR01]\mathbf{Ad}=\begin{bmatrix} sR & 0 & 0 \\ [t]_\times sR & sR & 0 \\ t^TsR & 0 & 1 \end{bmatrix}

伴随矩阵的转置:

Jglobal=AdTijTJlocalJ_{global} = \mathbf{Ad}_{T_{ij}}^{-T} J_{local}

伴随逆公式:

Ad1=[s1RT00s1[t]×RTs1RT0s1tTRT01]\mathbf{Ad}^{-1}=\begin{bmatrix} s^{-1}R^T & 0 & 0 \\ -s^{-1}[t]_\times R^T & s^{-1}R^T & 0 \\ -s^{-1}t^TR^T & 0 & 1 \end{bmatrix}

从相机jj到相机ii的雅可比:

Jj=eζj=eXj,CiXj,CiζjAdTijT\begin{aligned} J_j&=\frac{\partial e}{\partial \zeta_j} \\ &=\frac{\partial e}{\partial X_{j,C_i}} \cdot \frac{\partial X_{j,C_i}}{\partial \zeta_j} \cdot \mathbf{Ad}_{T_{ij}}^{-T} \end{aligned}

对相机i的雅可比:

Tij=Ti1TjJi=eζi=eXj,CiXj,CiζijAdTijT=Jj\begin{aligned} T_{ij}&=T_i^{-1} \circ T_j\\ J_i&=\frac{\partial e}{\partial \zeta_i} \\ &=-\frac{\partial e}{\partial X_{j,C_i}} \cdot \frac{\partial X_{j,C_i}}{\partial \zeta_{ij}} \cdot \mathbf{Ad}_{T_{ij}}^{-T} \\ &=-J_j \end{aligned}

Gauss-Newton优化

Hessian矩阵:

对每条边(相机对i,j)的Hessian矩阵为:

Hii=kJikTWkJikHij=kJikTWkJjkHjj=kJjkTWkJjk\begin{aligned} H_{ii}&=\sum_k J_i^{kT}W_kJ_i^k\\ H_{ij}&=\sum_k J_i^{kT}W_kJ_j^k\\ H_{jj}&=\sum_k J_j^{kT}W_kJ_j^k \end{aligned}

梯度:

gi=kJikTWkekgj=kJjkTWkek\begin{aligned} g_i&=\sum_k J_i^{kT}W_k e_k\\ g_j&=\sum_k J_j^{kT}W_k e_k \end{aligned}

得到:

HΔζ=gH\cdot \Delta \zeta = -g

我是学生,给我钱

其他文章
DROID-SLAM
  • 25/11/26
  • 10:33
  • 2.1k
  • 12
目录导航 置顶
  1. 1. 简介
  2. 2. 位姿优化
  3. 3. 残差定义
    1. 3.1. 射线方向残差
    2. 3.2. 距离残差
  4. 4. 雅可比矩阵计算
    1. 4.1. 归一化雅可比
    2. 4.2. Sim3变换雅可比
    3. 4.3. 伴随变换
  5. 5. Gauss-Newton优化
请输入关键词进行搜索