速度合成公式:
v
i
=
v
i
b
i
+
w
i
b
i
×
r
i
+
R
i
b
v
b
v^i = v_{ib}^i + w_{ib}^i \times r^i +R_{ib}v^b
vi=vibi+wibi×ri+Ribvb
加速度合成公式:
a
i
=
w
˙
i
b
i
×
r
i
⏟
欧拉力
+
w
i
b
i
×
(
w
i
b
i
×
r
i
)
⏟
离心力
+
2
w
i
b
i
×
v
i
⏟
科氏力
+
R
i
b
a
b
a^i = \underbrace{\dot{w}_{ib}^i \times r^i}_{欧拉力} + \underbrace{w_{ib}^i \times (w_{ib}^i \times r^i)}_{离心力} + \underbrace{2w_{ib}^i \times v^i}_{科氏力} + R_{ib}a^b
ai=欧拉力
w˙ibi×ri+离心力
wibi×(wibi×ri)+科氏力
2wibi×vi+Ribab
1)加速度计
2)陀螺仪
1)确定性误差
零偏(Bias):IMU传感器在完全静止状态下存在的非零输出值
尺度因子(Scale): IMU传感器自身尺度不准引起的测量误差
不垂直度(Nonorothogonality):IMU传感器中由于各轴安装不垂直引起的误差
2)随机误差
高斯白噪声:均值为 0 ,方差为
σ
\sigma
σ 的独立高斯过程
n
(
t
)
∼
(
0
,
σ
)
n(t) \sim (0, \sigma)
n(t)∼(0,σ)
bias随机游走
3)高斯白噪声的离散积分
离散状态下的高斯白噪声
n
(
t
)
n(t)
n(t) 服从如下分布:
n
d
(
k
)
∼
N
(
0
,
σ
2
Δ
t
)
n_d(k)\sim N(0, \frac{\sigma^2}{\Delta t})
nd(k)∼N(0,Δtσ2)
离散方差
σ
d
\sigma_d
σd :
σ
d
=
σ
Δ
t
\sigma_d = \frac{\sigma}{\sqrt{\Delta t}}
σd=Δtσ
高斯白噪声的连续时间到离散时间之间差
1
Δ
t
\frac{1}{\sqrt{\Delta t}}
Δt1, 其中
Δ
t
\Delta t
Δt 为传感器的采样时间
4)零偏的离散积分
已知:
b
(
t
)
˙
=
n
(
t
)
=
σ
b
w
(
t
)
\dot{b(t)} = n(t) = \sigma_b w(t)
b(t)˙=n(t)=σbw(t)
所以可以得到离散状态下零偏符合分布:
b
d
(
k
)
∼
N
(
b
d
(
k
−
1
)
,
Δ
t
σ
b
2
)
b_d(k) \sim N(b_d(k-1), \Delta t \sigma_b^2)
bd(k)∼N(bd(k−1),Δtσb2)
bias 随机游走的噪声方差从连续时间到连续时间之间需要乘以 Δ t \sqrt{\Delta t} Δt
Allan 方差标定
(1)加速度计
导航系G为东北天, g G = ( 0 , 0 , − 9.81 ) T g^G = (0, 0, -9.81)^T gG=(0,0,−9.81)T
理论测量值:
a
m
B
=
R
B
G
(
a
G
−
g
G
)
a_m^B = R_{BG}(a^G-g^G)
amB=RBG(aG−gG)
考虑高斯白噪声,bias,以及尺度因子
a
m
B
=
S
a
R
B
G
(
a
G
−
g
G
)
+
n
a
+
b
a
a_m^B = S_aR_{BG}(a^G-g^G) + n_a + b_a
amB=SaRBG(aG−gG)+na+ba
(2)陀螺仪
考虑高斯白噪声,bias,以及尺度因子
w
m
B
=
S
g
w
B
+
n
g
+
b
g
w_m^B = S_gw^B + n_g+b_g
wmB=SgwB+ng+bg
忽略scale,只考虑白噪声和bias随机游走:
w
~
b
=
w
b
+
b
g
+
n
g
\widetilde{w}^b = w^b+b^g+n^g
w
b=wb+bg+ng
a ~ b = q b w ( a w + g w ) + b a + n a \widetilde{a}^b = q_{bw}(a^w+g^w)+b^a+n^a a b=qbw(aw+gw)+ba+na
上标g表示陀螺仪,a表示加速度计,w表示世界坐标系,b表示IMU机体坐标系。IMU真实值 w , a w,a w,a, 测量值 w ~ \widetilde{w} w , a ~ \widetilde{a} a
(1)欧拉法
a
=
q
w
b
k
(
a
b
k
−
b
k
a
)
−
g
w
a = q_{wb_k} (a^{b_k} - b^a_k ) -g^w
a=qwbk(abk−bka)−gw
w = w b k − b k g w=w^{b_k} - b_k^g w=wbk−bkg
(2)中值法
a
=
1
2
[
q
w
b
k
(
a
b
k
−
b
k
a
)
−
g
w
+
q
w
b
k
+
1
(
a
b
k
+
1
−
b
k
a
)
−
g
w
]
a= \frac{1}{2} [q_{wb_k}(a^{b_k} - b^a_k ) - g^w + q_{wb_{k+1}}(a^{b_{k+1}} - b^a_k ) - g^w]
a=21[qwbk(abk−bka)−gw+qwbk+1(abk+1−bka)−gw]
w = 1 2 [ ( w b k − b k g ) + ( w b k + 1 − b k g ) ] w = \frac{1}{2} [(w^{b_k} - b_k^g) + (w^{b_{k+1}} - b_k^g)] w=21[(wbk−bkg)+(wbk+1−bkg)]
// imu 动力学模型 欧拉积分
Eigen::Vector3d acc_w = Qwb * (imupose.imu_acc) + gw; // aw = Rwb * ( acc_body - acc_bias ) + gw
Qwb = Qwb * dq;
Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;
Vw = Vw + acc_w * dt;
// 中值积分
Eigen::Vector3d acc_w = Qwb * (imupose.imu_acc) + gw;
Qwb = Qwb * dq;
Eigen::Vector3d acc_w1 = Qwb * (imupose.imu_acc) + gw;
acc_w = 0.5 * (acc_w + acc_w1);
Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;
Vw = Vw + acc_w * dt;