欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IMU模型与标定

程序员文章站 2022-04-18 12:40:39
...

IMU传感器

旋转运动学

IMU模型与标定

旋转的线速度为:
r˙=(aθ˙sinθ,aθ˙cosθ,0)=[0θ˙0θ˙00000][acosθasinθh]=ω×r(1) \begin{aligned} \dot{\mathbf{r}} &=(-a \dot{\theta} \sin \theta, a \dot{\theta} \cos \theta, 0)^{\top} \\ &=\left[\begin{array}{ccc}{0} & {-\dot{\theta}} & {0} \\ {\dot{\theta}} & {0} & {0} \\ {0} & {0} & {0}\end{array}\right]\left[\begin{array}{c}{a \cos \theta} \\ {a \sin \theta} \\ {h}\end{array}\right] \\ &=\boldsymbol{\omega} \times \mathbf{r} \end{aligned} \tag{1}
取模得到角速度和线速度之间的关系:
r˙=ωrsinϕ=aθ˙(2) |\dot{\mathbf{r}}|=|\boldsymbol{\omega}||\mathbf{r}| \sin \phi=a|\dot{\theta}| \tag{2}
从Body系和Inertial系分别看旋转运动得到的速度关系为:
r˙I=RIBr˙B+R˙IBrB=RIBr˙B+[RIBωb]×r=RIBvb+ω×r(3) \begin{aligned} \dot{\mathbf{r}}_{I} &=\mathbf{R}_{I B} \dot{\mathbf{r}}_{B}+\dot{\mathbf{R}}_{I B} \mathbf{r}_{B} \\ &=\mathbf{R}_{I B} \dot{\mathbf{r}}_{B}+\left[\mathbf{R}_{I B} \boldsymbol{\omega}_{b}\right]_{ \times} \mathbf{r} \\ &=\mathbf{R}_{I B} \mathbf{v}_{b}+\boldsymbol{\omega} \times \mathbf{r} \end{aligned} \tag{3}

vIRIBvb+ω×rRIBvbvIω×r(4) \mathbf{v}_{I} \equiv \mathbf{R}_{I B} \mathbf{v}_{b}+\omega \times \mathbf{r} \Leftrightarrow \mathbf{R}_{I B} \mathbf{v}_{b} \equiv \mathbf{v}_{I}-\boldsymbol{\omega} \times \mathbf{r} \tag{4}

对公式(3)中速度求导得到加速度:
r¨I=RIBv˙B+R˙IBvB+ω×r˙+[R˙IBωb+RIBω˙b]×r=RIBaB+2ω×v+ω×(ω×r)+ω˙×r(5) \begin{aligned} \ddot{\mathbf{r}}_{I} &=\mathbf{R}_{I B} \dot{\mathbf{v}}_{B}+\dot{\mathbf{R}}_{I B} \mathbf{v}_{B}+\boldsymbol{\omega} \times \dot{\mathbf{r}}+\left[\dot{\mathbf{R}}_{I B} \boldsymbol{\omega}_{b}+\mathbf{R}_{I B} \dot{\boldsymbol{\omega}}_{b}\right]_{ \times} \mathbf{r} \\ &=\mathbf{R}_{I B} \mathbf{a}_{B}+2 \boldsymbol{\omega} \times \mathbf{v}+\boldsymbol{\omega} \times(\boldsymbol{\omega} \times \mathbf{r})+\dot{\boldsymbol{\omega}} \times \mathbf{r} \end{aligned} \tag{5}
对公式(5)进行变形得到:

a=aI2ω×vω˙×rω×(ω×r)(6) \mathbf{a}=\mathbf{a}_{I}-\underbrace{2 \boldsymbol{\omega} \times \mathbf{v}}_{\text 科氏力}- \underbrace{\dot{\boldsymbol{\omega}} \times \mathbf{r}}_{\text 欧拉力}- \underbrace{\boldsymbol{\omega} \times(\boldsymbol{\omega} \times \mathbf{r})}_{\text 离心力} \tag{6}
其中:v=RIBvb\mathbf{v}=\mathbf{R}_{I B} \mathbf{v}_{b}a=RIBab\mathbf{a}=\mathbf{R}_{I B} \mathbf{a}_{b},它们表示body下的速度或加速度在Inertial系下的表示。要区别这几种表示,习惯了找一个真实值,只不过是不同系下的不同表示罢了

测量模型与运动模型

MEMS加速度计

使用电容或者电阻桥来进行测量,注意有可能测出来的加速度计值方向是与实际力相反的,因为是使用弹簧测出的惯性力。

  • 加速度计的质量块没有高速运动,不受科氏力影响

陀螺仪

  • 振动陀螺仪使用的是科氏力作用来测得旋转,一个主运动轴+一个敏感轴,与运动方向垂直方向(敏感轴方向)受一个科氏力。

IMU模型与标定

  • 一般使用两个运动方向相反的质量块来侧科氏力,这样可以抵消加速度的影响。若质量不一致会导致有差别。

IMU误差模型

分为:确定性误差,随机误差。前者可以提前标定,后者建模成高斯分布。

确定性误差

  • 偏差bias
  • 尺度因子Scale
  • 轴偏差(非正交误差)
  • Run-to-Run Bias/Scale Factor 即每次上电启动的值都不一样
  • In Run (Stability) Bias/Scale Factor 即在运行过程中也会发生变化
  • Temperature-Dependent Bias/Scale Factor 即受温度影响的变化值

尺度因子和非对称误差为:
[laxlaylaz]=[sxxmxymxzmyxsyymyzmzxmzyszz][axayaz](7) \left[\begin{array}{l}{l_{a x}} \\ {l_{a y}} \\ {l_{a z}}\end{array}\right]=\left[\begin{array}{lll}{s_{x x}} & {m_{x y}} & {m_{x z}} \\ {m_{y x}} & {s_{y y}} & {m_{y z}} \\ {m_{z x}} & {m_{z y}} & {s_{z z}}\end{array}\right]\left[\begin{array}{c}{a_{x}} \\ {a_{y}} \\ {a_{z}}\end{array}\right] \tag{7}

确定性误差标定方法——六面法

对于加速度计;

三轴分别朝上朝下放置一段时间,如果考虑为都是正交的,相加相减就可以得到:
b=lfup+lfdown2S=lfuplfdown2g(8) \begin{aligned} b &=\frac{l_{f}^{u p}+l_{f}^{d o w n}}{2} \\ S &=\frac{l_{f}^{u p}-l_{f}^{d o w n}}{2 \cdot g} \end{aligned} \tag{8}
考虑轴间误差时,实际值与测量值之间的关系为
[laxlaylaz]=[sxxmxymxzmyxsyymyzmzxmzyszz][axayaz]+[baxbaybaz](9) \left[\begin{array}{l}{l_{a x}} \\ {l_{a y}} \\ {l_{a z}}\end{array}\right]=\left[\begin{array}{lll}{s_{x x}} & {m_{x y}} & {m_{x z}} \\ {m_{y x}} & {s_{y y}} & {m_{y z}} \\ {m_{z x}} & {m_{z y}} & {s_{z z}}\end{array}\right]\left[\begin{array}{c}{a_{x}} \\ {a_{y}} \\ {a_{z}}\end{array}\right]+\left[\begin{array}{c}{b_{a x}} \\ {b_{a y}} \\ {b_{a z}}\end{array}\right] \tag{9}
变为齐次坐标得到:
[laxlaylaz]=[sxxmxymxzbaxmyxsyymyzbaymzxmzyszzbaz][axayaz1](10) \left[\begin{array}{l}{l_{a x}} \\ {l_{a y}} \\ {l_{a z}}\end{array}\right]=\left[\begin{array}{lll}{s_{x x}} & {m_{x y}} & {m_{x z}} &{b_{a x}} \\ {m_{y x}} & {s_{y y}} & {m_{y z}} &{b_{a y}} \\ {m_{z x}} & {m_{z y}} & {s_{z z}} &{b_{a z}}\end{array}\right]\left[\begin{array}{c}{a_{x}} \\ {a_{y}} \\ {a_{z}} \\ 1\end{array}\right] \tag{10}
然后再进行转置,标准的加速度值已知,利用最小二乘求解12个参数即可。

对于陀螺仪;

也可以使用六面法,需要高精度转台提供真实值,六个值分别为绕各个轴的顺时针和逆时针的角速度。

温度相关

进行温度补偿,获得不同温度时的bias和scale值,绘制成曲线。

  • soak 方法:控制不同的恒温值,测得传感器数据。
  • ramp 方法:记录一段时间内线性升温和降温时传感器数据。

随机误差

高斯白噪声建模成均值为0,方差σ\sigma的各时刻独立的高斯过程,一般是由AD转换器引起的外部噪声。
E[n(t)]0E[n(t1)n(t2)]=σ2δ(t1t2)(11) \begin{array}{l}{E[n(t)] \equiv 0} \\ {E\left[n\left(t_{1}\right) n\left(t_{2}\right)\right]=\sigma^{2} \delta\left(t_{1}-t_{2}\right)}\end{array} \tag{11}
其中δ()\delta()表示狄拉克函数。

离散的数据噪声,与连续的高斯白噪声方差之间的转换关系为:

nd[k]n(t0+Δt)1Δtt0t0+Δtn(τ)dtE(nd[k]2)=E(1Δt2t0t0+Δtt0t0+Δtn(τ)n(t)dτdt)=E(σ2Δt2t0t0+Δtt0t0+Δtδ(tτ)dτdt)=E(σ2Δt)(12) n_{d}[k] \triangleq n\left(t_{0}+\Delta t\right) \simeq \frac{1}{\Delta t} \int_{t_{0}}^{t_{0}+\Delta t} n(\tau) d t \\\begin{aligned} E\left(n_{d}[k]^{2}\right) &=E\left(\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 d t\right) \\ &=E\left(\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 d t\right) \\ &=E\left(\frac{\sigma^{2}}{\Delta t}\right) \end{aligned} \tag{12}
所以离散的高斯白噪声为:
nd[k]=σdw[k](13) n_{d}[k]=\sigma_{d} w[k] \tag{13}
其中:w[k]N(0,1)w[k] \sim \mathcal{N}(0,1)σd=σ1Δt\sigma_{d}=\sigma \frac{1}{\sqrt{\Delta t}}

随机游走可以把它看做是一种布朗运动,或者将其称之为维纳过程。该模型可以看做是高斯白噪声的积分。该噪声参数一般是由传感器的内部构造、温度等变化量综合影响下的结果。建模成导数为高斯分布的噪声。
b˙(t)=n(t)=σbw(t)(14) \dot{b}(t)=n(t)=\sigma_{b} w(t) \tag{14}
同样离散的和连续的之间转换为:
bd[k]b(t0)+t0t0+Δtn(t)dtE((bd[k]bd[k1]2)=E(t0t0+Δtt0t0+Δtn(t)n(τ)dτdt)=E(σb2t0t0+Δtt0t0+Δtδ(tτ)dτdt)=E(σb2Δt)(15) \begin{aligned} b_{d}[k] \triangleq & b\left(t_{0}\right)+\int_{t_{0}}^{t_{0}+\Delta t} n(t) d t \\ E\left(\left(b_{d}[k]-b_{d}[k-1]^{2}\right)\right.&=E\left(\int_{t_{0}}^{t_{0}+\Delta t} \int_{t_{0}}^{t_{0}+\Delta t} n(t) n(\tau) d \tau d t\right) \\ &=E\left(\sigma_{b}^{2} \int_{t_{0}}^{t_{0}+\Delta t} \int_{t_{0}}^{t_{0}+\Delta t} \delta(t-\tau) d \tau d t\right) \\ &=E\left(\sigma_{b}^{2} \Delta t\right) \end{aligned} \tag{15}
即:
bd[k]=bd[k1]+σbdw[k](16) b_{d}[k]=b_{d}[k-1]+\sigma_{b d} w[k] \tag{16}
其中:w[k]N(0,1)w[k] \sim \mathcal{N}(0,1)σbd=σbΔt\sigma_{b d}=\sigma_{b} \sqrt{\Delta t}

随机误差的标定方法——Allan方差法

具体流程如下:

  1. 将陀螺仪静止放置时间TT ,单个采样周期为 τ0\tau_0 ,共有NN组采样值。
  2. 计算单次采样输出角度θ\theta 和 平均因子mmmm要尽量取得均匀。

θ(n)=τ0Ω(n)dtm=Rand(1,N12)(17) \begin{aligned} \theta(n) &=\int^{\tau_{0}} \Omega(n) d t \\ m &=\operatorname{Rand}\left(1, \frac{N-1}{2}\right) \end{aligned} \tag{17}

  1. 计算Allan方差,当mm取不同的值的时候会有不同的Allan方差值。

θ2(τ)=12τ2(N2m)k=1N2m(θK+2m2θK+m+θK)2(18) \theta^{2}(\tau)=\frac{1}{2\tau^{2}(N-2m)} \sum^{N-2m}_{k=1}(\theta_{K+2m}-2\theta_{K+m}+\theta_{K})^2 \tag{18}

其中:τ=mτ0\tau=m \tau_{0}

  1. 一般在绘制Allan方差曲线的时候使用的是Allan方差的平方根,将公式(18)开根号。

IMU模型与标定

使用最小二乘对计算出来的Allan方差曲线进行拟合,得到如下的示意图。

IMU模型与标定

IMU模型与标定

IMU模型与标定

按照上表中的值进行对应求得相应的噪声值,因为画出的曲线图是log-log对数图,因此斜率分别就是τ\tau的次幂。

认为这些噪声源是相互独立的,则Allan方差是各类型误差的平方和:
σ total 2(τ)=σQ2(τ)+σN2(τ)+σB2(τ)+σK2(τ)+σR2(τ)=3Q2τ2+N2τ+2B2πln2+K2τ3+R2τ22(19) \begin{aligned} \sigma_{\text { total }}^{2}(\tau) &=\sigma_{Q}^{2}(\tau)+\sigma_{N}^{2}(\tau)+\sigma_{B}^{2}(\tau)+\sigma_{K}^{2}(\tau)+\sigma_{R}^{2}(\tau) \\ &=\frac{3 Q^{2}}{\tau^{2}}+\frac{N^{2}}{\tau}+\frac{2 B^{2}}{\pi} \ln 2+\frac{K^{2} \tau}{3}+\frac{R^{2} \tau^{2}}{2} \end{aligned} \tag{19}
把公式(19)整理下:
σtotal2(τ)=i=22Ciτi(20) \sigma_{\mathrm{total}}^{2}(\tau)=\sum_{i=-2}^{2} C_{i} \tau^{i} \tag{20}
其中:i=(2,1,0,1,2)i=(-2,-1,0,1,2)

使用最小二乘方法对公式(20)与公式(18)计算出来的值进行拟合,得到CiC_i值,然后得到相应的误差系数:
{Q=C236003()N=C160()/hB=C00.664()/hK=603C1[()h1]/hR=36002C2[()h1]/h(21) \left\{\begin{array}{l}{Q=\frac{\sqrt{C_{-2}}}{3600 \sqrt{3}}\left(^{\circ}\right)} \\ {N=\frac{\sqrt{C_{-1}}}{60}\left(^{\circ}\right) / \sqrt{h}} \\ {B=\frac{\sqrt{C_{0}}}{0.664}\left(^{\circ}\right) / h} \\ {K=60 \sqrt{3 C_{1}}\left[\left(^{\circ}\right) \cdot h^{-1}\right] / \sqrt{h}} \\ {R=3600 \sqrt{2 C_{2}}\left[\left(^{\circ}\right) \cdot h^{-1}\right] / h}\end{array}\right. \tag{21}
其中陀螺仪的数据数据转为 deg/h,τ\tau还是sec单位,加速度计还是m/s2

imu_utils其中就是使用ceres求解最小二乘得到相应的系数,公式(18)到公式(21)的过程,注意其中的单位转换。

有一点不明白的是这几个误差系数是单独作用在每一段么?代码中测试发现就是令τ\tau就是求得值。画出来的就是总的Allan方差曲线,为什么拟合出来可以单独代表其中一部分的噪声?公式(19)怎么获得单独的噪声?

找到一种解释:1s 量级的平均时间范围内加速度计的误差主要是速度随机游走, 在 100s 以上的范围内主要是零偏不稳定性. 对于更长的平均时间而言, 限于采集数据的长度, 用于 Allan 方差分析的独立子集个数有限, 因此其置信程度很低。

也就是说它确实是分段的,因此可以直接拟合得到。试了下为什么可以直接赋值1计算,是因为其他的太小了,忽略不计。因为次幂的不同,因此取不同时间时,噪声的大小差别很大,因此就直接忽略了,因此可以看做分段的。

数学模型

加速度计

amB=SaTaRBG(aGgG)+na+ba(22) \mathbf{a}_{m}^{B}=\mathbf{S}_{a}\mathbf{T}_{a} \mathbf{R}_{B G}\left(\mathbf{a}^{G}-\mathbf{g}^{G}\right)+\mathbf{n}_{a}+\mathbf{b}_{a} \tag{22}

陀螺仪

ωmB=SgTgωB+sgaaB+ng+bg(23) \boldsymbol{\omega}_{m}^{B}=\mathbf{S}_{g} \mathbf{T}_{g}\boldsymbol{\omega}^{B}+\mathbf{s}_{g a} \mathbf{a}^{B}+\mathbf{n}_{g}+\mathbf{b}_{g} \tag{23}

S\mathbf S是尺度因子,T\mathbf T是非对称误差,n\mathbf n是高斯白噪声,b\mathbf b是零偏随机游走,sga\mathbf{s}_{g a}是加速度计对陀螺仪的影响。

VIO中模型

VIO中忽略尺度因子和轴偏差,只考虑白噪声和bias随机游走。
ω~b=ωb+bg+nga~b=qbw(aw+gw)+ba+na(24) \begin{aligned} \tilde{\omega}^{b} &=\omega^{b}+\mathbf{b}^{g}+\mathbf{n}^{g} \\ \tilde{\mathbf{a}}^{b} &=\mathbf{q}_{b w}\left(\mathbf{a}^{w}+\mathbf{g}^{w}\right)+\mathbf{b}^{a}+\mathbf{n}^{a} \end{aligned} \tag{24}
这里的**gg加号减号**注意就行了,和gg定义的正负,加速度计输出的加速度正负都有关系。

运动模型

参考预积分或者VINS的笔记就好了。

离散积分方法

pwbk+1=pwbk+vkwΔt+12aΔt2vk+1w=vkw+aΔtqwbk+1=qwbk[112ωδt](25) \begin{aligned}\mathbf{p}_{w b_{k+1}}&=\mathbf{p}_{w b_{k}}+\mathbf{v}_{k}^{w} \Delta t+\frac{1}{2} \mathbf{a} \Delta t^{2} \\ \mathbf{v}_{k+1}^{w}&=\mathbf{v}_{k}^{w}+\mathbf{a} \Delta t \\ \mathbf{q}_{w b_{k+1}}&=\mathbf{q}_{w b_{k}} \otimes\left[\begin{array}{c}{1} \\ {\frac{1}{2} \omega \delta t}\end{array}\right]\end{aligned} \tag{25}

对于非线性函数有以下的方法。

欧拉法

Xn+1=Xn+KΔtK=f(tn, Xn)(26) \mathbf X_{n+1} =\mathbf X_{n} + \mathrm K\Delta t\\ K=f'(t_{n},\ \mathbf X_n) \tag{26}

其中公式(24)中
a=qwbk(abkbka)gwω=ωbkbkg \begin{aligned} \mathbf{a} &=\mathbf{q}_{w b_{k}}\left(\mathbf{a}^{b_{k}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w} \\ \boldsymbol{\omega} &=\boldsymbol{\omega}^{b_{k}}-\mathbf{b}_{k}^{g} \end{aligned}

中值法(mid-point)

Xn+1=Xn+K2ΔtK2=f(tn+12Δt, Xn+K1Δt2)K1=f(tn, Xn)(27) \begin{aligned} \mathbf X_{n+1} &= \mathbf X_{n}+\mathrm K_2\Delta t \\ \mathrm K_2 &= f'(t_n+\frac{1}{2}\Delta t, \ \mathbf X_n+\mathrm K_1\frac{\Delta t}{2} ) \\ \mathrm K_1 &=f'(t_n, \ \mathbf X_n) \end{aligned} \tag{27}

其中公式(24)中的
a=12[qwbk(abkbka)gw+qwbk+1(abk+1bka)gw]ω=12[(ωbkbkg)+(ωbk+1bkg)] \begin{aligned} \mathbf{a} &=\frac{1}{2}\left[\mathbf{q}_{w b_{k}}\left(\mathbf{a}^{b_{k}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w}+\mathbf{q}_{w b_{k+1}}\left(\mathbf{a}^{b_{k+1}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w}\right] \\ \boldsymbol{\omega} &=\frac{1}{2}\left[\left(\boldsymbol{\omega}^{b_{k}}-\mathbf{b}_{k}^{g}\right)+\left(\boldsymbol{\omega}^{b_{k+1}}-\mathbf{b}_{k}^{g}\right)\right] \end{aligned}

四阶龙格库塔(RK4)

龙格库塔法的微分方程中必须有原来的量,即y˙=f(t,y)\dot y=f(t,y)形式才适用。
Xn+1=Xn+Δt6(K1+2K2+2K3+K4)K1=f(tn, Xn)K2=f(tn+Δt2, Xn+Δt2K1)K3=f(tn+Δt2, Xn+Δt2K2)K4=f(tn+Δt, Xn+ΔtK3)(28) \begin{aligned} \mathbf X_{n+1} &= \mathbf X_{n}+\frac{\Delta t}{6}(\mathrm{K_1+2K_2+2K_3+K_4}) \\ \mathrm K_1 &=f'(t_n, \ \mathbf X_n) \\ \mathrm K_2 &=f'(t_n+\frac{\Delta t}{2}, \ \mathbf X_n +\frac{\Delta t}{2} \mathrm K_1) \\ \mathrm K_3 &= f'(t_n+\frac{\Delta t}{2}, \ \mathbf X_n +\frac{\Delta t}{2} \mathrm K_2) \\ \mathrm K_4 &= f'(t_n+\Delta t, \ \mathbf X_n +{\Delta t} \mathrm K_3) \\ \end{aligned} \tag{28}
其中公式(24)中的
a=12[qwbk(abkbka)gw+qwbk+1(abk+1bka)gw] \begin{aligned} \mathbf{a} &=\frac{1}{2}\left[\mathbf{q}_{w b_{k}}\left(\mathbf{a}^{b_{k}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w}+\mathbf{q}_{w b_{k+1}}\left(\mathbf{a}^{b_{k+1}}-\mathbf{b}_{k}^{a}\right)-\mathbf{g}^{w}\right] \end{aligned}

template <typename _T>
 inline void imu_tk::quatIntegrationStepRK4(
                 const Eigen::Matrix< _T, 4, 1> &quat,
                 const Eigen::Matrix< _T, 3, 1> &omega0,
                 const Eigen::Matrix< _T, 3, 1> &omega1,
                 const _T &dt, Eigen::Matrix< _T, 4, 1> &quat_res )
{
  Eigen::Matrix< _T, 3, 1> omega01 = _T(0.5)*( omega0 + omega1 );
  Eigen::Matrix< _T, 4, 1> k1, k2, k3, k4, tmp_q;
  Eigen::Matrix< _T, 4, 4> omega_skew;
  
  // First Runge-Kutta coefficient
  computeOmegaSkew( omega0, omega_skew );
  k1 = _T(0.5)*omega_skew*quat;
  // Second Runge-Kutta coefficient
  tmp_q = quat + _T(0.5)*dt*k1;
  computeOmegaSkew( omega01, omega_skew );
  k2 = _T(0.5)*omega_skew*tmp_q;
  // Third Runge-Kutta coefficient (same omega skew as second coeff.)
  tmp_q = quat + _T(0.5)*dt*k2;
  k3 = _T(0.5)*omega_skew*tmp_q;
  // Forth Runge-Kutta coefficient
  tmp_q = quat + dt*k3;
  computeOmegaSkew( omega1, omega_skew );
  k4 = _T(0.5)*omega_skew*tmp_q;
  _T mult1 = _T(1.0)/_T(6.0), mult2 = _T(1.0)/_T(3.0);
  quat_res = quat + dt*(mult1*k1 + mult2*k2 + mult2*k3 + mult1*k4);
  normalizeQuaternion(quat_res);
}

总的标定流程

IMU_tk为例,直接用本科毕设论文里的吧,有些符号可能不一样,比如考虑陀螺仪轴和加速度计轴不垂直、不重合的轴向误差。

IMU模型与标定

IMU模型与标定

IMU模型与标定

IMU模型与标定

相关标签: SLAM