imu噪声的建模理解

  • 前言
  • 一、IMU噪声模型简述
  • 二、两篇文档中关于imu噪声模型的描述
  • 三、Allan standard deviation (AD)读取imu内参


前言

参考An introduction to inertial navigation 加深对 kalibr中的imu noise model的理解。


一、IMU噪声模型简述

imu的噪声模型可由下式表示:

深度学习噪声模型_标准差

m表示的是imu的测量值measurements,下标m_t表示真值。n是Gaussian white noise,表示的是读数的一个高斯噪声。bias是零偏,由一个fixed bias error(用 ϵ表示)和高斯噪声n_b(均值为零)组成(在vins-mono中这个fixed error是在初始化过程中估计的),也就是说零偏会随着时间发生变化。

我们需要标定的imu参数指的就是两个高斯噪声的标准差σ_n和σ_b(注意有离散和连续两种形式,离散形式的单位和测量值的单位是一样的,连续形式的单位kalibr的表里可以看,他们之间可以相互转换,转换方法在下文)。

二、两篇文档中关于imu噪声模型的描述

1. kalibr中的imu noise model

嗯嗯

深度学习噪声模型_标准差_02

文档中分别用Additive “White Noise” 和 Bias描述高斯白噪声n和 bias的噪声 的标准差,即下表中的σ,两者的单位(关于单位的问题可以参考这个链接):

深度学习噪声模型_标准差_03

这个表格中的变量都是continuous-time的,离散形式可以通过下面公式转换:

深度学习噪声模型_标准差_04

深度学习噪声模型_人工智能_05


2.An introduction to inertial navigation

这篇文章被很多imu的标定文章引用过,所以应该具有一定的权威性和实用性。

在这篇report中引入了两种噪声 (以陀螺仪为例)Thermo-Mechanical White Noise / Angle Random Walk 和 Flicker Noise / Bias Stability 分别对应kalibr文档中的Additive “White Noise” 和 Bias的离散形式(这个有名字点迷惑性,angle random walk其实对应的是kalibr中的gyro_noise_density)。

1)看名字的话很容易理解,Thermo-Mechanical White Noise / Angle Random Walk对应的噪声是由热力学原理引起的波动造成的,可以看下原文:

深度学习噪声模型_深度学习噪声模型_06

  • white noise density和这里的angle random walk是一个东西,后者一般在imu的datasheet的比较常见(或者叫Noise Spectral Density/velocity random walk),单位是°/sqrt(s)或者是°/s/sqrt(HZ)。

2)Flicker Noise / Bias Stability介绍说是由电信号的一些扰动造成的,但是在kalibr的文档关于Bias的介绍中解释零偏的随机游走是由Brownian motion造成的,关于这两种解释那种是对的,或者说两种解释都行得通,我不是很清楚,欢迎评论解惑。

  • 这里说的Bias Stability在产品的datasheet中比较常见(或者叫in-run bias stability,bias instability),单位是°/s。从单位上也可以看出来,BS(bias stability)其实和kalibr中的xxx_random_walk(rad/s^2/sqrt(HZ))是可以互相转换的,其实从单位是看BS就是σ_bd(σ_b的离散形式),我不清楚他们两者是否对等,只是从单位的角度分析(本文暂且认为BS就是random walk的离散形式,希望懂的朋友再评论区能指出)。

三、Allan standard deviation (AD)读取imu内参

深度学习噪声模型_深度学习噪声模型_07

读取方法在An introduction to inertial navigation有介绍,原文在下面:

深度学习噪声模型_自动驾驶_08

其实上文中读取的是Bias instability(σ_bd,即随机游走的离散形式)和angle random walk(σ_n in Kalibr),但是我们需要是一般是σ_b(连续状态量,也叫random walk in Kalibr),这个变量在AD图中其实也能直接读出来:

深度学习噪声模型_标准差_09

深度学习噪声模型_算法_10

关于random walk的读取简而言之就是用斜率0.5的直线相切(图中蓝线),然后再t=3s处读取的数值就是σ_b