前面几章讲了怎样用单个传感器把图建出来然后再做定位。接下来就进入了融合的环节,即怎样把图和定位建的更好。
1687年,伟大的英国科学家牛顿提出力学三大定律,为惯性导航技术奠定了理论基础。
自20世纪60年代起,出现了挠性陀螺仪和动力谐调陀螺仪,同时平台式惯导系统发展迅速,并大量装备各种飞机、舰船、导弹和航天飞行器。
Sagnac效应由法国物理学家 Sagnac 于 1913 年发现,其原理是干涉仪相对惯性空间静止时,光路 A 和 B 的光程相等,当有角速度时,光程不相等,便会产生干涉。
同样基于Sagnac效应,传播介质改成了光纤。(相比激光陀螺,成本低很多)
科里奥利力(Coriolis force,简称为科氏力)
,是对旋转体系(比如自传的地球,旋转的圆盘等)中进行直线运动的质点由于惯性相对于旋转体系产生的直线运动的偏移的一种描述。
如左图所示有一个圆盘,圆盘静止的时候,有一个球从里往外去运动的时候,画出来肯定是一条直线。现在假设这个圆盘它旋转了一下,旋转以后这个球画出来的就不是一条直线了,它是一个弧线。也就是说一个东西往前运动,旋转它的载体时,这个运动的东西会受到一个力,往另一个方向走。
右图有一个摆动器械,它在一个微机械的器械内来回摆动,在静态不动的时候,它就沿直线运动。但是当它有旋转的时候,因为科里奥利力的存在,它的摆动就会画弧线而不是走直线了。这时,支撑着这个摆的四个构件,就会检测到一个扭动的力,这个扭动力量的大小,就反应了当前角速度的大小。通过这种方式来测量角速度。
核心就是惯性-------即保持原来的运动状态不变。进动性----不想改变转轴,我要反抗这个旋转。
当运载体相对惯性空间做加速度运动时,仪表壳体也随之做相对运动,质量块保持惯性,朝着与加速度方向相反的方向产生位移(拉伸或压缩弹簧)。当位移量达到一定值时,弹簧给出的力使质量块以同一加速度相对惯性空间做加速运动,加速度的大小与方向影响质量块相对位移的方向及拉伸量。(在静止不动时,这个东西自己是不摆的,但在给它一个加速度的时候,由于惯性的作用,会产生一个反向的摆动。通过检测摆动的大小,就知道了加速度的大小。)
量化噪声
一切量化操作所固有的噪声,是数字传感器必然出现的噪声;
产生原因:通过AD采集把连续时间信号采集成离散信号的过程中,精度会损失,精度损失的大小和AD转换的步长有关,步长越小,量化噪声越小。(AD:模拟信号,这个比较好理解,连续信号采集成离散信号,比较采集是有频率的)
角度随机游走
宽带角速率白噪声
:陀螺输出角速率是含噪声的,该噪声中的白噪声成分;
产生原因:计算姿态的本质是对角速率做积分,这必然会对噪声也做了积分。白噪声的积分并不是白噪声,而是一个马尔可夫过程,即当前时刻的误差是在上一时刻误差的基础上累加一个随机白噪声得到的。
角度误差中所含的马尔可夫性质的误差,称为角度随机游走。(测量出的角速率是有一个白噪声的,因为我们要利用角速率解算,积分成角度,这时的白噪声也包含在积分里面了,那不就算的不准了)
角速率随机游走
与角度随机游走类似,角速率误差中所含的马尔可夫性质的误差,称为角速率随机游走
。而这个马尔可夫性质的误差是由宽带角加速率白噪声累积的结果。(角加速率里面也是有一个白噪声的)
零偏不稳定性噪声
零偏:即常说的bias,一般不是一个固定参数,而是在一定范围内缓慢随机飘移。
零偏不稳定性:零偏随时间缓慢变化,其变化值无法预估,需要假定一个概率区间描述它有多大的可能性落在这个区间内。时间越长,区间越大。
(这玩意好像不是很好描述,但是在工程上,我们需要给它一个近似的模型)
速率斜坡
该误差是趋势性误差,而不是随机误差。
随机误差
,是指你无法用确定性模型去拟合并消除它,最多只能用概率模型去描述它,这样得到的预测结果也是概率性质的。
趋势性误差
,是可以直接拟合消除的,在陀螺里产生这种误差最常见的原因是温度引起零位变化,可以通过温补
来消除。
(一个角速度,在不考虑之前说的那些随机误差的影响下,那误差就是一个稳定的白噪声。现在它随着时间变化,会有一个趋势性,也就是误差也在飘,但是这个误差是趋势性的。理论上讲这个误差不能叫完全的随机误差,因为趋势性很多时候是有些确定性的模型来影响的,比如说温补------随着温度的升高,误差会变大,这个模型是可以拟合的。但是在随机信号分析的时候,温补的误差是可以分析出来的。)
零偏重复性
多次启动时,零偏不相等,因此会有一个重复性误差。在实际使用中,需要每次上电都重新估计一次。(意思是,不同次启动时,零偏会发生多大的变化。与前面的所有误差是有区别的,前五项一次充电采集很多信号就可以分析出来。而零偏重复性就需要反复上电断电上电断电,统计一下每次上电断电,这个bias发生了多少变化)
Allan方差分析时,不包含对零偏重复性的分析。(即Allan方差只能分析前五项,不能分析第六项)
随机信号Allan方差的物理意义及应用在本质上来源于它与功率谱之间的关系。
功率谱(功率谱密度函数)
:单位频带内的信号功率,它表示信号功率随着频率的变化情况,即信号功率在频域的分布状况。
假设把随机过程 X α X_\alpha Xα 的功率谱表示为: PSD [ X α ] = h α f α \operatorname{PSD}\left[X_\alpha\right]=h_\alpha f^\alpha PSD[Xα]=hαfα 其中 f α f^\alpha fα 是频率, h n h_n hn 为相应的系数。(频率和功率之间的关系)
若多个随机过程相互独立,则其满足线性相加性质,即 X = ∑ X a X=\sum X_a X=∑Xa 此时,其功率谱也同样可以线性相加 PSD [ X ] = ∑ PSD [ X α ] \operatorname{PSD}[X]=\sum \operatorname{PSD}\left[X_\alpha\right] PSD[X]=∑PSD[Xα](多个功率谱是可以叠加的)
Allan方差分析方法的基本思路:
在惯性器件随机误差分析中,以上提到的5种误差相互独立,且 α \alpha α 值不同,因此若绘制“时间间隔-方差双对数曲线”(时间间隔是频率的倒数,方差是功率谱的积分),则得到的曲线斜率必不相同。
根据曲线斜率识别出各项误差,并计算出对应的误差强度。
(公式知道就行了,这时信号分析的东西,不属于融合范畴)
量化噪声 Q Q Q 满足下式
log 10 σ Q N ( τ ) = log 10 ( 3 Q ) − log 10 τ \log _{10} \sigma_{Q N}(\tau)=\log _{10}(\sqrt{3} Q)-\log _{10} \tau log10σQN(τ)=log10(3Q)−log10τ角度随机游走 N N N 满足下式
log 10 σ A R W ( τ ) = log 10 N − 1 / 2 ∗ log 10 τ \log _{10} \sigma_{A R W}(\tau)=\log _{10} N-1 / 2 * \log _{10} \tau log10σARW(τ)=log10N−1/2∗log10τ角速率游走 K K K 满足下式
log 10 σ R R W ( τ ) = log 10 ( K / 3 ) + 1 / 2 ∗ log 10 τ \log _{10} \sigma_{R R W}(\tau)=\log _{10}(K / \sqrt{3})+1 / 2 * \log _{10} \tau log10σRRW(τ)=log10(K/3)+1/2∗log10τ零偏不稳定性 B B B 满足下式
log 10 σ B I ( τ ) = log 10 ( 2 B / 3 ) \log _{10} \sigma_{B I}(\tau)=\log _{10}(2 B / 3) log10σBI(τ)=log10(2B/3)速率斜坡 R R R 满足下式
log 10 σ R R ( τ ) = log 10 ( R / 2 ) + log 10 τ \log _{10} \sigma_{R R}(\tau)=\log _{10}(R / \sqrt{2})+\log _{10} \tau log10σRR(τ)=log10(R/2)+log10τ以上公式中, τ \tau τ 为时间间隔。
根据以上公式分析,可知曲线的形状如下:
即各随机噪声对应的斜率分别为 -1, -1/2, 0, 1/2, 1(即上面的 − log 10 τ -\log _{10} \tau −log10τ、 − 1 / 2 ∗ log 10 τ -1 / 2 *\log _{10} \tau −1/2∗log10τ…),找到曲线后,方程就可以求出来了(也就是、、、、)
同时,令 τ = 1 \tau=1 τ=1 ,则 log 10 ( τ ) = 0 \log _{10}(\tau)=0 log10(τ)=0
其含义是求曲线与 τ = 1 \tau=1 τ=1 的交点,此时有:
噪声类型 | 与 τ \tau τ 的交点 |
---|---|
量化噪声 | 3 Q \sqrt{3}Q 3Q |
角度随机游走 | N N N |
角速率游走 | K / 3 K/\sqrt{3} K/3 |
零偏不稳定性 | 2 B / 3 2B/3 2B/3 |
速率斜坡 | R / 2 R/\sqrt{2} R/2 |
此时可容易地求出 、、、、
现在来说说怎么使用这些误差:
开源代码:https://github.com/gaowenliang/imu_utils
P1:五个误差全用么?
不全用,这五个误差更多的是,再生产器件时,知道以哪几个误差为主,来改进生产。但假如是用户,我现在的主要目标是做融合,那么再实际过程中五项误差不全是需要关心的了。
主要关心的有以下两个:
用法(以陀螺仪为例):
角度随机游走
,在融合时作为陀螺仪的噪声使用。(有时也以零偏不稳定性当做噪声,因为很多手册里面都不提供角度随机游走,而零偏不稳定性是必须会给的),对应的是卡尔曼滤波里面的 Q Q Q角速度随机游走
,作为陀螺仪微分项中的噪声。(详细内容在介绍融合时介绍)注意:
1)其他误差项,仅起到了解器件精度水平的作用;
2)实际融合时,Allan分析的结果,只是作为初值使用,需要在此基础上调参。
零偏重复性
:之前的几个误差都被计算出来了,但是可以看到所有的模型都在估计一个bias。那么为什么需要估计一个bias出来而不能提前估计出来一直用呢?就是因为零偏重复性的问题,它在每一次上电的时候都不一样。假如我的器件,零偏不稳定性是5°/h,那么它的零偏重复性可能达到500°/h,也就是说bias上面有一个每小时500°的值,而这个值是事先测不出来的,这么大的误差,必然是需要在线估计的。(这概念挺重要)
内参标定是惯性器件里面非常核心的一个环节,虽然大家在实践过程中可能不需要做这个东西,因为买一个IMU模块,大多数情况下都给标好了。但是这方面的技能还是需要掌握的。
误差解释: 陀螺仪或加速度计输出中的常值偏移,即常说的 bias。(注意陀螺仪和加速度计都有一个)
误差特性: 由于零偏存在不稳定性,因此零偏并不是固定不变的。
解决办法: 实际使用中,只能一段时间内近似为常值。
(在多数情况下可以认为是一个常值,在前面说误差分析时,说零偏有随机游走、每次上电还有零偏重复性这类的问题。但是不管怎样,在一次通电的很短的时间内,可以将它认为是一个常值来用,这样可以简化模型,不把模型搞得太复杂。)
加速度计的零偏表示为:
b a = [ b a x b a y b a z ] b_a=\left[\begin{array}{lll} b_{a x} & b_{a y} & b_{a z} \end{array}\right] ba=[baxbaybaz]陀螺仪的零偏表示为:
b g = [ b g x b g y b g z ] b_g=\left[\begin{array}{lll} b_{g x} & b_{g y} & b_{g z} \end{array}\right] bg=[bgxbgybgz]
误差解释: 器件的输出往往为脉冲值或模数转换得到的值,需要乘以一个刻度系数才能转换成角速度或加速度值,若该系数不准,便存在刻度系数误差。
误差特性: 不一定是常值,它会随着输入大小的不同而发生变化,这个就是标度因数的非线性。
解决办法: 如果非线性程度比较大,则需要在标定之前先拟合该非线性曲线,并补偿成线性再去做标定。
(假设有 x , y , z x, y, z x,y,z三个轴,绕 z z z轴旋转 10°/s,在实际测量的时候,会发现 z z z输出的角速度不是 10°/s,可能是 9.9°/s,也就是说上面有一个 0.1°/s 的误差。这时在旋转的时候,要在上面乘上一个比例因子,这个比例因子就是 K = 10 9.9 K=\frac{10}{9.9} K=9.910,最后补偿过的角速度才是真实的角速度结果。每个轴上都有一个这样比例系数的补偿因子,所以建成的是一个对角矩阵的形式,与 [ x y z ] \left[\begin{array}{lll} x \\ y \\ z \end{array}\right] xyz 相乘。)
关于拟合:输入 10°/s 时得到一个角速度输出,20°/s、30°/s 时都能得到一个角速度输出值。但是比例因子不一定是相同的,在 10°/s 时有一个数,在 20°/s 时可能就是另外一个数了。这里有两种方法处理:
加速度计的标度因数
,表示如下
K a = [ K a x K a y K a z ] K_a=\left[\begin{array}{lll} K_{a x} & & \\ & K_{a y} & \\ & & K_{a z} \end{array}\right] Ka= KaxKayKaz 陀螺仪的标度因数
,表示为
K g = [ K g x K g y K g z ] K_g=\left[\begin{array}{lll} K_{g x} & & \\ & K_{g y} & \\ & & K_{g z} \end{array}\right] Kg= KgxKgyKgz
误差解释: 如下图所示,b坐标系是正交的imu坐标系,g坐标系的三个轴是分别对应三个陀螺仪。由于加工工艺原因,陀螺仪的三个轴并不正交,而且和b坐标系的轴不重合,二者之间的偏差即为安装误差
。
误差特性: 实际系统中,由于硬件结构受温度影响,安装误差也会随温度发生变化。
解决办法: 在不同温度下做标定,补偿温度变化量。
(比方说绕 z z z轴旋转,理论上其他轴是没有角速度输出的。但是有一个问题,如果 x x x与 z z z轴不是正交的,比如正交是 90 ° 90° 90°,而它俩是 89.9 ° 89.9° 89.9°,会造成一个现象,即绕 z z z旋转的时候, x x x上就有了角速度输出了,因为它上面因为不完全垂直而有分量了。)
因为 z z z在 x x x、 y y y方向上有误差;因为 y y y在 x x x、 z z z方向上有误差;因为 x x x在 y y y、 z z z方向上有误差,总共有六个误差量。
陀螺仪的安装误差,表示如下
S g = [ 0 S g x y S g x z S g y x 0 S g y z S g z x S g z y 0 ] S_g=\left[\begin{array}{ccc} 0 & S_{g x y} & S_{g x z} \\ S_{g y x} & 0 & S_{g y z} \\ S_{g z x} & S_{g z y} & 0 \end{array}\right] Sg= 0SgyxSgzxSgxy0SgzySgxzSgyz0 加速度计的安装误差,表示为
S a = [ 0 S a x y S a x z S a y x 0 S a y z S a z x S a z y 0 ] S_a=\left[\begin{array}{ccc} 0 & S_{a x y} & S_{a x z} \\ S_{a y x} & 0 & S_{a y z} \\ S_{a z x} & S_{a z y} & 0 \end{array}\right] Sa= 0SayxSazxSaxy0SazySaxzSayz0
利用下面公式(以陀螺仪为例),可以把各项误差综合在一起:
W = K g ( I + S g ) ω + b g ≈ ( K g + S g ) ω + b g W=K_g\left(I+S_g\right) \omega+b_g \approx\left(K_g+S_g\right) \omega+b_g W=Kg(I+Sg)ω+bg≈(Kg+Sg)ω+bg ω \omega ω为角速度输入,即想求得的理想角速度,真实输入; W W W是角速度的输出,也就是直接在器件上面测量出来的结果。可以看到 K g K_g Kg 和 S g S_g Sg 乘在一起了,耦合在一起就很难解耦,这个模型标定的时候就很难标定了,所以要做一个化简,就得到了最右边的样子。核心原因在于 K g = I + Δ K g K_g=I+\Delta K_g Kg=I+ΔKg,而 Δ K g \Delta K_g ΔKg 是一个很小的量, ( I + Δ K g ) ( I + S g ) = I + Δ K g + S g + Δ K g S g (I+\Delta K_g)(I+S_g)=I+\Delta K_g+S_g+\Delta K_gS_g (I+ΔKg)(I+Sg)=I+ΔKg+Sg+ΔKgSg,因为 S g S_g Sg也是个小量, Δ K g S g \Delta K_gS_g ΔKgSg 可以被忽略。
陀螺仪的输出可以展开为:
[ W x W y W z ] = [ K g x S g x y S g x z S g y x K g y S g y z S g z x S g z y K g z ] [ ω x ω y ω z ] + [ b g x b g y b g z ] \left[\begin{array}{l} W_x \\ W_y \\ W_z \end{array}\right]=\left[\begin{array}{lll} K_{g x} & S_{g x y} & S_{g x z} \\ S_{g y x} & K_{g y} & S_{g y z} \\ S_{g z x} & S_{g z y} & K_{g z} \end{array}\right]\left[\begin{array}{c} \omega_x \\ \omega_y \\ \omega_z \end{array}\right]+\left[\begin{array}{l} b_{g x} \\ b_{g y} \\ b_{g z} \end{array}\right] WxWyWz = KgxSgyxSgzxSgxyKgySgzySgxzSgyzKgz ωxωyωz + bgxbgybgz 加速度计的输出可以展开为:
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b g z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{g z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybgz
标定的本质是参数辨识,参数包括陀螺仪和加速度计各自的零偏、刻度系数误差、安装误差。
辨识方法包括:
1)解析法或最小二乘
2)迭代优化方法
3)滤波(Kalman等)
常见标定方法与上面辨识方法的对应关系为:
在IMU的误差模型中,陀螺仪和加速度计的误差方程是互相独立的,可分别标定。
以加速度计为例,其误差模型方程为:
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b a z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{a z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybaz 左边 A x , A y , A z A_x, A_y, A_z Ax,Ay,Az是测量出来的,肯定是已知的; a x , a y , a z a_x, a_y, a_z ax,ay,az是输入,标定时也是已知的。误差模型方程是一个包含12个未知参数的方程组,显然方程组没有唯一解。此时,通过改变输入,获得多个不同方程 (大于12个),组成的方程组便可求解参数。
以上就是分立级标定
方法的思路,具体求解方法包括解析法和最小二乘法。
该标定方法的核心:通过旋转IMU,改变其输入构造方程组,并且每个位置对应的加速度输入和角速度输入都必须是已知的。
构建方程组时,不仅要方程组数量足够,而且要能够使误差参数可解,即系数矩阵可逆。
为了满足这一点,常见的转位方案有六位置、八位置、十二位置等。
在实际使用时,通过判断系数矩阵是否满秩便可判断,理论上,只要转位方案能满足这一条件,就可以使用。
当IMU水平向上放置时,得:
{ a x = 0 a y = 0 a z = g \left\{\begin{array}{l} a_x=0 \\ a_y=0 \\ a_z=g \end{array}\right. ⎩ ⎨ ⎧ax=0ay=0az=g其中, g \mathrm{g} g 为重力加速度。带入加速度计误差模型,
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b a z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{a z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybaz 可得:
{ A x = S a x z ∗ g + b a x A y = S a y z ∗ g + b a y A z = K a z ∗ g + b a z \left\{\begin{array}{l} A_x=S_{a x z} * g+b_{a x} \\ A_y=S_{a y z} * g+b_{a y} \\ A_z=K_{a z} * g+b_{a z} \end{array}\right. ⎩ ⎨ ⎧Ax=Saxz∗g+baxAy=Sayz∗g+bayAz=Kaz∗g+baz同理,当IMU水平向下放置时,得:
{ A x ′ = − S a x z ∗ g + b a x A y ′ = − S a y z ∗ g + b a y A z ′ = − K a z ∗ g + b a z \left\{\begin{array}{l} A_x'=-S_{a x z} * g+b_{a x} \\ A_y'=-S_{a y z} * g+b_{a y} \\ A_z'=-K_{a z} * g+b_{a z} \end{array}\right. ⎩ ⎨ ⎧Ax′=−Saxz∗g+baxAy′=−Sayz∗g+bayAz′=−Kaz∗g+baz联立这两个方程组,便可解出 6 个参数。随后,再次改变 IMU放置方式,可解其他参数。
并且,由此可以看出,转台需要调平。
加速度计误差模型:
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b a z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{a z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybaz 可得到:
[ A x A y A z ] = x [ K a x K a y K a z S a x y S a x z S a y x S a y z S a z x S a z y ∇ x ∇ y ∇ z ] → y = x θ \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=x\left[\begin{array}{c} K_{a x} \\ K_{a y} \\ K_{a z} \\ S_{a x y} \\ S_{a x z} \\ S_{a y x} \\ S_{a y z} \\ S_{a z x} \\ S_{a z y} \\ \nabla_x \\ \nabla_y \\ \nabla_z \end{array}\right] \quad \rightarrow y=x \theta AxAyAz =x KaxKayKazSaxySaxzSayxSayzSazxSazy∇x∇y∇z →y=xθ其中:
x = [ F I 3 × 3 ] F = [ a x 0 0 a y a z 0 0 0 0 0 a y 0 0 0 a x a z 0 0 0 0 a z 0 0 0 0 a x a y ] \begin{aligned} x & =\left[\begin{array}{ll} F & I_{3 \times 3} \end{array}\right] \\ F & =\left[\begin{array}{ccccccccc} a_x & 0 & 0 & a_y & a_z & 0 & 0 & 0 & 0 \\ 0 & a_y & 0 & 0 & 0 & a_x & a_z & 0 & 0 \\ 0 & 0 & a_z & 0 & 0 & 0 & 0 & a_x & a_y \end{array}\right] \end{aligned} xF=[FI3×3]= ax000ay000azay00az000ax00az000ax00ay 转台在每个位置都可以得到一个方程: y i = x i θ y_i=x_i \theta yi=xiθ
所有位置对应的方程联立可得: Y = X θ Y=X \theta Y=Xθ
其中 Y = [ y 0 T y 1 T … y n T ] T X = [ x 0 T x 1 T … x n T ] T Y=\left[\begin{array}{llll}y_0^T & y_1^T & \ldots & y_n^T\end{array}\right]^T \quad X=\left[\begin{array}{llll}x_0^T & x_1^T & \ldots & x_n^T\end{array}\right]^T Y=[y0Ty1T…ynT]TX=[x0Tx1T…xnT]T
经过变形,标定问题变为线性拟合问题,当第 i i i次把IMU朝不同方向放置后,便得到一个方程组。
参数拟合问题等效为最小二乘问题,其解为: θ = ( X T X ) − 1 X T Y \theta=\left(X^T X\right)^{-1} X^T Y θ=(XTX)−1XTY(最小二乘通解),由此便得到标定参数。
转台一般角速度不如角度精度高,因此不是直接以角速度作为真值,而是以积分得到的角度作为真值。
求解刻度系数和安装误差:
首先,计算输出与输入的关系(以绕IMU的 z z z轴逆时针旋转为例)
[ W x W y W z ] = [ K g x S g x y S g x z S g y x K g y S g y z S g z x S g z y K g z ] [ 0 0 ω ] + [ b g x b g y b g z ] \left[\begin{array}{l} W_x \\ W_y \\ W_z \end{array}\right]=\left[\begin{array}{lll} K_{g x} & S_{g x y} & S_{g x z} \\ S_{g y x} & K_{g y} & S_{g y z} \\ S_{g z x} & S_{g z y} & K_{g z} \end{array}\right]\left[\begin{array}{c} 0 \\ 0 \\ \omega \end{array}\right]+\left[\begin{array}{c} b_{g x} \\ b_{g y} \\ b_{g z} \end{array}\right] WxWyWz = KgxSgyxSgzxSgxyKgySgzySgxzSgyzKgz 00ω + bgxbgybgz 展开可得
{ W x = S g x z ∗ ω + b g x W y = S g y z ∗ ω + b g y W z = K g z ∗ ω + b g z \left\{\begin{array}{l} W_x=S_{g x z} * \omega+b_{g x} \\ W_y=S_{g y z} * \omega+b_{g y} \\ W_z=K_{g z} * \omega+b_{g z} \end{array}\right. ⎩ ⎨ ⎧Wx=Sgxz∗ω+bgxWy=Sgyz∗ω+bgyWz=Kgz∗ω+bgz对等式两侧进行积分
{ θ W x = S g x z ∗ θ ω + θ b g x θ W y = S g y z ∗ θ ω + θ b g y θ W z = K g z ∗ θ ω + θ b g z \left\{\begin{array}{l} \theta_{W_x}=S_{g x z} * \theta_\omega+\theta_{b_{g x}} \\ \theta_{W_y}=S_{g y z} * \theta_\omega+\theta_{b_{g y}} \\ \theta_{W_z}=K_{g z} * \theta_\omega+\theta_{b_{g z}} \end{array}\right. ⎩ ⎨ ⎧θWx=Sgxz∗θω+θbgxθWy=Sgyz∗θω+θbgyθWz=Kgz∗θω+θbgz绕IMU的z轴顺时针旋转时,同样方法可得,
{ θ W x ′ = − S g x z ∗ θ ω + θ b g x θ W y ′ = − S g y z ∗ θ ω + θ b g y θ W z ′ = − K g z ∗ θ ω + θ b g z \left\{\begin{array}{l} \theta_{W_x}'=-S_{g x z} * \theta_\omega+\theta_{b_{g x}} \\ \theta_{W_y}'=-S_{g y z} * \theta_\omega+\theta_{b_{g y}} \\ \theta_{W_z}'=-K_{g z} * \theta_\omega+\theta_{b_{g z}} \end{array}\right. ⎩ ⎨ ⎧θWx′=−Sgxz∗θω+θbgxθWy′=−Sgyz∗θω+θbgyθWz′=−Kgz∗θω+θbgz
正逆时针的两式可以求解出 S g x z S g y z K q z S_{g x z} \quad S_{g y z} \quad K_{q z} SgxzSgyzKqz
此处不通过两式求解零偏,因为旋转所用时间偏短,零偏造成的角度输出太小。
求解零偏:
当转台静止时,可以简单认为陀螺仪输出只有零偏,即(单纯放置着静止不动即可):
[ W x W y W z ] = [ b g x b g y b g z ] \left[\begin{array}{l} W_x \\ W_y \\ W_z \end{array}\right]=\left[\begin{array}{l} b_{g x} \\ b_{g y} \\ b_{g z} \end{array}\right] WxWyWz = bgxbgybgz 此时采集一段时间内的数据,取平均值,即可得到零偏。
需要强调的是:
a. 有时标定需要考虑地球自转角速度的影响,此时模型比较复杂,可自行参考《惯性仪器测试与数据分析》第 10 章。
b. mems 陀螺仪的零偏重复性极差,因此每次上电都要在线估计零偏,因此离线标定时,零偏标与不标区别不大。
使用转台的方法很好理解、精度也很高,但是问题在于转台很贵,有很多时候是没有转台的。这个时候输入是没有了的----没有很明确的三个轴的输入,但是还是有一个值可以用的,就是重力加速度。也就是说三个加速度计测量出的矢量的和的模,它的值必须和重力加速度值相等,这时候的加速度计才被认为是没有误差的,否则认为是有误差的。
加速度输入(重力加速度)是已知的,已知值与测量值的差异作为残差,通过优化,估计内参。
参考资料:
论文:A Robust and Easy to Implement Method for IMU Calibration without External Equipments
在定义坐标系时,若令IMU坐标系的 X b X_b Xb 轴与加速度计的 X a X_a Xa 轴重合,且 X b O Y b X_b O Y_b XbOYb 与 X a O Y a X_a O Y_a XaOYa 共面(如下图)(这里说的IMU坐标系是标准的坐标系意思?),则加速度计的安装误差只剩下三个参数。(按照定义方式不同,有些模型中会表示成上三角矩阵)
新的安装误差矩阵为 S a = [ 0 0 0 S a y x 0 0 S a z x S a z y 0 ] S_a=\left[\begin{array}{ccc}0 & 0 & 0 \\ S_{a y x} & 0 & 0 \\ S_{a z x} & S_{a z y} & 0\end{array}\right] Sa= 0SayxSazx00Sazy000
此时,加速度计内参的待估参数为
θ a c c = [ S a y x , S a z x , S a z y , K a x , K a y , K a z , b g x , b g y , b g z ] \boldsymbol{\theta}^{a c c}=\left[S_{a y x}, S_{a z x}, S_{a z y}, K_{a x}, K_{a y}, K_{a z}, b_{g x}, b_{g y}, b_{g z}\right] θacc=[Sayx,Sazx,Sazy,Kax,Kay,Kaz,bgx,bgy,bgz]陀螺仪的误差模型保持不变,但此处并没有估计陀螺仪零偏,因此陀螺仪内参的待估参数为(因为坐标系定的是和IMU坐标系一致,不能说再定义一个陀螺仪的)
θ g y r o = [ S g x y , S g x z , S g y x , S g y z , S g z x , S g z y , K g x , K g y , K g z ] \boldsymbol{\theta}^{g y r o}=\left[S_{g x y}, S_{g x z}, S_{g y x}, S_{g y z}, S_{g z x}, S_{g z y}, K_{g x}, K_{g y}, K_{g z}\right] θgyro=[Sgxy,Sgxz,Sgyx,Sgyz,Sgzx,Sgzy,Kgx,Kgy,Kgz]
按照内参定义,加速度计输出与输入的关系为
A = K a ( I + S a ) a + b a A=K_a\left(I+S_a\right) a+b_a A=Ka(I+Sa)a+ba即由测量值可以得到真实值为
a = ( I + S a ) − 1 K a − 1 ( A − b a ) a=\left(I+S_a\right)^{-1} K_a^{-1}\left(A-b_a\right) a=(I+Sa)−1Ka−1(A−ba)在求解时,逆运算的存在使模型变得复杂,因此使用以 下方式进行简化
K a ′ = [ K a x ′ K a y ′ K a z ′ ] = K a − 1 = [ 1 K a x 1 K a y 1 K a z ] K_a^{\prime}=\left[\begin{array}{lll} K_{a x}^{\prime} & & \\ & K_{a y}^{\prime} & \\ & & K_{a z}^{\prime} \end{array}\right]=K_a^{-1}=\left[\begin{array}{ccc} \frac{1}{K_{a x}} & & \\ & \frac{1}{K_{a y}} & \\ & & \frac{1}{K_{a z}} \end{array}\right] Ka′= Kax′Kay′Kaz′ =Ka−1= Kax1Kay1Kaz1 ( I + S a ) − 1 ≈ I − S a a = ( I S a ) K a ′ ( Λ b a ) \begin{aligned} & \left(I+S_a\right)^{-1} \approx I-S_a \\ & a=\left(\begin{array}{ll} I & \left.S_a\right) \end{array} K_a^{\prime}\left(\begin{array}{ll} \Lambda & b_a \end{array}\right)\right. \end{aligned} (I+Sa)−1≈I−Saa=(ISa)Ka′(Λba)当imu静止时,输入只有重力加速度。
把加速度计矢量定义为 g = [ 0 0 g 0 ] T \boldsymbol{g}=\left[\begin{array}{lll}0 & 0 & g_0\end{array}\right]^T g=[00g0]T ,其中 g 0 g_0 g0 为 当地重力大小。
当内参完全准确时,有 ∥ g ∥ 2 = ∥ a ∥ 2 \|\boldsymbol{g}\|^2=\|\boldsymbol{a}\|^2 ∥g∥2=∥a∥2
当内参存在误差时,可写出残差函数为:
f ( θ a c c ) = ∥ g ∥ 2 − ∥ a ∥ 2 f\left(\theta^{a c c}\right)=\|\boldsymbol{g}\|^2-\|\boldsymbol{a}\|^2 f(θacc)=∥g∥2−∥a∥2根据高斯牛顿的流程,有此残差函数便可以推导雅可比 (推导留作作业),通过优化求解出内参。
需要注意的是,一个静止位置的测量不能完全求解出参 数,需要按不同的姿态,在多个位置静止(如右图黑色曲 线所包含的时间段),所有位置的测量放在同一个优化任 务中,才能求解全部参数。
陀螺仪内参估计在加速度计标定完成后进行,因此认为此时加速度计无误差。
令 u a , k \boldsymbol{u}_{a, k} ua,k 代表在第 k \mathrm{k} k 个静止位置时,三个加速度计的输出构成的矢量在IMU坐标系下的表示,即
u a , k = R b k w g \boldsymbol{u}_{a, k}=R_{b_k w} \boldsymbol{g} ua,k=Rbkwg其中 R b k w R_{b_k w} Rbkw 表示从世界坐标系(w系,和水平面平行且不随IMU旋转而旋转的坐标系)到第 k \mathrm{k} k 个位置对应的IMU坐标系的转换矩阵。
注意: 并不需要已知 R b k w R_{b_k w} Rbkw ,因为 u a , k \boldsymbol{u}_{a, k} ua,k 是直接测量的。
在第 k + 1 k+1 k+1 个位置时,同样有
u a , k + 1 = R b k + 1 w g \boldsymbol{u}_{a, k+1}=R_{b_{k+1} w} \boldsymbol{g} ua,k+1=Rbk+1wg从第 k \mathrm{k} k 个位置,到第 k + 1 \mathrm{k}+1 k+1 个位置,可以根据陀螺仪测量计算出两个位置之间的相对旋转 R b k + 1 b k R_{b_{k+1}} b_k Rbk+1bk,根据该旋转可以算出一个第 k + 1 \mathrm{k}+1 k+1 位置加速度计输出矢量的推测值:
u g , k + 1 = R b k + 1 b k u a , k \boldsymbol{u}_{g, k+1}=R_{b_{k+1} b_k} \boldsymbol{u}_{a, k} ug,k+1=Rbk+1bkua,k可见,推测值的误差就体现了陀螺仪的误差,因此可以根据推测值与观测值构建残差函数:
f ( θ gyro ) = u a , k + 1 − u g , k + 1 f\left(\theta^{\text {gyro }}\right)=\boldsymbol{u}_{a, k+1}-\boldsymbol{u}_{g, k+1} f(θgyro )=ua,k+1−ug,k+1雅可比推导需要用到IMU解算知识,本章不作要求。
现在来说一说惯性器件的温补, 温补的影响很大,但是很多时候不需要自己做,因为厂商给做好了,买了厂商的东西,输出结果自然是给补偿好的。
温补
的本质是系统辨识,既要找出合适的物理模型,又要识别物理模型的参数。(说白了就是不同温度能得到不同的bias,问题就在于,怎样得到这个bias)
理论上讲,对于MEMS,静止情况下,陀螺的输出本身就是bias,这里不做区分。只是说在高精度的情况下,静止情况下的输出还包含别的因素,所以它不等于bias,但是对于低精度来讲无所谓,可以当成bias来看待。
和温度相关的变量为 T T T 和 Δ T \Delta T ΔT ,分别代表温度、变温率(表示温度变化的快慢)(注意,不仅和温度点相关,还跟温度变化的速度是相关的),温补要做的是识别出器件 bias(B)和这两者的关系:
B = f ( T , Δ T ) B=f(T, \Delta T) B=f(T,ΔT)而 f f f的具体表达多数是靠尝试。
常见的模型为
B = a ∗ T 3 + b ∗ T 2 + c ∗ T + e ∗ Δ T 2 + f ∗ Δ T + g ∗ T ∗ Δ T + h \begin{aligned} B= & a * T^3+b * T^2+c * T+ \\ & e * \Delta T^2+f * \Delta T+ \\ & g * T * \Delta T+h \end{aligned} B=a∗T3+b∗T2+c∗T+e∗ΔT2+f∗ΔT+g∗T∗ΔT+h实际使用时,可根据情况在此基础上做减法,去掉一些高阶项。(曲线是二次三次四次都有可能)
在选定的物理模型基础上做最小二乘曲线拟合,与分立级标定时所用最小二乘原理相同。
分段拟合
bias随温度变化曲线多是不规则曲线,无法用一个完整的曲线模型做拟合。
常见的方法是按照温度把曲线分成多个区间,每个区间单独拟合一个模型。
基于神经网络
温补最大的问题是物理模型未知,而神经网络不需要已知物理模型,理论上比较合理。
但是实际使用中,由于很多处理器只是简单的嵌入式板子,运算能力有限,而且多项式方法已经能解决大部分问题,因此这种方法在实际使用中用的不多。(文献有,实际用的不多)