为了求出连续时间的变化量,所以要求出连续时间误差量的变化量的导数,因为是误差卡尔曼滤波,所以是对误差量进行求导。
而实际系统的数据肯定是离散的。
现在要根据前面连续时间的方程推导出离散下的变化
上一节的方程的简洁表达式为 Δ x ˙ = F t ⋅ Δ x + G t ⋅ n t \dot{Δx}=F_{t}·Δx+G_{t}·n_{t} Δx˙=Ft⋅Δx+Gt⋅nt , Δ x ∈ 15 × 1 , F t ∈ 15 × 15 , G t ∈ 15 × 12 , n t ∈ 12 × 1 Δx∈15×1,F_{t}∈15×15,G_{t}∈15×12,n_{t}∈12×1 Δx∈15×1,Ft∈15×15,Gt∈15×12,nt∈12×1
只有连续的才可以求导,离散的是无法求导的,现在要求出离散时间下的变化关系是什么, 即 Δ x k Δx_{k} Δxk 与 Δ x k + 1 Δx_{k+1} Δxk+1 之间的变化关系是什么,在已知 Δ x k Δx_{k} Δxk 的情况下推导出 Δ x k + 1 Δx_{k+1} Δxk+1
导数的定义
f
(
x
+
Δ
x
)
=
f
(
x
)
+
J
(
x
)
⋅
Δ
x
f(x+Δx)=f(x)+J(x)·Δx
f(x+Δx)=f(x)+J(x)⋅Δx
Δ
x
Δx
Δx 同样适用
=
>
Δ
x
k
+
1
=
Δ
x
k
+
Δ
x
˙
⋅
Δ
t
=>Δx_{k+1}=Δx_{k}+\dot{Δx}·Δt
=>Δxk+1=Δxk+Δx˙⋅Δt,把
Δ
x
˙
=
F
t
⋅
Δ
x
+
G
t
⋅
n
t
\dot{Δx}=F_{t}·Δx+G_{t}·n_{t}
Δx˙=Ft⋅Δx+Gt⋅nt 代入得
=
>
Δ
x
k
+
1
=
Δ
x
k
+
(
F
t
⋅
Δ
x
+
G
t
⋅
n
t
)
⋅
Δ
t
=>Δx_{k+1}=Δx_{k}+(F_{t}·Δx+G_{t}·n_{t})·Δt
=>Δxk+1=Δxk+(Ft⋅Δx+Gt⋅nt)⋅Δt 这里的
Δ
x
˙
\dot{Δx}
Δx˙仍然是连续时间的导数
=
>
Δ
x
k
+
1
=
(
I
+
F
t
Δ
t
)
⋅
Δ
x
k
+
G
t
⋅
Δ
t
⋅
n
t
=>Δx_{k+1}=(I+F_{t}Δt)·Δx_{k}+G_{t}·Δt·n_{t}
=>Δxk+1=(I+FtΔt)⋅Δxk+Gt⋅Δt⋅nt 这里面把
Δ
x
Δx
Δx 近似成了
Δ
x
k
Δx_{k}
Δxk 后面会详细推导这个近似的过程
由于中值积分的原因,
n
t
∈
[
n
a
k
n
w
k
n
a
k
+
1
n
w
k
+
1
n
b
a
n
b
w
]
∈
18
×
1
n_{t}∈\begin{bmatrix} n_{ak} \\ n_{wk} \\ n_{ak+1}\\ n_{wk+1}\\ n_{ba}\\ n_{bw}\\ \end{bmatrix}∈18×1
nt∈
naknwknak+1nwk+1nbanbw
∈18×1 ,这里面认为零偏是不会变化的,所以没有k+1时刻的零偏的噪声,零偏的导数就是高斯噪声。
其中
Δ
x
k
+
1
∈
15
×
1
,
(
I
+
F
t
Δ
t
)
∈
15
×
15
,
Δ
x
k
∈
15
×
1
,
G
t
⋅
Δ
t
∈
15
×
18
Δx_{k+1}∈15×1,(I+F_{t}Δt)∈15×15,Δx_{k}∈15×1,G_{t}·Δt∈15×18
Δxk+1∈15×1,(I+FtΔt)∈15×15,Δxk∈15×1,Gt⋅Δt∈15×18
上述方程的矩阵具体形式如下:
上面可以表示为
Δ
x
k
+
1
=
F
⋅
Δ
x
k
+
G
⋅
n
k
Δx_{k+1}=F·Δx_{k}+G·n_{k}
Δxk+1=F⋅Δxk+G⋅nk
表示为从
Δ
x
k
Δx_{k}
Δxk 时刻的误差转移到
Δ
x
k
+
1
Δx_{k+1}
Δxk+1 时刻的误差,代码中也是构造 F ,G矩阵
接下来将对每一项进行推导
离散时间角度误差推导
先列出连续时间积分的角度的导数
Δ
θ
˙
=
−
(
w
^
t
−
b
w
t
)
^
Δ
θ
−
n
w
−
Δ
b
w
t
\dot{Δθ}=-(\hat{w}_{t}-b_{wt})^{\hat{}}Δθ-n_{w}-Δb_{wt}
Δθ˙=−(w^t−bwt)^Δθ−nw−Δbwt
根据导数的定义
Δ
θ
k
+
1
=
Δ
θ
k
+
Δ
θ
˙
⋅
Δ
t
Δθ_{k+1}=Δθ_{k}+\dot{Δθ}·Δt
Δθk+1=Δθk+Δθ˙⋅Δt
然后把
Δ
θ
˙
\dot{Δθ}
Δθ˙ 代入
=
>
Δ
θ
k
+
1
=
Δ
θ
k
−
[
(
w
^
t
−
b
w
t
)
^
Δ
θ
+
n
w
+
Δ
b
w
t
]
⋅
Δ
t
=>Δθ_{k+1}=Δθ_{k}-[(\hat{w}_{t}-b_{wt})^{\hat{}}Δθ+n_{w}+Δb_{wt}]·Δt
=>Δθk+1=Δθk−[(w^t−bwt)^Δθ+nw+Δbwt]⋅Δt
通过中值积分来近似表达
w
t
w_{t}
wt 和
n
w
n_{w}
nw
=
>
Δ
θ
k
+
1
=
Δ
θ
k
−
[
(
(
w
k
+
w
k
+
1
2
)
−
b
w
t
)
^
Δ
θ
k
+
n
w
+
Δ
b
w
t
]
⋅
Δ
t
=>Δθ_{k+1}=Δθ_{k}-[((\frac{w_{k}+w_{k+1}}{2})-b_{wt})^{\hat{}}Δθ_{k}+n_{w}+Δb_{wt}]·Δt
=>Δθk+1=Δθk−[((2wk+wk+1)−bwt)^Δθk+nw+Δbwt]⋅Δt
整理一下
=
>
[
I
−
(
w
k
+
w
k
+
1
2
−
b
w
)
^
⋅
Δ
t
]
⋅
Δ
θ
k
−
Δ
t
⋅
n
w
k
+
n
w
k
+
1
2
−
Δ
t
⋅
Δ
b
w
=>[I-(\frac{w_{k}+w_{k+1}}{2}-b_{w})^{\hat{}}·Δt]·Δθ_{k}-Δt·\frac{n_{wk}+n_{wk+1}}{2}-Δt·Δb_{w}
=>[I−(2wk+wk+1−bw)^⋅Δt]⋅Δθk−Δt⋅2nwk+nwk+1−Δt⋅Δbw 这个对应
f
11
f_{11}
f11
离散时间速度误差推导
先列出连续时间积分的速度的导数
Δ
β
˙
=
−
R
t
(
a
^
−
b
a
t
)
^
Δ
θ
−
R
t
Δ
b
a
t
−
R
t
n
a
\dot{Δβ}=-R_{t}(\hat{a}-b_{at})^{\hat{}}Δθ-R_{t}Δb_{at}-R_{t}n_{a}
Δβ˙=−Rt(a^−bat)^Δθ−RtΔbat−Rtna
根据导数的定义
Δ
β
k
+
1
=
Δ
β
k
+
Δ
β
˙
⋅
Δ
t
Δβ_{k+1}=Δβ_{k}+\dot{Δβ}·Δt
Δβk+1=Δβk+Δβ˙⋅Δt
把
Δ
β
˙
\dot{Δβ}
Δβ˙ 代入
=
>
Δ
β
k
+
1
=
Δ
β
k
−
[
R
t
(
a
^
−
b
a
t
)
^
Δ
θ
+
R
t
Δ
b
a
t
+
R
t
n
a
]
⋅
Δ
t
=>Δβ_{k+1}=Δβ_{k}-[R_{t}(\hat{a}-b_{at})^{\hat{}}Δθ+R_{t}Δb_{at}+R_{t}n_{a}]·Δt
=>Δβk+1=Δβk−[Rt(a^−bat)^Δθ+RtΔbat+Rtna]⋅Δt
然后用中值积分近似
R
t
,
a
k
,
θ
k
R_{t},a_{k},θ_{k}
Rt,ak,θk
=
>
Δ
β
k
+
1
=
Δ
β
k
−
[
1
2
[
R
k
(
a
k
−
b
a
)
^
Δ
θ
k
+
R
k
+
1
(
a
k
+
1
−
b
a
)
^
Δ
θ
k
+
1
]
+
1
2
(
R
k
+
R
k
+
1
)
⋅
Δ
b
a
+
1
2
(
R
k
n
k
+
R
k
+
1
n
k
+
1
)
]
⋅
Δ
t
=>Δβ_{k+1}=Δβ_{k}-[\frac{1}{2}[R_{k}(a_{k}-b_{a})^{\hat{}}Δθ_{k}+R_{k+1}(a_{k+1}-b_{a})^{\hat{}}Δθ_{k+1}]+\frac{1}{2}(R_{k}+R_{k+1})·Δb_{a}+\frac{1}{2}(R_{k}n_{k}+R_{k+1}n_{k+1})]·Δt
=>Δβk+1=Δβk−[21[Rk(ak−ba)^Δθk+Rk+1(ak+1−ba)^Δθk+1]+21(Rk+Rk+1)⋅Δba+21(Rknk+Rk+1nk+1)]⋅Δt
上面包含了 Δ θ k + 1 Δθ_{k+1} Δθk+1 ,然后把上面刚刚推导的 Δ θ k + 1 = [ I − ( w k + w k + 1 2 − b w ) ^ ⋅ Δ t ] ⋅ Δ θ k − Δ t ⋅ n w k + n w k + 1 2 − Δ t ⋅ Δ b w Δθ_{k+1}=[I-(\frac{w_{k}+w_{k+1}}{2}-b_{w})^{\hat{}}·Δt]·Δθ_{k}-Δt·\frac{n_{wk}+n_{wk+1}}{2}-Δt·Δb_{w} Δθk+1=[I−(2wk+wk+1−bw)^⋅Δt]⋅Δθk−Δt⋅2nwk+nwk+1−Δt⋅Δbw 代入进去,剩下的就是整理归纳系数了,自己归纳一下就能得到上面对应的值了
离散时间位置误差推导
连续时间下位置的导数
Δ
α
˙
=
Δ
β
\dot{Δα}=Δβ
Δα˙=Δβ
根据导数的定义
Δ
α
k
+
1
=
Δ
α
k
+
Δ
α
˙
⋅
Δ
t
Δα_{k+1}=Δα_{k}+\dot{Δα}·Δt
Δαk+1=Δαk+Δα˙⋅Δt
代入
Δ
α
˙
=
Δ
β
\dot{Δα}=Δβ
Δα˙=Δβ
=
>
Δ
α
k
+
1
=
Δ
α
k
+
Δ
β
⋅
Δ
t
=>Δα_{k+1}=Δα_{k}+Δβ·Δt
=>Δαk+1=Δαk+Δβ⋅Δt
根据中值积分
=
>
Δ
α
k
+
1
=
Δ
α
k
+
Δ
β
k
+
Δ
β
k
+
1
2
⋅
Δ
t
=>Δα_{k+1}=Δα_{k}+\frac{Δβ_{k}+Δβ_{k+1}}{2}·Δt
=>Δαk+1=Δαk+2Δβk+Δβk+1⋅Δt
然后把上面的
Δ
β
k
+
1
=
Δ
β
k
−
[
1
2
[
R
k
(
a
k
−
b
a
)
^
Δ
θ
k
+
R
k
+
1
(
a
k
+
1
−
b
a
)
^
Δ
θ
k
+
1
]
+
1
2
(
R
k
+
R
k
+
1
)
⋅
Δ
b
a
+
1
2
(
R
k
n
k
+
R
k
+
1
n
k
+
1
)
]
⋅
Δ
t
Δβ_{k+1}=Δβ_{k}-[\frac{1}{2}[R_{k}(a_{k}-b_{a})^{\hat{}}Δθ_{k}+R_{k+1}(a_{k+1}-b_{a})^{\hat{}}Δθ_{k+1}]+\frac{1}{2}(R_{k}+R_{k+1})·Δb_{a}+\frac{1}{2}(R_{k}n_{k}+R_{k+1}n_{k+1})]·Δt
Δβk+1=Δβk−[21[Rk(ak−ba)^Δθk+Rk+1(ak+1−ba)^Δθk+1]+21(Rk+Rk+1)⋅Δba+21(Rknk+Rk+1nk+1)]⋅Δt 代入进去
里面把
Δ
β
k
,
Δ
θ
k
Δβ_{k},Δθ_{k}
Δβk,Δθk 提取出来 ,然后还是基础的系数归纳
离散时间零偏误差推导
连续时间零偏的求导
Δ
b
a
˙
=
n
b
a
\dot{Δb_{a}}=n_{ba}
Δba˙=nba
根据导数的定义
Δ
b
a
k
+
1
=
Δ
b
a
k
+
n
b
a
Δ
t
Δb_{ak+1}=Δb_{ak}+n_{ba}Δt
Δbak+1=Δbak+nbaΔt
陀螺仪的也是一样的
Δ
b
w
k
+
1
=
Δ
b
w
k
+
n
b
w
Δ
t
Δb_{wk+1}=Δb_{wk}+n_{bw}Δt
Δbwk+1=Δbwk+nbwΔt