惯性器件内参标定

惯性器件内参标定

1. 概述

标定的本质是参数辨识。首先明确哪些参数可辨识,其次弄清怎样辨识。

参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。

2. 标定参数分析

(1)零偏

**误差解释:**陀螺仪或加速度计输出中的常值偏移,就是输出比输入多了一个常值误差,即常说的bias。

**误差特性:**由于零偏存在不稳定性,因此零偏并不是固定不变的。

**解决办法:**实际使用中,只能一段时间内近似为常值。

需要注意的是,我们之前通过Allan方差分析,得到了器件的量化噪声、角度随机游走、角速率随机游走、零偏不稳定性噪声、速率斜坡,仔细看,这些都是对零偏质量的分析,也可以直观的理解为零偏的波动和漂移程度,这里面并没有分析零偏本身的大小,而这个才是我们标定里要去估计的那个常值误差。

加速度计的零偏表示为
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]

(2)刻度系数误差

误差解释:器件的输出往往为脉冲值或模数转换得到的值,需要乘以一个刻度系数才能转换成角速度或加速度值,若
该系数不准,便存在刻度系数误差,意思就是假设器件输出的是标准单位角速度(rad/s),那么输出和输入的比就是1。如果不是,就得需要标定,修正这个比例。

误差特性:不一定是常值,它会随着输入大小的不同而发生变化,这个就是标度因数的非线性。

解决办法:如果非线性程度比较大,则需要在标定之前先拟合该非线性曲线,并补偿成线性再去做标定。

加速度计的标度因数这里表示如下:
K a = [ K a x K a y K a z ] K_{a}=\left[\begin{array}{ccc} 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}{ccc} K_{g x} & & \\ & K_{g y} & \\ & & K_{g z} \end{array}\right]\\ Kg= KgxKgyKgz

(3)安装误差

**误差解释:**如图所示,b坐标系是正交的imu坐标系,g坐标系的三个轴是分别对应三个陀螺仪。由于加工工艺原因,陀螺仪的三个轴并不正交,而且和b坐标系的轴不重合,二者之间的偏差即为安装误差。

由于加工工艺原因,陀螺仪的三个轴并不正交,和我们导航中使用的正交轴不重合。我们需要仔细想一想,这个安装误差怎么在陀螺输出中体现出来的,因为我们标定时只能采集到陀螺的输出,而无法直接去测量安装误差。理论上,在陀螺坐标轴和b系重合的情况下,我们沿b系某一个坐标轴旋转,那么其他两个轴是不会有角速度输出的,而有了安装误差以后,便有了输出,比如说Yb有一个角速度,如果没有误差的话,那么其他两个角速度为零,如果有安装误差,两个坐标系不重合,那么二者之间有夹角,就会有角速度的分量。以图中一项误差为例,Sgxy表示的就是y轴的角速度,在x陀螺上由安装误差造成的输出,Sgxz就是z轴的角速度,在x陀螺上的安装误差造成的输出。由此,我们可以把所有的安装误差都成矩阵形式。

**误差特性:**实际系统中,由于硬件结构受温度影响,安装误差也会随温度发生变化。

**解决办法:**在不同温度下做标定,补偿温度变化量。

惯性器件内参标定_第1张图片

陀螺仪的安装误差这里表示如下
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

(4)误差模型

通过上面的参数分析,我们已经可以很容易地写出误差模型了。

陀螺仪:
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
其中W是陀螺输出,ω是各坐标轴真实输入。该公式的展开形式为
[ 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}{l} \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}{ccc} 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

3. 标定方法

标定的本质是参数辨识,参数包括陀螺仪和加速度计各自的零偏、刻度系数误差、安装误差。
辨识方法包括:

  1. 解析法或最小二乘
  2. 梯度下降迭代优化
  3. 滤波(Kalman等)

常见标定方法与上面辨识方法的对应关系为:

  1. 分立级标定: 解析法、最小二乘
  2. 半系统级标定: 梯度下降迭代优化
  3. 系统级标定: Kalman滤波、最小二乘

(1) 分立级标定–加速度计标定

在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 g z ] \left[\begin{array}{c} A_{x} \\ A_{y} \\ A_{z} \end{array}\right]=\left[\begin{array}{ccc} 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
误差模型方程为包含12个未知参数的方程组,显然方程组没有唯一解。此时,通过改变输入,构建多个不同方程,

组成的方程组便可求解参数。

以上就是分立级标定方法的思路,具体求解方法包括解析法和最小二乘法

分立级标定的核心:通过旋转IMU,改变其输入构造方程组,并且每个位置对应的加速度输入和角速度输入都必须
是已知的。

构建方程组时,要不仅要方程组数量足够,而且要能够使误差参数可解,即系数矩阵可逆。为了满足这一点,常见的转位方案有六位置、八位置、十二位置等。

在实际使用时,通过判断系数矩阵是否满秩便可判断,理论上,只要转位方案能满足这一条件,就可以使用。

惯性器件内参标定_第2张图片

1)解析法

当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为重力加速度。把它代入到加速度计展开的误差模型,可以得到
{ 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=Saxzg+baxAy=Sayzg+bayAz=Kazg+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=Saxzg+baxAy=Sayzg+bayAz=Kazg+baz
联立这两个方程组,便可解出6个参数。随后,再次改变IMU放置方式,可解其他参数,并且,由此可以看出,转台需要调平。

2)最小二乘法

由于实际标定过程中,在一个位置采集得到的数据会有噪声,并且由于转台控制误差的存在,仅依靠联立两个位置去求解参数的方法精度有限,因此想通过联立更多位置去求解,这就是最小二乘法的目的。

对于加速度计误差模型,我们可以转换一下形式,写成
[ 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 b a x b a y b a z ] \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} \\ b_{ax} \\ b_{ay} \\ b_{az} \end{array}\right]\\ AxAyAz =x KaxKayKazSaxySaxzSayxSayzSazxSazybaxbaybaz
其中
x = [ F I 3 × 3 ] x=\left[\begin{array}{ll} F & I_{3 \times 3} \end{array}\right]\\ x=[FI3×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 ] 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]\\ F= ax000ay000azay00az000ax00az000ax00ay

为了后面书写方便,这种新的模型,可以概括写为
y = x θ y=x \theta\\ y=xθ
转台在每个位置,都可以得到一个这样的方程
y i = x i θ y_{i}=x_{i} \theta\\ yi=xiθ
联立所有的位置,可以得到
Y = X θ Y=X \theta\\ Y=
其中
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}\\ X=\left[\begin{array}{llll} x_{0}^{T} & x_{1}^{T} & \ldots & x_{n}^{T} \end{array}\right]^{T}\\ Y=[y0Ty1TynT]TX=[x0Tx1TxnT]T
最后,参数拟合问题等效为最小二乘问题,其解为:
θ = ( X T X ) − 1 X T Y θ=(X^TX)^{−1}X^TY θ=(XTX)1XTY
这便是待求的标定参数。

(2) 分立级标定–陀螺仪标定

陀螺仪标定与加速度计标定的重要区别:

a. 转台一般角速度不如角度精度高,因此不是直接以角速度作为真值,而是积分得到角度作为真值;

b. 陀螺的输入角速度中,除了转台转动以外,还包括地球自转角速度(地速)。若要消除它的影响,可以把

转台与地理系(东-北-天)对齐,但操作复杂。常见的做法是在构建方程时,让地速自动抵消。

惯性器件内参标定_第3张图片
惯性器件内参标定_第4张图片
惯性器件内参标定_第5张图片
惯性器件内参标定_第6张图片

同理,这里是绕z轴旋转得到x,y的结果,绕x或者y旋转得到z的结果。

(2) 半系统标定

1)标定思路

基于转台的标定方法简单、精度高,但是有一个最大的缺点,就是这个方法太贵了。对于一些低精度的IMU,本身精度不高,那么也就不需要使用这么高精度的标定方法,因此,如果能为这种需求去寻找一些不依赖转台的标定方法,那就再好不过了。

再进一步想下去,好是好,可是怎么实现呢。标定的前提是要有真值,因为我们测量到的是IMU的输入,输入和真值之间的差异是由内参误差引起的,有了真值才能有内参的辨识。自然界天然的真值输入是重力加速度,但是,借助转台的时候,才能知道重力在IMU上的投影是多少,而我们此处想找的是不依赖转台的方法,那怎么搞?其实,不防换一种思路,寻找输入和真值之间得差异,一定需要知道重力在IMU每个轴上的投影是多少吗?当没有内参误差的时候,加速度计三个轴的矢量和必然和重力矢量大小相等,反之,则不等,这不也是找到二者的差异了吗,并且和内参误差建立了联系。

当然,这些只是用文字描述的思路,具体到实现上,还得用数学模型表示。

以下的标定思路、流程是来自于论文:A Robust and Easy to Implement Method for IMU Calibration without External Equipments

并且该文章有对应的开源代码:https://github.com/Kyle-ak/imu_tk

由于符号以及内参模型上有一些差异,因此本文与该论文在表达与公式上会有一些差异,但并不矛盾。

2)内参模型

内参模型不是讲过了吗,为什么还要再讲一次?这就又得费一点口舌了,理解起来可能要费点劲,我希望能讲得明白一些。

回顾基于转台的标定方法,我们定义了12项安装误差,他们表示的是加速度计、陀螺仪的各个敏感轴与IMU的坐标轴(即直角坐标系b系)之间的关系,那这里有一个疑问,b系是怎么来的?或者说,为什么把它规定在现在这个方向,而不是别的方向?此处的意思是指,如果我把一个和现在的b系非常接近,只差0.1°的一个直角坐标系规定为新的b系,有问题吗?好像没什么问题。也就是说b系是可以人为规定的。

在基于转台的标定方法里,IMU的b系其实默认被规定成了和转台的坐标系重合,因为这样转台的输入,才真的是IMU的输入,上面的各种基于转台标定的模型和方法才成立。

而当标定方法脱离转台时,这种约束关系就不存在了,而b系又是可以认为规定的,那么就有一种规定方法,可以简化内参模型。

在规定坐标系时,若令IMU坐标系(b系)的 X b X_b Xb 轴与加速度计的 X a X_a Xa 轴重合,且 X b O Y b X_bOY_b XbOYb X a O Y a X_aOY_a XaOYa 共面(如下图)
惯性器件内参标定_第7张图片

则此时,加速度计的安装误差只剩下三个参数
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
另外,当满足这种关系时,b系就已经完全固定了,因此此时陀螺仪的三个轴和b系之间的安装误差仍为 6 个。

3)加速度计标定

按照前述思路,我们需要建立测量的加速度矢量与重力加速度矢量之间的误差,并以此误差为基础,反推出内参模型中的参数。

按照内参定义,加速度计输出与输入的关系为
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)1Ka1(Aba)
在求解时,逆运算的存在使模型变得复杂,因此使用以下方式进行简化
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}{ccc} 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= KaxKayKaz =Ka1= Kax1Kay1Kaz1
( I + S a ) − 1 ≈ I − S a \left(I+S_{a}\right)^{-1} \approx I-S_{a}\\ (I+Sa)1ISa
简化后的形式为
a = ( I − S a ) K a ′ ( A − b a ) a=\left(I-S_{a}\right) K_{a}^{\prime}\left(A-b_{a}\right)\\ a=(ISa)Ka(Aba)
当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 ∥ 2 = ∥ a ∥ 2 \|\boldsymbol{g}\|^{2}=\|\boldsymbol{a}\|^{2}\\ g2=a2
当内参存在误差时,可写出残差函数为
f ( θ a c c ) = ∥ g ∥ 2 − ∥ a ∥ 2 f\left(\theta^{a c c}\right)=\|\boldsymbol{g}\|^{2}-\|\boldsymbol{a}\|^{2}\\ f(θacc)=g2a2
其中,
θ 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]
表示待估计的内参。

有了模型,接下来就是参数的辨识了,此处采用的是高斯牛顿法进行辨识,这里不会高斯牛顿法的一些基础知识进行展开,各位可以自行搜索一些资料去了解。暂时不懂的,也不影响理解,我们只需要知道,有了残差函数以及残差对代估参数的雅可比之后,便可以进行优化,求解出参数,残差函数,我们已经给出了,雅可比指的是残差函数对 θ a c c \boldsymbol{\theta}^{a c c} θacc 中的每一项求偏倒,这都是一些基本的技能,也不详细展开了。

最后,需要注意的是,由于待求解参数很多,而只静止在一个位置是无法求解出全部参数的,因为解不唯一,这和基于转台标定中,要用多个方程联立求解参数的本质是一样的,只是此处的方程不一样,辨识方法也不一样。

4)陀螺仪标定

陀螺仪标定在加速度计标定之后进行,因此在这一步,可以认为加速度计是无误差的。另外,在这种方法中,我们并不使用优化的方式标定陀螺仪的零偏,主要原因还是因为零偏造成的影响偏小,标不准。而且零偏的标定,可以使用前述静止的方法去求解,简单易行。因此,此处陀螺仪的待估参数为
θ gyro  = [ 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}^{\text {gyro }}=\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]
在上面图形所以的IMU多位置放置方案中,令 u a , k \boldsymbol{u}_{a, k} ua,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 个位置对应的IMU坐标系的转换矩阵。需要注意的是,我们并不需要知道 R b k w R_{b_{k} w} Rbkw是多少 ,因为 u a , k \boldsymbol{u}_{a, k} ua,k 是直接测量的。

在第 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 个位置,到第 k+1 个位置,可以根据陀螺仪测量计算出两个位置之间的相对旋转 R b k + 1 b k R_{b_{k+1} b_{k}} Rbk+1bk (这里需要用到惯性导航解算的知识,这个会在后面的文章中介绍,此处仅需要知道它能实现这样计算就行),根据该旋转可以算出一个第 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+1ug,k+1
有了残差,就可以同样使用高斯牛顿方法去进行求解了

原文链接:多传感器融合定位理论基础(四):IMU内参模型及标定

你可能感兴趣的:(多传感器融合,ubuntu)