目录

  • IMU测量模型
  • IMU运动模型
    • 旋转量求导
    • 科氏加速度
  • IMU 误差模型
    • 确定性误差
      • 确定性误差误差标定
        • 六面法标定加速度
        • 六面法标定陀螺仪
        • 温度相关的参数标定
    • 随机误差
      • 高斯白噪声与随机游走
        • 高斯白噪声
        • Bias 随机游走
      • 随机误差的标定
        • 艾伦方差标定
    • IMU 数学模型

IMU测量模型

  • MEMS 加速度计工作原理
    测量原理可以用一个简单的质量块 + 弹簧 + 指示计来表示
    加速度计测量值 a m a_m am​为弹簧拉力对应的加速度
    a m = f m = a − g a_m=\frac{f}{m}=a-g am​=mf​=a−g
    其中m为质量块质量,a为物体在世界(惯性)坐标系下的实际加速度。

  • 陀螺仪测量原理
    陀螺仪的测量值即为IMU在body坐标系下的旋转角速度,要通过运动学模型转换到惯性坐标系下 ,按测量原理分有振动陀螺,光纤陀螺等。

    低端 MEMS 陀螺上一般采用振动陀螺原理,通过测量 Coriolisforce 来间接得到角速度。

    在旋转坐标系中,运动的物体受到科氏力作用
    MEMS 陀螺仪:一个主动运动轴 + 一个敏感轴

IMU运动模型

旋转量求导

首先,如下图所示,考虑一个从原点出发的向量 r 绕单位轴 u 旋转,角速度大小为 θ˙。

角速度矢量可以表示为 ω = θ ˙ u {\boldsymbol \omega}=\dot{\theta}\bf u ω=θ˙u,易得向量 r 末端点 P 的速度矢量,即 r的时间一阶导为
d r d t = ω × r \frac{d{\bf r}}{dt} = {\boldsymbol \omega} \times {\bf r} dtdr​=ω×r
坐标系 {B} 绕单位轴 u 旋转,如上所述,其三个轴的时间一阶导同样为
d i B d t = ω × i B , d j B d t = ω × j B , d k B d t = ω × k B \frac{d{\bf i}_B}{dt} = {\boldsymbol \omega} \times {\bf i}_B, \frac{d{\bf j}_B}{dt} = {\boldsymbol \omega} \times {\bf j}_B, \frac{d{\bf k}_B}{dt} = {\boldsymbol \omega} \times {\bf k}_B dtdiB​​=ω×iB​,dtdjB​​=ω×jB​,dtdkB​​=ω×kB​
[ i B j B k B ] [ {\bf i}_B \quad {\bf j}_B \quad {\bf k}_B ] [iB​jB​kB​] 实际上就是坐标系 {B} 相对于参考坐标系的旋转矩阵 R,R的时间一阶导为
R ˙ = [ ω × i B ω × j B ω × k B ] = ω × R \dot{\bf R} = [ {\boldsymbol \omega} \times {\bf i}_B \quad {\boldsymbol \omega} \times {\bf j}_B \quad {\boldsymbol \omega} \times {\bf k}_B ] = {\boldsymbol \omega} \times {\bf R} R˙=[ω×iB​ω×jB​ω×kB​]=ω×R
叉乘运算可以转化为负对称矩阵的乘法:
R ˙ = ω ∧ R \dot{\bf R} = {\boldsymbol \omega}^{\land} {\bf R} R˙=ω∧R
其中负对称矩阵 ω ∧ {\boldsymbol \omega}^{\land} ω∧为
ω ∧ = [ 0 − ω 3 ω 2 ω 3 0 − ω 1 − ω 2 ω 1 0 ] % <![CDATA[ \quad {\boldsymbol \omega}^{\land}= \begin{bmatrix}0 & -\omega_3 & \omega_2\\ \omega_3 & 0 & -\omega_1 \\ -\omega_2 & \omega_1 & 0\end{bmatrix} %]]> ω∧= ​0ω3​−ω2​​−ω3​0ω1​​ω2​−ω1​0​ ​
这里的角速度 ω 是在参考坐标系下表达的,角速度也经常表达在体坐标系 {B} 下,记为 B ω = R T ω {}^B{\boldsymbol \omega} = {\bf R}^T{\boldsymbol \omega} Bω=RTω,即 ω = R B ω {\boldsymbol \omega} = {\bf R}{}^B{\boldsymbol \omega} ω=RBω
上式也可以写作:
R ˙ = w ∧ R = ( R B w ) ∧ R = R ∧ w R T R = R ( B w ) ∧ \dot{\bf R} =w^{\land}R=(R^Bw)^{\land}R=R{}^{\land}wR^TR= R({}^Bw)^{\land} R˙=w∧R=(RBw)∧R=R∧wRTR=R(Bw)∧

证:对任意旋转矩阵 R 和三维向量 v,都有 ( R v ) ∧ = R v ∧ R T ({\bf R v})^{\land} = {\bf Rv^{\land}R}^T (Rv)∧=Rv∧RT

最后一式利用向量叉乘的旋转变换不变性可证,即,对于任意 v , u ∈ R 3 {\bf v,u}\in \mathbb{R}^3 v,u∈R3永远有
( R v ) × ( R u ) = R ( v × u ) ({\bf Rv})\times({\bf Ru})={\bf R(v\times u)} (Rv)×(Ru)=R(v×u)
从三维几何的角度来理解:v,u 是任意两个三维向量,(v×u) 是一个和 v,u 都垂直、大小为 |v||u|sin(u,v) 的三维向量;将 v,u,v×u 三个向量都经过同一个旋转,它们的相对位姿和模长都不会改变,所以 (Rv) 和 (Ru) 的叉乘仍是 R(v×u)。

科氏加速度

这次把绕惯性系 {A} 中固定单位轴 u 旋转的 {B} 作为参考坐标系。考虑下图, 点 P 相对于 {B} 运动,记 B r {}^Br Br 分别为 P 在 {B} 下的坐标,r 为 P 的绝对坐标(即 {A} 下坐标), R 仍为 {B} 相对于 {A} 的旋转矩阵,易知 r = R B r r=R{}^Br r=RBr。

r = R B r r=R{}^Br r=RBr求一阶时间导
v = r ˙ = R ˙ B r + R B r ˙ = ω ∧ R B r + R B r ˙ {\bf v} = \dot{\bf r} = \dot{\bf R} {}^B{\bf r} + {\bf R}^B\dot{\bf r} = {\boldsymbol \omega}^{\land}{\bf R}{}^B{\bf r}+ {\bf R}^B\dot{\bf r} v=r˙=R˙Br+RBr˙=ω∧RBr+RBr˙
记P在 {B}下速度为 B v {}^Bv Bv,于是

v = w ∧ r + R B = w × r + v r v = w^{\land}r+ {R}^B{}= w \times r+ v_r v=w∧r+RB=w×r+vr​

v r {\bf v}_r vr​来表达「相对速度」的概念,准确定义为 P 相对于 {B} 的速度,在惯性系 {A} 下的表达
再对求时间导:


在旋转坐标系下观察,运动的物体(运动方向和旋转轴不为同一个轴时)会受到科氏力的作用。

  • 第一项中 α {\boldsymbol \alpha} α为 {B} 的角加速度,所以第一项的物理意义是 {B} 旋转所造成的 P 的切向加速度
  • 第二项是 {B} 旋转所造成的向心加速度
  • 第三项比较特殊,为 {B} 的旋转运动与 P 相对 {B} 的平移运动耦合产生的加速度,称为科氏加速度
  • 第四项为 P 相对于 {B} 的加速度,但在惯性系{A}下表达,类似于 v r {\bf v}_r vr​

IMU 误差模型

加速度计和陀螺仪的误差可以分为:确定性误差,随机误差。

  • 确定性误差可以事先标定确定,包括: bias, scale …
  • 随机误差通常假设噪声服从高斯分布,包括:高斯白噪声, bias
    随机游走…

确定性误差

  1. Bias ,Scale
    理论上,当没有外部作用时, IMU 传感器的输出应该为 0,但实际数据存在一个偏置 b。
  • 加速度计 bias 对位姿估计的影响:
    v e r r = b a t , p e r r = 1 2 b a t 2 v_err=b_at,p_err=\frac{1}{2}b_at^2 ve​rr=ba​t,pe​rr=21​ba​t2
  • scale 可以看成是实际数值和传感器输出值之间的比值
  1. Nonorthogonality/Misalignment Errors(非正交/错位错误)
  2. 其他确定性误差
    • Run-to-Run Bias/Scale Facto
    • In Run (Stability) Bias/Scale Factor
    • Temperature-Dependent Bias/Scale Factor

确定性误差误差标定

六面法标定加速度

bias 和 scale factor

六面法是指将加速度计的 3 个轴分别朝上或者朝下水平放置一段时间,采集 6 个面的数据完成标定。如果各个轴都是正交的,那很容易得到 bias 和 scale:

其中, l l l为加速度计某个轴的测量值, g为当地的重力加速度

(Nonorthogonality/Misalignment Errors)

多轴 IMU 传感器制作的时候,由于制作工艺的问题,会使得 xyz 轴可能不垂直,如下图所示。

考虑轴间误差的时候,实际加速度和测量值之间的关系为:

水平静止放置 6 面的时候,加速度的理论值为

对应的测量值矩阵 L :

利用最小二乘就能够把12个变量求出来。

六面法标定陀螺仪

  • 六面法标定陀螺仪 bias 和 scale factor
    和加速度计六面法不同的是,陀螺仪的真实值由高精度转台提供,这
    里的 6 面是指各个轴顺时针和逆时针旋转。

    参考:https://blog.csdn.net/CSDN_XCS/article/details/90339761

温度相关的参数标定

  • 目的:这个标定的主要目的是对传感器估计的 bias 和 scale 进行温度补偿,获取不同温度时 bias 和 scale 的值,绘制成曲线。
  • 两种标定方法:

    • soak method: 控制恒温室的温度值,然后读取传感器数值进行标定。
    • ramp method:记录一段时间内线性升温和降温时传感器的数据来进行标定。

随机误差

高斯白噪声与随机游走

高斯白噪声

高斯白噪声的高斯指的是概率分布为正态分布,白噪声指的是其二阶矩不相关,一阶矩为常数。故把瞬时值的概率分布服从高斯分布,功率谱密度服从均匀分布的噪声称为高斯白噪声

IMU 数据连续时间上受到一个均值为 0,方差为 σ 2 σ^2 σ2,各时刻之间相互独立的高斯过程 n(t):
E [ n ( t ) ] = 0 E[n(t)]=0 E[n(t)]=0
E [ n ( t 1 ​ ) n ( t 2 ​ ) ] = σ 2 δ ( t 1 ​ − t 2 ​ ) E[n(t_1​)n(t_2​)]=σ^2δ(t_1​−t_2​) E[n(t1​​)n(t2​​)]=σ2δ(t1​​−t2​​)

自相关函数的数学定义: R ( τ ) = ∫ ∞ − ∞ x ( t ) x ( t − τ ) d t R(τ)=∫^{−∞}_∞ x(t)x(t−τ)dt R(τ)=∫∞−∞​ x(t)x(t−τ)dt

其中 δ ( ) δ() δ() 表示狄拉克函数

白噪声的离散化
实际上, IMU 传感器获取的数据为离散采样,离散和连续高斯白噪声的方差之间存在如下转换关系:

n d [ k ] ≜ n ( t 0 + Δ t ) ≃ 1 Δ t ∫ t 0 t 0 + Δ t n ( τ ) d t n_d[k] \triangleq n(t_0+\Delta t)\simeq\frac{1}{\Delta t}\int_{t_0}^{t_0+\Delta t}n(\tau)dt nd​[k]≜n(t0​+Δt)≃Δt1​∫t0​t0​+Δt​n(τ)dt

E ( n d [ k ] 2 ) = E ( 1 Δ t 2 ∫ t 0 t 0 + Δ t ∫ t 0 t 0 + Δ t n ( τ ) n ( t ) d τ d t ) = E ( σ 2 Δ t 2 ∫ t 0 t 0 + Δ t ∫ t 0 t 0 + Δ t δ ( t − τ ) d τ d t ) = E ( σ 2 Δ t ) \begin{aligned} E(n_d[k]^2) & = E(\frac{1}{\Delta t^2}\int_{t_0}^{t_0+\Delta t}\int_{t_0}^{t_0+\Delta t}n(\tau)n(t)d \tau dt) \\ &= E( \frac{\sigma^2}{\Delta t^2}\int_{t_0}^{t_0+\Delta t}\int_{t_0}^{t_0+\Delta t}\delta(t-\tau)d \tau dt)\\ &= E(\frac{\sigma^2}{\Delta t}) \end{aligned} E(nd​[k]2)​=E(Δt21​∫t0​t0​+Δt​∫t0​t0​+Δt​n(τ)n(t)dτdt)=E(Δt2σ2​∫t0​t0​+Δt​∫t0​t0​+Δt​δ(t−τ)dτdt)=E(Δtσ2​)​

即:
n d [ k ] = σ d w [ k ] nd[k] = σ_dw[k] nd[k]=σd​w[k]
其中: w [ k ] ∼ N ( 0 , 1 ) w[k] ∼ N(0, 1) w[k]∼N(0,1), σ d = σ 1 △ t \sigma_d=\sigma \frac{1}{\sqrt{\bigtriangleup t}} σd​=σ△t ​1​
也就是说高斯白噪声的连续时间到离散时间之间差一个 1 △ t \frac{1}{\sqrt{\bigtriangleup t}} △t ​1​ ,√∆t 是传感器的采样时间。

Bias 随机游走

通常用维纳过程 (wiener process) 来建模 bias 随时间连续变化的过程,离散时间下称之为随机游走
b ˙ ( t ) = n ( t ) = σ b w ( t ) \dot{b}_{(t)}=n(t)=\sigma_bw(t) b˙(t)​=n(t)=σb​w(t)\sigma_b

其中 w 是方差为 1 的白噪声

离散和连续之间的转换:
b d [ k ] ≜ b ( t 0 ) + ∫ t 0 t 0 + Δ t n ( t ) d t b_d[k] \triangleq b(t_0) + \int_{t_0}^{t_0+\Delta t}n(t)dt bd​[k]≜b(t0​)+∫t0​t0​+Δt​n(t)dt E ( ( b d [ k ] − b d [ k − 1 ] ) 2 ) = E ( ∫ t 0 t 0 + Δ t ∫ t 0 t 0 + Δ t n ( t ) n ( τ ) d τ d t ) = E ( σ b 2 ∫ t 0 t 0 + Δ t ∫ t 0 t 0 + Δ t δ ( t − τ ) d τ d t ) = E ( σ b 2 Δ t ) \begin{aligned} E((b_d[k]-b_d[k-1])^2) &=E(\int_{t_0}^{t_0+\Delta t}\int_{t_0}^{t_0+\Delta t}n(t)n(\tau)d \tau dt)\\ &= E({\sigma_{b}^2}\int_{t_0}^{t_0+\Delta t}\int_{t_0}^{t_0+\Delta t}\delta(t-\tau)d \tau dt)\\ &= E(\sigma_{b}^2\Delta t) \end{aligned} E((bd​[k]−bd​[k−1])2)​=E(∫t0​t0​+Δt​∫t0​t0​+Δt​n(t)n(τ)dτdt)=E(σb2​∫t0​t0​+Δt​∫t0​t0​+Δt​δ(t−τ)dτdt)=E(σb2​Δt)​

即:
b d [ k ] = b d [ k − 1 ] + σ b d w [ k ] b_d[k] = b_d[k − 1] + σ_{bd}w[k] bd​[k]=bd​[k−1]+σbd​w[k]
其中:
w [ k ] ∼ N ( 0 , 1 ) , σ b d = σ b △ t w[k] ∼ N(0, 1),σ_{bd} = σ_b\sqrt{\bigtriangleup t} w[k]∼N(0,1),σbd​=σb​△t ​
bias 随机游走的噪声方差从连续时间到离散之间需要乘以 △ t \sqrt{\bigtriangleup t} △t ​

随机误差的标定

艾伦方差标定

Allan 方差法是 20 世纪 60 年代由美国国家标准局的 David Allan 提出的,它是一种基于时域的分析方法。

具体的流程如下:

  1. 保持传感器绝对静止获取数据
  2. 对数据进行分段,设定时间段的时长,如下图所示
  3. 将传感器数据按照时间段进行平均
  4. 计算方差,绘制艾伦曲线,得到的艾伦曲线如下图所示:
    Allan方差法可用于5种随机误差的标定:

    参考:VIO标定IMU随机误差:Allan方差法
    陀螺 Allan 方差分析

IMU 数学模型

以 ECI 为参考坐标系(由于 ECI 为惯性系,不需要考虑地球自转):
忽略 scale 的影响,只考虑白噪声和 bias 随机游走:
IMU的真实值: w b , a b w^b,a^b wb,ab
IMU的测量值: w ~ , a ~ b \widetilde{w},\widetilde{a}^b w ,a b
IMU机体系即b系,w系表示世界坐标系。

w ~ = w b + b g + n g a ~ b = a b + b a + n a = q b w ( a w + g w ) + b a + n a \begin{aligned} \widetilde{w}&=w^b +b^g+n^g\\ \widetilde{a}^b&=a^b+b^a+n^a\\&=q_{bw}(a^w+g^w)+b^a+n^a \end{aligned} w a b​=wb+bg+ng=ab+ba+na=qbw​(aw+gw)+ba+na​

考虑高斯白噪声项,有:
w b = w ~ − b g − n g a w = q w b ( a ~ b − b a − n a ) − g w \begin{aligned} &w^b=\widetilde{w} -b^g-n^g\\ &a^w=q_{wb}(\widetilde{a}^b-b^a-n^a)-g^w \end{aligned} ​wb=w −bg−ngaw=qwb​(a b−ba−na)−gw​
不考虑高斯白噪声项,有:
w b = w ~ − b g a w = q w b ( a ~ b − b a ) − g w \begin{aligned} &w^b=\widetilde{w} -b^g\\ &a^w=q_{wb}(\widetilde{a}^b-b^a)-g^w \end{aligned} ​wb=w −bgaw=qwb​(a b−ba)−gw​

参考:从零开始的 IMU 状态模型推导

手撕自动驾驶算法——IMU测量模型、运动模型、误差模型相关推荐

  1. 手撕自动驾驶算法——多目标追踪:imm交互式多模型

    文章目录 基本原理 流程图 公式推导 Mixing Prediction Updates Combination 基本原理 状态估计问题依赖于对象运动模型来预测和更新对象状态.然而,在城市情况下,被跟 ...

  2. 手撕自动驾驶算法——无迹卡尔曼滤波(UKF)

    文章目录 1. 简介 2. CTRV运动模型 2.1 CTRV的目标状态量: 2.2 CTRV的状态转移函数: 2.3 CTRV Process Noise 3. Prediction 3.1 Gen ...

  3. 手撕自动驾驶算法——非线性优化

    目录 1.状态估计问题 1.2 最小二乘的引出 2.非线性最小二乘 2.1 一阶和二阶梯度法 2.2 高斯牛顿法 2.3 列文伯格-马夸尔特方法(阻尼牛顿法) 3.实践:Ceres 3.1 Ceres ...

  4. 手撕自动驾驶算法——KLT 光流算法

    1. Optical Flow 2. KLT KLT 算法本质上也基于光流的三个假设,不同于前述直接比较像素点灰度值的作法,KLT 比较像素点周围的窗口像素,来寻找最相似的像素点. 参考:总结:光流– ...

  5. 【回答问题】ChatGPT上线了!给我推荐20个比较流行的自动驾驶算法模型

    给我推荐20个比较流行的自动驾驶算法模型 当前比较流行的自动驾驶模型有: 卷积神经网络(CNN) 长短时记忆网络(LSTM) 自适应调和滤波器(ADF) 自适应估计滤波器(AEF) 线性预测滤波器(L ...

  6. 解析自动驾驶算法四大模块的问题与后续发展

    自动驾驶涉及技术方方面面.一个成熟的自动驾驶系统主要分为软硬两部分,硬件包括但不限于计算单元.传输网口.传感器本身.网络设备,软件包括但不限于进行任务调度的基础软件."灵魂所在"的 ...

  7. 扫地机器人“离家出走”的真实原因找到了:差个自动驾驶算法

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 这家公司,竟然将自动驾驶算法用在了他们的扫地机器人上. 大材小用? 还真没有,虽然道路交通很复杂,但家里也一样. 不仅要在靠近柜脚床脚时减速 ...

  8. 蔚来汽车自动驾驶部门招聘自动驾驶算法研发框架实习生

    来源:AI求职 蔚来 让⻋成为安全.⾃由的移动⽣活空间是我们的愿景:NIO Autonomous Driving 蔚来自动驾驶,从地图定位到感知算法,从底层系统到控制策略,拥有全栈⾃动驾驶技术能⼒:逐 ...

  9. 自动驾驶技术综述1:自动驾驶算法软件架构介绍

    前言: 自动驾驶技术是一个庞大的工程体系,软件架构.功能算法.控制规划.感知识别.建图定位.电气架构.车载控制器.验证体系等等,有太多的角度可以去切入.对于自动驾驶功能与算法开发,自动驾驶功能的分级是 ...

最新文章

  1. python def函数报错详解_Python函数详解
  2. C语言按行和列求平均成绩代码(指针,二维数组)
  3. Java中Lambda表达式与方法引用和构造器引用
  4. java 命令行 编译 jar文件_用命令行编译java并生成可执行的jar包
  5. Centos下载地址
  6. 数据库表名字段名命名规范
  7. 数字逻辑电路课程设计报告
  8. 【SCI文献下载】手把手教你如何免费下载SCI文献
  9. 【Rainmeter】简简单单的 一言 小皮肤
  10. 网盘资源搜索神器,只有你想不到没有你搜不到的,老司机必备!
  11. 日记app怎么上传录制的视频
  12. bps(bits per second)
  13. 微信公众号开发--js关闭浏览器回到公众号对话窗口
  14. python vimdiff_Vimdiff---VIM的比较和合并工具
  15. 自写sort排序函数(支持重载排序规则)
  16. 古有陈天华万字血书抗沙俄,今有本剧蒻万字背包虐dp(01,完全,多重,分组,混合等各种背包详解 + 板子题+ 奇奇怪怪滴变式题)
  17. GitHub每月优秀热门项目推荐:2021年11月
  18. 什么是hql,与sql的区别
  19. 宇视摄像机巡航和自动跟踪哪个优先级高?
  20. Word编辑招聘文档教学

热门文章

  1. 《Team Geek: A Software Developer's Guide to Working Well with Others》读书笔记(三)
  2. 强制“ git push”覆盖远程文件
  3. 绝地求生服务器在线人数,《绝地求生:大逃杀》同时在线人数突破165万 官方就服务器问题向玩家致歉...
  4. 自己立的flag,倒了也要扶起来
  5. 学习JAVA要安装什么软件?
  6. 梅特卡夫定律vs齐普夫定律vs邓巴“150定律”
  7. asp.net857全科门诊的就诊管理系统#毕业设计
  8. 【Vue】Vue2知识点总结
  9. centos6.5(Linux)下搭建SVN服务器
  10. mysql中ddl和ddm_分布式数据库DDM Sidecar模式负载均衡