相關源碼請參考開源飛控StarryPilot:https://github.com/JcZou/StarryPilot
对于无人机的惯性导航系统,系统的状态方程是非线性的,根据扩展卡尔曼滤波方程:
Predict
Update
其中状态和观测矩阵为状态和观测函数的雅可比矩阵:
雅可比矩阵具体的含义可以参看Wiki: 雅可比矩阵
首先需要确定 f f 和。这里介绍两种形式的状态函数,第一种是不包含哥式校正(即不考虑地球自转以及无人机绕地球的速度所产生的向心加速度),一种是包含哥式校正的。这篇文章先介绍不包含哥式校正的EKF,包含哥式校正的将在下一篇文章介绍。
首先介绍各参数定义:
L
L
:纬度,单位:
l
l
:经度,单位:
h
h
:高度,单位:
vN
v
N
:朝北速度,单位:
m/s
m
/
s
vE
v
E
:朝东速度,单位:
m/s
m
/
s
vD
v
D
:朝地速度,单位:
m/s
m
/
s
R0
R
0
:地球平均半径
Tx
T
x
:x转换算子,用于将南北向位移量转化为纬度变化量,
Tx=180∗107πR0
T
x
=
180
∗
10
7
π
R
0
(假设在近地面飞行,忽略高度对半径的影响。如要考虑,则分母变为
π(R0+h)
π
(
R
0
+
h
)
)
Ty
T
y
:y转换算子,用于将朝东西向位移量转化为经度变化量,
Ty=180∗107πR0sin(90−L∗10−7)=180∗107∗sec(L∗10−7)πR0
T
y
=
180
∗
10
7
π
R
0
sin
(
90
−
L
∗
10
−
7
)
=
180
∗
10
7
∗
sec
(
L
∗
10
−
7
)
π
R
0
(同样假设在近地面飞行)
T
T
:时间间隔,单位:
aN
a
N
:朝北加速度,单位:
m/t2
m
/
t
2
aE
a
E
:朝东加速度,单位:
m/t2
m
/
t
2
aD
a
D
:朝地加速度,已做gravity corectify,即有加上重力常量g,单位:
m/t2
m
/
t
2
其中, x^=[LlhvNvEvD] x ^ = [ L l h v N v E v D ] , u=[aNaEaD] u = [ a N a E a D ] .
由于状态的观测量可以由传感器直接获取到,所以 h h 的定义如下:
根据雅可比矩阵定义,计算得状态和观测矩阵如下:
Matlab仿真效果