PSINS惯性系初始对准与代码解读
码字不易,转载请注明出处
0.前言
严恭敏老师的开源代码库psins中,惯性系对准代码alingi0与《捷联惯导与组合导航》一书理论部分并没有严格对应,相应的资料也不太好找,学习中废了挺多脑筋。
本文参考“摇摆基座上基于信息的捷联惯导粗对准研究”(秦永元),以及“严恭敏博士后研究报告”,详细解读并推导了静基座惯性系对准算法,并与PSINS代码进行对照解读。希望能对惯导初学者有所帮助,同时也欢迎各位大佬雅正。
1.坐标系定义
-
地心惯性坐标系( i i i系):
o x i ox_i oxi轴在赤道平面内且指向春分点, o z i oz_i ozi轴指向地球自转方向,三轴构成右手坐标系; -
地球坐标系( e e e系):
o x e ox_e oxe轴在赤道平面内且指向中央子午线, o z e oz_e oze轴沿地球自转方向,三轴构成右手坐标系,e系与地球固连,e系相对于i系的转动角速率即为地球自转角速率 ; -
导航坐标系( n n n系):
选取“东-北-天( E − N − U E-N-U E−N−U)”坐标系为导航坐标系( n n n系); -
载体坐标系( b b b系):
定义“右-前-上( R − F − U R-F-U R−F−U)”坐标系为捷联惯导坐标系( b b b系),或称之为运载体坐标系; -
初始时刻惯性坐标系( i 0 i_0 i0系):
在初始对准起始时刻(即当 t = t 0 = 0 t=t_0=0 t=t0=0 时), o x i 0 ox_{i_0} oxi0轴在当地子午面内且平行于赤道平面, o z i 0 oz_{i_0} ozi0轴指向地球自转方向,三轴构成右手坐标系,初始对准开始后 i 0 i_0 i0系三轴方向相对惯性空间保持不动; -
初始时刻地球坐标系( e 0 e_0 e0系):
原点为地球中心, o x e 0 ox_{e_0} oxe0轴在赤道平面内且指向初始对准开始时刻的当地子午线, o z e 0 oz_{e_0} oze0沿地球自转方向,三轴构成右手坐标系, e 0 e_0 e0系也与地球固连,并且 e 0 e_0 e0系与 i 0 i_0 i0系之间方位关系是前者只绕后者的 o z i 0 oz_{i_0} ozi0轴转动了 ω i e t {\omega}_{ie}t ωiet角度; -
初始时刻导航坐标系( n 0 n_0 n0系):
把初始对准开始时刻的导航坐标系定义为 n 0 n_0 n0系,它相对地球表面固定不动,即不随捷联惯导在地球表面运动而运动; -
初始时刻捷联惯导惯性坐标系( i b 0 i_b0 ib0系):
在 t 0 t_0 t0时刻 i b 0 i_{b_0} ib0系重合于b系,初始对准开始后 i b 0 i_{b0} ib0 系不随捷联惯导转动,即在惯性空间中保持指向不变。
2.传统解析式对准算法
静基座下即捷联惯组静止不动时,加速度计的比力输出
f
~
s
f
b
\tilde{f}^b_{sf}
f~sfb测量的是重力加速度矢量
g
g
g在b系中的投影
−
g
b
-g^b
−gb,陀螺角速度输出
b
~
i
b
b
\tilde{b}^b_{ib}
b~ibb测量的是地球自转角速度矢量
ω
i
e
{\omega}_{ie}
ωie在b系中的投影
ω
i
e
b
{\omega}^b_{ie}
ωieb。当对准地点的地理位置准确已知时,物理量
g
g
g和
ω
i
e
{\omega}_{ie}
ωie在n系中的投影
g
n
g^n
gn和
ω
i
e
n
{\omega}^n_{ie}
ωien也是已知的。由姿态矩阵
C
b
n
C^n_b
Cbn可建立如下两个转换关系式:
−
f
~
s
f
b
=
C
n
b
g
n
ω
~
i
b
b
=
C
n
b
ω
i
e
n
\begin{aligned} -\tilde{f}^b_{sf}=&C^b_ng^n \\ \tilde{\omega}^b_{ib}=&C^b_n{\omega}^n_{ie} \end{aligned}
−f~sfb=ω~ibb=CnbgnCnbωien式中
[
0
0
−
g
]
T
\begin{bmatrix}0&0&-g\end{bmatrix}^T
[00−g]T,g为重力加速度大小;
ω
i
e
n
=
[
0
ω
i
e
c
o
s
L
ω
i
e
s
i
n
L
]
T
{\omega}^n_{ie}=\begin{bmatrix}0&{\omega}_{ie}cosL&{\omega}_{ie}sinL\end{bmatrix}^T
ωien=[0ωiecosLωiesinL]T,L是当地地理纬度,
ω
i
e
{\omega}_{ie}
ωie是地球自转角速度。通过公式(1)可求出得初始对准姿态矩阵
C
b
n
C^n_b
Cbn1。
C b n = [ ( g n ) T ( g n × ω i e ) T ( g n × ω i e × g n ) T ] − 1 [ ( − f ~ s f b ) T ( − f ~ s f b × ω ~ i b b ) T ( f ~ s f b × ω ~ i b b × f ~ s f b ) T ] (1) C^n_b= \begin{bmatrix} (g^n)^T\\ (g^n\times{\omega}_{ie})^T\\ (g^n\times{\omega}_{ie}\times g^n)^T \end{bmatrix}^{-1} \begin{bmatrix} (-\tilde{f}^b_{sf})^T\\ (-\tilde{f}^b_{sf}\times\tilde{\omega}^b_{ib})^T\\ (\tilde{f}^b_{sf}\times\tilde{\omega}^b_{ib}\times \tilde{f}^b_{sf})^T \end{bmatrix} \tag{1} Cbn= (gn)T(gn×ωie)T(gn×ωie×gn)T −1 (−f~sfb)T(−f~sfb×ω~ibb)T(f~sfb×ω~ibb×f~sfb)T (1)
3.惯性系初始对准:
秦永元老师在论文中指出,上述对准方法仅适用于微小晃动的对准环境2 ,而惯性系对准的基本思想是,从惯性坐标系观察地球表面上某固定点的重力矢量,通过在不同时间对重力矢量的观测,进行双/多矢量定姿。该方法具备极强的抗角运动能力。非常适用于线运动不强但角运动明显的场景。
虽然原理如上所述,但PSINS的代码实现与书中1 并不完全一致,现按照PSINS代码的算法编排,推导如下:
3.1.基本原理:
将姿态矩阵作如下分解,分别求出各个变换关系然后组合。
C
b
n
=
C
e
n
C
i
e
C
i
b
0
i
C
b
i
b
0
(2)
C^n_b=C^n_eC^e_iC^i_{i_{b_0}}C^{i_{b_0}}_b\tag{2}
Cbn=CenCieCib0iCbib0(2)
下面分步推导涉及的变换矩阵
3.2. C e n C^n_e Cen:地球坐标系(e)到导航坐标系(n)的转换矩阵
从e系到n系的转换可分为两个步骤:
1、沿Z轴逆时针旋转
90
+
λ
90+\lambda
90+λ,使X轴和East轴重合。
2、沿East轴(新X轴)逆时针旋转
90
−
φ
90-\varphi
90−φ ,使Z轴和UP轴重合。
以上旋转即:
[
x
y
z
]
=
R
3
[
−
(
π
/
2
+
λ
)
]
R
1
[
−
(
π
/
2
−
φ
)
]
\begin{bmatrix} x\\ y\\ z \end{bmatrix}=R_3[-(\pi/2+\lambda)]R_1[-(\pi/2-\varphi)]
xyz
=R3[−(π/2+λ)]R1[−(π/2−φ)]
其中
R
1
[
θ
]
=
[
1
0
0
0
c
o
s
(
θ
)
s
i
n
(
θ
)
0
−
s
i
n
(
θ
)
c
o
s
(
θ
)
]
;
R
2
[
θ
]
=
[
c
o
s
(
θ
)
0
s
i
n
(
θ
)
0
1
0
−
s
i
n
(
θ
)
0
c
o
s
(
θ
)
]
R
3
[
θ
]
=
[
c
o
s
(
θ
)
s
i
n
(
θ
)
0
−
s
i
n
(
θ
)
c
o
s
(
θ
)
0
0
0
1
]
\begin{aligned} &R_1[\theta]= \begin{bmatrix} 1&0&0\\ 0&cos(\theta)&sin(\theta)\\ 0&-sin(\theta)&cos(\theta) \end{bmatrix}; R_2[\theta]= \begin{bmatrix} cos(\theta)&0&sin(\theta)\\ 0&1&0\\ -sin(\theta)&0&cos(\theta) \end{bmatrix}\\ &R_3[\theta]= \begin{bmatrix} cos(\theta)&sin(\theta)&0\\ -sin(\theta)&cos(\theta)&0\\ 0&0&1 \end{bmatrix} \end{aligned}
R1[θ]=
1000cos(θ)−sin(θ)0sin(θ)cos(θ)
;R2[θ]=
cos(θ)0−sin(θ)010sin(θ)0cos(θ)
R3[θ]=
cos(θ)−sin(θ)0sin(θ)cos(θ)0001
带入得:
R
3
[
−
(
π
/
2
+
λ
)
]
R
1
[
−
(
π
/
2
−
φ
)
]
=
(
−
s
i
n
(
λ
)
c
o
s
(
λ
)
0
−
c
o
s
(
λ
)
s
i
n
(
φ
)
−
s
i
n
(
λ
)
s
i
n
(
φ
)
c
o
s
(
φ
)
c
o
s
(
λ
)
c
o
s
(
φ
)
s
i
n
(
λ
)
c
o
s
(
φ
)
s
i
n
(
φ
)
)
(3)
R_3[-(\pi/2+\lambda)]R_1[-(\pi/2-\varphi)]= \begin{pmatrix} -sin(\lambda)&cos(\lambda)&0\\ -cos(\lambda)sin(\varphi)&-sin(\lambda)sin(\varphi)&cos(\varphi)\\ cos(\lambda)cos(\varphi)&sin(\lambda)cos(\varphi)&sin(\varphi)\tag{3} \end{pmatrix}
R3[−(π/2+λ)]R1[−(π/2−φ)]=
−sin(λ)−cos(λ)sin(φ)cos(λ)cos(φ)cos(λ)−sin(λ)sin(φ)sin(λ)cos(φ)0cos(φ)sin(φ)
(3)
通常,e系的x轴是指向n系原点所在子午线与赤道交点的,即
λ
=
0
\lambda=0
λ=0代入(3)可得:
C
e
n
=
R
3
[
−
(
π
/
2
)
]
R
1
[
−
(
π
/
2
−
φ
)
]
=
(
0
1
0
−
s
i
n
(
φ
)
0
c
o
s
(
φ
)
c
o
s
(
φ
)
0
s
i
n
(
φ
)
)
(4)
C^n_e= R_3[-(\pi/2)]R_1[-(\pi/2-\varphi)]= \begin{pmatrix} 0&1&0\\ -sin(\varphi)&0&cos(\varphi)\\ cos(\varphi)&0&sin(\varphi)\tag{4} \end{pmatrix}
Cen=R3[−(π/2)]R1[−(π/2−φ)]=
0−sin(φ)cos(φ)1000cos(φ)sin(φ)
(4)
3.3. C i e C^e_i Cie:地球坐标系(e)到惯性系(i)的转换矩阵
e系相对i系是沿z轴的定轴转动,转动角度为
ω
i
e
⋅
t
{\omega}_{ie}\cdot t
ωie⋅t旋转矩阵为:
C
i
e
=
[
c
o
s
ω
i
e
⋅
t
s
i
n
ω
i
e
⋅
t
0
−
s
i
n
ω
i
e
⋅
t
c
o
s
ω
i
e
⋅
t
0
0
0
1
]
(5)
C^e_i= \begin{bmatrix} cos{\omega}_{ie}\cdot t&sin{\omega}_{ie}\cdot t&0\\ -sin{\omega}_{ie}\cdot t&cos{\omega}_{ie}\cdot t&0\\ 0&0&1\tag{5} \end{bmatrix}
Cie=
cosωie⋅t−sinωie⋅t0sinωie⋅tcosωie⋅t0001
(5)
3.4. C b i b 0 C^{i_{b_0}}_b Cbib0:初始捷联惯导惯性系( i b 0 i_{b_0} ib0)到捷联惯导坐标系(b)的转换矩阵
初始时刻两个坐标系是重合的,即
C
b
i
b
0
(
t
=
0
)
=
I
C_b^{i_{b_0}} (t=0)=I
Cbib0(t=0)=I,之后利用陀螺输出的角运动信息,通过捷联惯导姿态更新算法(下式)可以很容易实时求得矩阵
C
b
i
b
0
(
t
)
C_b^{i_{b_0}} (t)
Cbib0(t):
C
˙
t
i
b
0
(
t
)
=
C
b
i
b
0
(
t
)
[
ω
i
0
b
b
(
t
)
×
]
(6)
\dot C_t^{i_{b_0}}(t)=C_b^{i_{b_0}}(t)[\omega ^b_{i_0b}(t)_{\times}]\tag{6}
C˙tib0(t)=Cbib0(t)[ωi0bb(t)×](6)
其中
[
ω
i
0
b
b
(
t
)
×
]
[\omega ^b_{i_0b}(t)_{\times}]
[ωi0bb(t)×]表示由陀螺测量输出的角增量构成的反对称矩阵,可通过n子样算法近似计算等效旋转矢量后求解,即ins的姿态更新。
3.5. C i b 0 i C^i_{i_{b_0}} Cib0i:惯性系(i)到初始捷联惯导惯性系( i b 0 i_{b_0} ib0)的转换矩阵
(此处推导有区别于秦永元论文与严恭敏博士后报告论文,重点在于静基座、微小晃动)
在静止基座上,加速度计输出的比力在坐标系
i
b
0
i_{b_0}
ib0的投影为:
C
b
i
b
0
f
~
s
f
b
=
C
b
i
b
0
(
−
g
b
+
∇
b
)
(7.1)
C^{i_{b_0}}_b\tilde f^b_{sf}=C^{i_{b_0}}_b(-g^b+\nabla^b)\tag{7.1}
Cbib0f~sfb=Cbib0(−gb+∇b)(7.1)
其中
∇
b
=
δ
f
s
f
b
+
v
˙
b
\nabla^b=\delta f^b_{sf}+\dot v^b
∇b=δfsfb+v˙b是比力测量误差和线速度干扰。
对(7.1)在
[
t
0
,
t
k
]
[t_0,t_k]
[t0,tk]内积分
v
~
b
0
i
=
∫
t
0
t
k
C
b
i
b
0
f
~
s
f
b
d
t
=
−
C
i
i
b
0
∫
t
0
t
k
g
i
d
t
+
∫
t
0
t
k
∇
i
b
0
d
t
(7.2)
\tilde v^i_{b_0}= \int_{t_0}^{t_k} C^{i_{b_0}}_b\tilde f^b_{sf}\, {\rm d}t =-C^{i_{b_0}}_i\int_{t_0}^{t_k} g^i\, {\rm d}t+ \int_{t_0}^{t_k} \nabla^{i_{b_0}}\, {\rm d}t\tag{7.2}
v~b0i=∫t0tkCbib0f~sfbdt=−Ciib0∫t0tkgidt+∫t0tk∇ib0dt(7.2)
记
v
b
0
i
=
−
C
i
i
b
0
∫
t
0
t
k
g
i
d
t
v^i_{b_0}=-C^{i_{b_0}}_i\int_{t_0}^{t_k} g^i\,{\rm d}t
vb0i=−Ciib0∫t0tkgidt
其中
g
i
=
C
e
i
C
n
e
[
0
0
−
g
]
=
[
−
g
c
o
s
L
c
o
s
ω
i
e
(
t
−
t
0
)
−
g
c
o
s
L
s
i
n
ω
i
e
(
t
−
t
0
)
−
g
s
i
n
L
]
(7.3)
g^i=C^i_eC^e_n \begin {bmatrix} 0\\ 0\\ -g \end{bmatrix}= \begin{bmatrix} -gcosLcos\omega_{ie}(t-t_0)\\ -gcosLsin\omega_{ie}(t-t_0)\\ -gsinL \end{bmatrix}\tag{7.3}
gi=CeiCne
00−g
=
−gcosLcosωie(t−t0)−gcosLsinωie(t−t0)−gsinL
(7.3)
积分得
v
i
(
t
k
)
=
[
g
c
o
s
L
ω
i
e
s
i
n
ω
i
e
t
k
g
c
o
s
L
ω
i
e
(
1
−
c
o
s
ω
i
e
t
k
)
t
k
g
s
i
n
L
]
(7.4)
v^i(t_k)= \begin{bmatrix} \cfrac{gcosL}{\omega_{ie}}sin\omega_{ie}t_k\\ \cfrac{gcosL}{\omega_{ie}}(1-cos\omega_{ie}t_k)\\ t_k g sinL \end{bmatrix}\tag{7.4}
vi(tk)=
ωiegcosLsinωietkωiegcosL(1−cosωietk)tkgsinL
(7.4)
再次积分得(此处第二个元素原来多写了个负号,现已修改,感谢@Williams_lwq):
P
i
(
t
k
)
=
[
g
c
o
s
L
ω
i
e
2
(
1
−
c
o
s
ω
i
e
t
k
)
g
c
o
s
L
ω
i
e
2
(
ω
i
e
t
k
−
s
i
n
ω
i
e
t
k
)
t
k
2
g
s
i
n
L
2
]
(7.5)
P^i(t_k)= \begin{bmatrix} \cfrac{gcosL}{\omega^2_{ie}}(1-cos\omega_iet_k)\\ \cfrac{gcosL}{\omega^2_{ie}}(\omega_{ie}t_k-sin\omega_{ie}t_k)\\ \cfrac{t_k^2gsinL}{2} \end{bmatrix}\tag{7.5}
Pi(tk)=
ωie2gcosL(1−cosωietk)ωie2gcosL(ωietk−sinωietk)2tk2gsinL
(7.5)
当线运动极小时:
v
~
b
0
i
≈
v
b
0
i
=
C
i
i
b
0
v
i
P
~
b
0
i
≈
P
i
b
0
=
C
i
i
b
0
P
i
\tilde v^i_{b_0}\approx v^i_{b_0}=C^{i_{b_0}}_i v^i\\ \tilde P^i_{b_0}\approx P^{i_{b_0}}=C^{i_{b_0}}_iP^i
v~b0i≈vb0i=Ciib0viP~b0i≈Pib0=Ciib0Pi
v
~
b
0
i
,
P
~
b
0
i
\tilde v^i_{b_0},\tilde P^i_{b_0}
v~b0i,P~b0i为真实的速度和位移量,可以由INS速度、位置更新求解。
采取两个不同时间间隔的数据
t
k
1
,
t
k
2
t_{k_1},t_{k_2}
tk1,tk2构建双矢量定姿方程(参考书上1P194):
C
^
i
i
b
0
=
[
[
v
i
(
t
k
1
)
]
T
[
v
i
(
t
k
2
)
]
T
[
v
i
(
t
k
1
)
]
T
×
[
v
i
(
t
k
2
)
]
T
]
−
1
⋅
[
[
v
~
i
b
0
(
t
k
1
)
]
T
[
v
~
i
b
0
(
t
k
2
)
]
T
[
v
~
i
b
0
(
t
k
1
)
]
T
×
[
v
~
i
b
0
(
t
k
2
)
]
T
]
(7.6)
\hat C_i^{i_{b_0}}= \begin{bmatrix} [v^i(t_{k_1})]^T\\ [v^i(t_{k_2})]^T\\ [v^i(t_{k_1})]^T\times[v^i(t_{k_2})]^T \end{bmatrix}^{-1} \cdot \begin{bmatrix} [\tilde v^{i_{b_0}}(t_{k_1})]^T\\ [\tilde v^{i_{b_0}}(t_{k_2})]^T\\ [\tilde v^{i_{b_0}}(t_{k_1})]^T\times[\tilde v^{i_{b_0}}(t_{k_2})]^T \end{bmatrix}\tag {7.6}
C^iib0=
[vi(tk1)]T[vi(tk2)]T[vi(tk1)]T×[vi(tk2)]T
−1⋅
[v~ib0(tk1)]T[v~ib0(tk2)]T[v~ib0(tk1)]T×[v~ib0(tk2)]T
(7.6)
位置矢量的求解与上式原理相同。
最后将解得的(4)(5)(6)(7.6)带入(2)求得
C
b
n
C^n_b
Cbn,完成初始对准。
该方法对角运动有很好的抗干扰能力,在线运动不明显的时候,短时间即可达到较高精度对准。
4.代码解析
CAlign0.m
35行—计算等效旋转矢量与补偿后的速度增量
36行—计算初始比力
40行—速度更新,对应(7.6)中的
v
~
i
b
0
\tilde v^{i_{b_0}}
v~ib0
41行—位置更新,对应(7.6)中的
P
~
i
b
0
\tilde P^{i_{b_0}}
P~ib0
45行—计算惯性系观测速度位移,对应(7.*)中的
g
i
,
v
i
,
P
i
g^i,v^i,P^i
gi,vi,Pi 。代码解析见下文
46行—初始捷联惯导惯性系到捷联惯导坐标系(t)的转换矩阵,对应(6)
52行—对应(4)乘以(5)
47行—选取
t
(
k
1
)
=
0.5
t
(
k
2
)
t_(k_1 )=0.5t_(k_2 )
t(k1)=0.5t(k2)时刻,为参与定姿的矢量变量赋值
56行—对应(7.6)
57行—对应(2)完成求解
i0fvp
21行—对应(7.3)
22行—对应(7.4)
23行—对应(7.5)
码字不易,转载请注明出处
“摇摆基座上基于信息的捷联惯导粗对准研究”(秦永元) ↩︎