Paper Survey之——Deep IMU-Bias Inference

2025-02-02

引言

对于IMU-based odometry,或者说所有包含IMU的framework,如LIO或VIO,IMU的bias建模是重中之重。 特别是VIO,标定及sensor modeling是影响系统性能最关键的部分。一般传统的方法都是把IMU的bias建模为additive Gaussian noise + random walk. 得益于深度学习强大的性能,基于learning的IMU bias建模也将具备很大的发展潜力。

之前博客已经较为系统的介绍了基于learning的VO以及VIO工作。 但是对于使用learning的方法来handle IMU bias仍然没有调研。 为此,写下本博客,作为本人学习相关工作的学习笔记。 本博客仅供本人学习记录用~

Deep IMU Bias Inference for Robust Visual-Inertial Odometry with Factor Graphs

低成本、小型化的微机电系统(MEMS)惯性测量单元(IMU)已在机器人学和行人追踪领域得到广泛应用。 然而,单纯依赖IMU的状态估计会受到严重漂移影响。 这种漂移源于IMU积分过程中各类误差的累积,这些误差通常被统一建模为additive Gaussian noise + random walk。 由于漂移的累积,仅通过IMU测量积分进行状态估计的有效时间窗口通常不超过数秒。

该工作实现以及对比了 LSTMs 和 Transformers两个模型对IMU bias的推断性能。 网络不是学习运动模型,而是显式地学习IMU bias,这样也可以使得模型可以泛化到训练中没见过的运行模式。 下图展示了,如果模型只是学习运动的模型,当泛化到不同的环境(比如从行人手持到四足机器人,或者平地走训练的模型用到上下楼梯的场景)就会导致发散。

论文的主要贡献点如下:

  1. 设计一个神经网络可以从历史的IMU测量及bias中推断出IMU的bias
  2. 对比了LSTMs 和 Transformers两个模型,并且将他们融入VIO的因子图中

论文的基于NN估算IMU-bias的VIO图优化的framework如下:

而所谓的可以从历史的IMU测量及bias中推断出IMU的bias的神经网络则是如下表示:

此外设计了IMU-bias的因子如下:

注意,此处的方差给定的是常数,当然也可以通过网络来估算uncertainty

至于network的结构,论文中设计了两个结构并且进行了对比

基于LSTM以及Transformer的IMU-bias Interference结构

作者测试了多种场景,包括手持、四足、飞机。 但可惜的是既没有开源代码,似乎也没有说baseline VIO指的是哪个具体算法

手持实验(Newer College Multi-Camera Dataset(NCD-Multi))
在四足上的测试效果(网络都是用手持的数据进行训练的,也没有进行fine-tuning)
Euroc飞行数据集(平移和旋转误差)

IMU Data Processing For Inertial Aided Navigation:A Recurrent Neural Network Based Approach

该工作也是采用DNN计算可观测的IMU预积分,并跟多传感器融合来获取性能的增益。

AirIMU: Learning uncertainty propagation for inertial odometry

理论解读

Inertial odometry(IO)中对于IMU的建模可以分为两种:kinematic motion model-based (也就是传统的使用基于kinematics模型的IMU预积分paper) 和 data-driven method(也就是基于learning的)。 而本文则是提出混合两者的方法,用data-driven methods来估算不确定性(特别是 non-deterministic errors),而model-based methods可以提升系统的泛化能力(就是结合版)。 如下图所示。通过利用data-driven method对非确定性噪声和运动模型进行建模,以确保在新环境中的泛化能力。 为了使AirIMU能够学习不确定性和噪声模型,构建了一个可微IMU积分器(differentiable IMU integrator)和一个可微分协方差传播器(differentiable covariance propagator)。 可以预测长时间IMU预积分的累积协方差。 此外,通过将不确定性模块(uncertainty module)与噪声校正模块( noise correction module)联合训练,可以捕获更好的IMU特征,并使两项任务都受益。

airiMU学习的是IMU预积分,并且loss也是用预积分来监督的(这可能容易导致学习了具体某个imu而影响泛化能力)

论文的贡献点如下:

  1. the first to train a deep neural network that models IMU sensor uncertainty through differentiable covariance propagation。也就是网络可以预测IMU的不确定性(协方差)
  2. kinematic motion model-based 和 data-driven method混合imu-建模;
  3. 将不确定性模块(uncertainty module)与噪声校正模块( noise correction module)联合训练

Data-driven module

如上面图(Fig. 4)中所示。采用encoder-decoder网络结构处理原始的IMU数据(加速度和角速度)。 网络输出加速度和角速度的校正,此外,也输出对应的uncertainty。

对于encoder network首先采用 1D CNN network来学习lower-level features,然后通过一个 gated recurrent unit (GRU)来学习时间维度的关联。 两个task都(correction和uncertainty)采用相同的encoder网络(shared encoder network)来处理原始的IMU。

对于decoder network,如下:

最终的网络输出的IMU观测量可以表达如下:

Differentiable Integration and Covariance Module

基于获得的网络输出的IMU数据,再采用IMU kinematic model(也就是IMU预积分)来估算系统的状态:

积分传播模型与协方差传播模型

并基于预积分的结果来supervise data-driven module而不是对上面的IMU原始输出做监督,也就是Differentiable Integration and Covariance Module(其实跟DPVO和Droid-SLAM中的Differentiable BA的概念是很像的~)

Loss Function and Training strategy

论文定义了noise correction的state loss以及covariance loss如下

state loss for noise correction VS. covariance loss

最终联合优化的loss如下

ε = 1×10−3

IMU-GPS PGO system

虽然采用了强大的learning来估算IMU的模型,但仍然需要外部校正来避免累积误差,而作者采用的是GPS+IMU~ 最终refined的状态及协方差则跟GPS一起通过pose graph optimization来进行融合。如下图所示

代码复现

论文的实验是非常惊艳的,比如下面的,展示了在直升机上估算的轨迹明显比原始IMU预积分的要更接近ground truth

接下来通过代码复现来看看真实的效果如何~

  • AirIMU_comment
  • 其中的环境依赖是基于pypose
  • pypose: a robotics-oriented, PyTorch-based library that combines deep perceptual models with physics-based optimization techniques.
  • 运行pip install pypose后可以看到conda环境自动安装了系列依赖

安装配置

  1. 安装pypose
    • pypose is a PyTorch-based library that combines deep perceptual models with physics-based optimization techniques.
conda create -n airIMU python=3.10.11
conda activate airIMU
pip install pypose

# 安装系列依赖
pip install "numpy<2"
pip install tqdm
pip install pyproj
pip install scipy
pip install matplotlib
pip install pyhocon
pip install pykitti
pip install opencv-python==4.7.0.72

实验验证

  1. 下载预训练模型(For EuRoC)并放置于experiments/EuRoC/codenet/ckpt/
wget https://github.com/sleepycan/AirIMU/releases/download/pretrained_model_euroc/EuRoCWholeaug.zip
  1. 下载数据集EurocNote: Remember to reset the data_root in configs/datasets/${DATASET}/${DATASET}.conf.

  2. generate network inference file net_output.pickle(这应该是网络估算出来的IMU结果)

python inference.py --config configs/exp/EuRoC/codenet.conf --load  EuRoCWholeaug/ckpt/best_model.ckpt

网络的输出(应该也就是每个序列的网络估算的IMU以及协方差)保存出来

  1. 基于网络输出的结果来验证系统的系统
python evaluation/evaluate_state.py --dataconf configs/datasets/BaselineEuroc/Euroc_1000.conf --exp experiments/EuRoC/codenet/
  1. 结果如下: 从实验效果来看还是比较惊艳的,但是作者在原文也提到这篇工作的limitation, AirIMU model trained on a single IMU does not readily generalize to a different IMU with different specifications and operating frequencies 换言之就是泛化能力是有限的,需要在特定数据集下训练才可~
    • MH_02_easy
  • MH_03_medium
  • MH_04_difficult
  • MH_01_easy
  • MH_05_difficult
  • V1_03_difficult
  • V1_01_easy
  • V1_02_medium
  • V1_03_difficult
  • V2_01_easy
  • V2_02_medium