/MyNavi

基于扩展卡尔曼滤波的INS/GNSS松组合导航程序

Primary LanguageC++

MyNavi

基于扩展卡尔曼滤波的INS/GNSS松组合导航程序

1.程序简介

程序采用C++语言编写,采用了类的**,编写了基础的类。程序的特点如下:

  • 采用扩展卡尔曼滤波进行松组合解算,状态向量为状态的误差;
  • 误差状态向量设置为15维,包括位置误差、速度误差、姿态误差、加速度计零偏和陀螺零偏;
  • 整个解算过程在e系中进行;
  • 惯导机械编排采用单子样算法;
  • 使用MFC编写了用户友好的界面。

2.使用说明

程序的界面如下:
image “数据”部分可以选择IMU数据和GNSS数据,分别支持读取ASC格式和POS格式的文件。格式的具体信息参见后文。如果IMU数据存在零偏,目前程序还没有设置零偏的功能,需要在CInsLooseCoupling类的Initialize函数中将零偏行的注释取消并修改,给其加上零偏并重新编译。同时由于存在零偏,所以不能自动初始对准,否则会错误,需要自行输入初始姿态。
在Data文件夹中有用于测试的示例数据。示例数据(XW_IMU.ASC)的参数配置如下:

参数
杆臂(XYZ) -0.035 0.164 0.890
VRW 0.018
ARW 0.005
初始位置(XYZ) -2267718.947 5009409.168 3220927.970

解算完成后,会在程序目录下生成相应的结算结果。纯惯导生成的文件为“res.txt”,松组合生成的文件为“LCres.txt”。
如果是二进制格式或者IMR格式的IMU数据,可以使用“小工具”部分的格式转换工具转出ASC格式的IMU数据。此外,“小工具”部分Allan方程分析格式工具可以将ASC格式的IMU数据转换为POSMind软件可以识别的格式,从而使用POSMind软件进行Allan方差的分析。
“设置”部分可以对初始参数进行设置。其中“初始位置”、“滤波”和杆臂部分是必须设置的,其余可以选择是否设置。
在确定输入信息无误后,在“处理”部分选择惯导处理或者松组合处理。由于没有为处理部分单独设置线程,所以程序开始处理后可能会出现卡顿,属于正常现象。在程序解算完成后会出现解算完成的提示弹窗。

3.输入文件格式

IMU文件格式:
IMU数据接受的格式为ASC格式,GNSS数据接受的格式为POS格式,二者都是可读的ASCII文件,它们的具体格式如下:

1)IMU数据格式

加速度计和陀螺还需要乘对应的比例因子才能使用。比例因子可以在BaseStruct.h的宏定义中修改。

序号 解释 示例
1 文件类型 %RAWIMUSA
2~3 GPS时间 2315,350423.010
4~5 IMU时间 2315,350423.010001296
6 ??? 00000077
7~9 加速度计输出(Z,-Y,X)单位:m/s 64213,-163,165
10~12 陀螺输出(Z,-Y,X)单位:rad/s 230,-17,1472

2)GNSS数据格式

序号 解释 示例
1~2 GPS时 2315 350426.00
3~5 E系下的XYZ坐标 单位:m -2267718.482 5009408.264 3220926.608
6~8 XYZ坐标的协方差单位:m2 0.00001 0.00001 0.00001