SALM文献之-VINS-Fusion: An optimization-based multi-sensor state estimator


VINS-Fusion算法原理详解

VINS-Fusion 是香港科技大学团队开发的基于优化多传感器融合框架,支持视觉(单目/双目)、IMU、GPS、激光雷达等多种传感器的实时状态估计与建图。其核心是在 VINS-Mono 基础上扩展多传感器紧耦合,通过滑动窗口非线性优化实现高精度、低漂移的定位。以下是其核心原理及公式推导的详细解析:


1. 系统架构与流程

VINS-Fusion 的流程分为 前端处理滑动窗口优化全局融合 三部分:

  1. 前端处理

    • 图像特征跟踪:提取Harris角点或FAST特征,使用KLT光流跟踪相邻帧特征。
    • IMU预积分:在滑动窗口内对IMU数据进行预积分,得到帧间相对运动。
    • 外参标定:在线估计相机与IMU之间的时空参数( ( T b c ) (T_{bc}) (Tbc),包括旋转、平移和时间偏移。
  2. 滑动窗口优化

    • 维护一个固定大小的滑动窗口(通常10~20帧),将窗口内的 视觉重投影误差IMU预积分误差其他传感器(如GPS)约束 联合优化。
  3. 全局融合

    • 利用GPS或回环检测的全局观测,对局部滑动窗口的结果进行位姿图优化,抑制累积误差。

2. 状态向量与参数化

滑动窗口内的状态向量包括 位姿速度IMU偏差外参
[ X = [ x 0 , x 1 , … , x n , T b c , λ 0 , λ 1 , … , λ m ] ] [ \mathcal{X} = \left[ \mathbf{x}_0, \mathbf{x}_1, \dots, \mathbf{x}_n, \mathbf{T}_{bc}, \lambda_0, \lambda_1, \dots, \lambda_m \right] ] [X=[x0,x1,,xn,Tbc,λ0,λ1,,λm]]
其中:

  • ( x k = [ p k , v k , q k , b a k , b g k ] ) (\mathbf{x}_k = [\mathbf{p}_k, \mathbf{v}_k, \mathbf{q}_k, \mathbf{b}_a^k, \mathbf{b}_g^k]) (xk=[pk,vk,qk,bak,bgk]) 表示第 ( k ) (k) (k) 帧的IMU状态(位置、速度、姿态、加速度计/陀螺仪偏差)。
  • ( T b c ) (\mathbf{T}_{bc}) (Tbc) 为IMU到相机的变换矩阵。
  • ( λ i ) (\lambda_i) (λi) 为第 ( i ) (i) (i) 个特征点的逆深度(单目情况下)。

3. IMU预积分与误差模型

IMU动力学模型

IMU的角速度 ( ω t ) (\boldsymbol{\omega}_t) (ωt) 和加速度 ( a t ) (\mathbf{a}_t) (at) 的测量模型为:
[ ω t = ω t true + b g + n g , a t = a t true + b a + n a + R w b T g , ] [ \begin{aligned} \boldsymbol{\omega}_t &= \boldsymbol{\omega}_t^{\text{true}} + \mathbf{b}_g + \mathbf{n}_g, \\ \mathbf{a}_t &= \mathbf{a}_t^{\text{true}} + \mathbf{b}_a + \mathbf{n}_a + \mathbf{R}_{wb}^T \mathbf{g}, \end{aligned} ] [ωtat=ωttrue+bg+ng,=attrue+ba+na+RwbTg,]
其中 ( n g , n a ) (\mathbf{n}_g, \mathbf{n}_a) (ng,na) 为高斯白噪声, ( g ) (\mathbf{g}) (g) 为重力向量。

预积分量计算

在时间区间 ( [ t k , t k + 1 ] ) ([t_k, t_{k+1}]) ([tk,tk+1]) 内,IMU预积分得到相对旋转 ( Δ R ) (\Delta \mathbf{R}) (ΔR)、速度变化 ( Δ v ) (\Delta \mathbf{v}) (Δv) 和位置变化 ( Δ p ) (\Delta \mathbf{p}) (Δp)
[ Δ R = ∏ k = 1 N exp ⁡ ( ( ω k − b g ) Δ t ) , Δ v = ∑ k = 1 N Δ R k ( a k − b a ) Δ t , Δ p = ∑ k = 1 N ( Δ v k Δ t + 1 2 Δ R k ( a k − b a ) ( Δ t ) 2 ) . ] [ \begin{aligned} \Delta \mathbf{R} &= \prod_{k=1}^{N} \exp\left( (\boldsymbol{\omega}_k - \mathbf{b}_g) \Delta t \right), \\ \Delta \mathbf{v} &= \sum_{k=1}^{N} \Delta \mathbf{R}_k (\mathbf{a}_k - \mathbf{b}_a) \Delta t, \\ \Delta \mathbf{p} &= \sum_{k=1}^{N} \left( \Delta \mathbf{v}_k \Delta t + \frac{1}{2} \Delta \mathbf{R}_k (\mathbf{a}_k - \mathbf{b}_a) (\Delta t)^2 \right). \end{aligned} ] [ΔRΔvΔp=k=1Nexp((ωkbg)Δt),=k=1NΔRk(akba)Δt,=k=1N(ΔvkΔt+21ΔRk(akba)(Δt)2).]
预积分量仅与IMU偏差相关,与全局状态解耦,避免重复积分。

预积分误差模型

预积分的残差定义为预测值与实际状态变化的差异:
[ r Δ R = log ⁡ ( Δ R T R k T R k + 1 ) , r Δ v = R k T ( v k + 1 − v k − g Δ t ) − Δ v , r Δ p = R k T ( p k + 1 − p k − v k Δ t − 1 2 g Δ t 2 ) − Δ p . ] [ \begin{aligned} \mathbf{r}_{\Delta R} &= \log\left( \Delta \mathbf{R}^T \mathbf{R}_k^T \mathbf{R}_{k+1} \right), \\ \mathbf{r}_{\Delta v} &= \mathbf{R}_k^T (\mathbf{v}_{k+1} - \mathbf{v}_k - \mathbf{g} \Delta t) - \Delta \mathbf{v}, \\ \mathbf{r}_{\Delta p} &= \mathbf{R}_k^T (\mathbf{p}_{k+1} - \mathbf{p}_k - \mathbf{v}_k \Delta t - \frac{1}{2} \mathbf{g} \Delta t^2) - \Delta \mathbf{p}. \end{aligned} ] [rΔRrΔvrΔp=log(ΔRTRkTRk+1),=RkT(vk+1vkgΔt)Δv,=RkT(pk+1pkvkΔt21gΔt2)Δp.]


4. 视觉重投影误差

特征点参数化

对于单目相机,特征点使用逆深度参数化: ( λ = 1 / z ) (\lambda = 1/z) (λ=1/z),其观测模型为:
[ z i j = π ( R b c T ( R w b j T ( R w b i ( p b c + 1 λ i f i c ) + p w b i − p w b j ) − p b c ) ) + n z , ] [ \mathbf{z}_i^j = \pi\left( \mathbf{R}_{bc}^T \left( \mathbf{R}_{wb_j}^T \left( \mathbf{R}_{wb_i} (\mathbf{p}_{bc} + \frac{1}{\lambda_i} \mathbf{f}_i^c) + \mathbf{p}_{wb_i} - \mathbf{p}_{wb_j} \right) - \mathbf{p}_{bc} \right) \right) + \mathbf{n}_z, ] [zij=π(RbcT(RwbjT(Rwbi(pbc+λi1fic)+pwbipwbj)pbc))+nz,]
其中 ( π ( ⋅ ) ) (\pi(\cdot)) (π()) 为相机投影函数, ( f i c ) (\mathbf{f}_i^c) (fic) 为归一化相机坐标系下的特征点坐标。

重投影残差

定义第 ( i ) (i) (i) 个特征点在第 ( j ) (j) (j) 帧的重投影误差:
[ r vis j = z i j − z ^ i j , ] [ \mathbf{r}_{\text{vis}}^j = \mathbf{z}_i^j - \hat{\mathbf{z}}_i^j, ] [rvisj=zijz^ij,]
其中 ( z ^ i j ) (\hat{\mathbf{z}}_i^j) (z^ij) 为预测的像素坐标。


5. 多传感器融合

GPS观测模型

GPS提供全局位置测量 ( p GPS ) (\mathbf{p}_{\text{GPS}}) (pGPS),其残差为:
[ r GPS = p world − p GPS , ] [ \mathbf{r}_{\text{GPS}} = \mathbf{p}_{\text{world}} - \mathbf{p}_{\text{GPS}}, ] [rGPS=pworldpGPS,]
其中 ( p world ) (\mathbf{p}_{\text{world}}) (pworld) 为当前估计的全局位置。

激光雷达融合(可选)

若加入激光雷达,通过ICP或NDT匹配点云,构建点到面或点到线的残差,类似LOAM方法。


6. 滑动窗口非线性优化

目标函数联合最小化所有残差的马氏距离:
[ min ⁡ X ( ∑ ∥ r vis ∥ Σ vis 2 + ∑ ∥ r IMU ∥ Σ IMU 2 + ∑ ∥ r GPS ∥ Σ GPS 2 ) , ] [ \min_{\mathcal{X}} \left( \sum \| \mathbf{r}_{\text{vis}} \|_{\Sigma_{\text{vis}}}^2 + \sum \| \mathbf{r}_{\text{IMU}} \|_{\Sigma_{\text{IMU}}}^2 + \sum \| \mathbf{r}_{\text{GPS}} \|_{\Sigma_{\text{GPS}}}^2 \right), ] [Xmin(rvisΣvis2+rIMUΣIMU2+rGPSΣGPS2),]
其中 ( Σ ) (\Sigma) (Σ) 为各传感器的协方差矩阵。使用 Ceres Solverg2o 进行Levenberg-Marquardt优化。


7. 全局优化与回环检测

回环检测

采用DBoW2或NetVLAD进行视觉词袋匹配,检测到回环后,添加位姿约束:
[ r loop = log ⁡ ( T i j − 1 T i T j − 1 ) , ] [ \mathbf{r}_{\text{loop}} = \log\left( \mathbf{T}_{ij}^{-1} \mathbf{T}_{i} \mathbf{T}_{j}^{-1} \right), ] [rloop=log(Tij1TiTj1),]
其中 ( T i j ) (\mathbf{T}_{ij}) (Tij) 为通过PnP计算的相对位姿。

位姿图优化

将滑动窗口内的局部轨迹与GPS/回环的全局约束结合,构建位姿图并优化:
[ min ⁡ T 1 , … , T n ( ∑ ∥ r odom ∥ 2 + ∑ ∥ r global ∥ 2 ) . ] [ \min_{\mathbf{T}_1, \dots, \mathbf{T}_n} \left( \sum \| \mathbf{r}_{\text{odom}} \|^2 + \sum \| \mathbf{r}_{\text{global}} \|^2 \right). ] [T1,,Tnmin(rodom2+rglobal2).]


8. 关键技术与创新点

  1. 紧耦合多传感器融合:IMU、视觉、GPS在优化层直接融合,而非松耦合的滤波架构。
  2. 自适应滑动窗口:动态管理窗口大小,平衡计算量与精度。
  3. 鲁棒的初始化:通过SfM和IMU对齐估计初始尺度、重力方向及IMU偏差。
  4. 时间偏移标定:在线估计传感器间的时间延迟,提升异步数据融合精度。

9. 数学工具与理论

  • 李群与李代数:姿态 ( q ) (\mathbf{q}) (q) ( SO(3) ) (\text{SO(3)}) (SO(3)) 流形上优化,使用 ( s o ( 3 ) ) (\mathfrak{so}(3)) (so(3)) 扰动模型计算雅可比。
  • 协方差传播:IMU预积分的噪声通过一阶泰勒展开传递。
  • 边缘化(Marginalization):将滑出窗口的状态边缘化为先验信息,保留其约束。

10. 性能与应用场景

  • 精度:室内环境下轨迹误差小于1%,室外结合GPS可达厘米级。
  • 实时性:在i7 CPU上单线程运行频率超过20Hz。
  • 适用场景:无人机、自动驾驶、AR/VR等需要鲁棒定位的场景。

总结

VINS-Fusion通过紧耦合多传感器优化,有效结合了视觉的高精度相对测量与IMU/GPS的绝对稳定性,其核心在于滑动窗口内的联合非线性优化与全局约束的引入。算法涵盖IMU预积分、视觉重投影误差、传感器融合及位姿图优化,是当前开源社区中性能领先的多模态SLAM解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

点云SLAM

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

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

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

打赏作者

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

抵扣说明:

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

余额充值