基于滤波 vs 基于优化

在紧耦合VIO内部有两种估计范式。它们求解的是同一个概率推断问题;区别在于它们愿意重新线性化该问题的频率。

基于滤波(EKF)

基于滤波的方法(MSCKF、ROVIO、OpenVINS)维护一个状态向量 x\mathbf{x} 和协方差 P\mathbf{P},并递归更新:

每个测量在被处理的那一刻被线性化一次。这带来了常数时间、低延迟的更新——但线性化点是永久性的:如果估计值之后发生变化,已经被吸收的信息无法重新线性化,累积的线性化误差会导致漂移,若不加处理还会导致不一致。MSCKF的洞见是让EKF具有窗口形状——在状态中保留一组滑动的历史相机位姿,并以无结构的方式施加特征约束——因此即便是”滤波式”VIO,其内部实际上也隐含着窗口化。

基于优化(滑动窗口BA)

基于优化的方法(OKVIS、VINS-Mono、Basalt、ORB-SLAM3)保持一个近期关键帧状态的滑动窗口,并用高斯-牛顿或Levenberg-Marquardt法最小化一个联合非线性代价——重投影残差、预积分IMU残差以及一个边缘化先验:

minX  rp2+rIMUΣ12+ρ(rreprojR12)\min_{\mathcal{X}} \; \|\mathbf{r}_p\|^2 + \sum \|\mathbf{r}_{\text{IMU}}\|^2_{\Sigma^{-1}} + \sum \rho\left(\|\mathbf{r}_{\text{reproj}}\|^2_{R^{-1}}\right)

由于每次求解器迭代都会在当前估计处重新线性化窗口内的所有残差,线性化误差要小得多,精度也相应更高——但计算代价更高。旧状态通过Schur补边缘化压缩进先验 rp\mathbf{r}_p 中,这正是两种范式相遇之处(见下文)。

对比

滤波(EKF)滑动窗口优化
线性化每次测量一次每次迭代都重新线性化
成本低,常数时间更高,随窗口大小增长
精度良好更好(通常)
延迟极低(每次测量一次更新)更高(每帧需迭代求解)
一致性工具首次估计雅可比(FEJ)、可观测性约束边缘化先验上的FEJ;非线性因子恢复(Basalt);延迟边缘化(DM-VIO)
代表性系统MSCKF、ROVIO、OpenVINSOKVIS、VINS-Mono、Basalt、ORB-SLAM3

这两个家族比看起来更接近

因此实际的区别不在于”递归 vs 批处理”,而在于每种设计将计算预算花在哪里:滤波器几乎不在重新线性化上花费,而将全部预算投入吞吐量;优化器则通过重新线性化一个小而精心选择的窗口来换取精度。

实践中的选择

常见陷阱

对SLAM的意义

这是针对视觉SLAM研究过的经典”为什么滤波?”问题(Strasdat等人)的VIO版本:在固定的计算预算下,重新线性化一个小的关键帧窗口胜过滤波一个大状态。了解每一方的失效模式——滤波器不一致性 vs 优化器延迟——能告诉你针对特定平台该选哪个系统,以及为修补这些失效模式而存在的是哪些论文(FEJ、非线性因子恢复、延迟边缘化)。

相关条目