这个学期一直在做卫星导航算法重构,重写一套算法过程中借鉴学习了各类开源程序,对目前用过的程序进行总结。
1、开源程序总结
卫星导航算法整体架构推荐阅读:上交GICI、与武大中心的POSGO ,架构合理优秀,他们的数据结构会更适用于多频多系统。强烈建议卫星导航的一些数据结构一定要按照C++ map容器设计,卫星号为健,对应相应的卫星信息。摆脱传统的数组或者结构体,不然在设计多频多系统时会吃亏。 (后面会单独详细总结)。
多频多系统程序设计推荐阅读:武大中心PRIDE-PPP-AR,适应了所有频点,模糊度固定,功能强大。我们一般可以通过卫星位置与sunpos信息,大致确定卫星的姿态,并且对于GPS与GLONASS 的eclip 现象可进一步精确计算卫星的姿态。但是在此程序中还添加了att.obx文件,我们能获取高精度卫星姿态信息,在进行windup修正时,会有进一步的提升,这样类似的提升在此开源程序还有很多很多
2、卫星导航程序算法数据结构总结
学会使用C++ IO流
如果要重构一份卫星导航程序,个人建议摆脱Rtklib的C语言文件读取,随着文件版本的迭代、例如CLK文件3,04等文件版本更新,出现了许多空格等因素造成的文件读取失败,建议用C++ IO流方式进行文件读取,方便高效快速。
观测文件数据设计
利用C++ STL库设计观测数据,以下是一个简单的例子
struct Carrierphase {
double value;//载波相位值
uint8_t LLi; //周跳标识符
int snr; //载噪比
double freq;
string code;
};
//伪距
struct Pseudorange{
double freq;
double value;
string code;
};
struct MeasData
{
map<int,Carrierphase> L;
map<int,Pseudorange> P;
map<int,double> D;
map<int,double> S;
};
//每一个历元的存储的观测数据(根据不同的系统分开存储,为了后续可以快速修改)
struct MeasDatas {
map<int,MeasData> GpsObservationData;
map<int,MeasData> GlonassObservationData;
map<int,MeasData> GalieoObservationData;
map<int,MeasData> Bds2ObservationData;
map<int,MeasData> Bds3ObservationData;
//对应的prn,每颗卫星存储的观测值,因为不存在同一个历元出现相同的卫星好的数据,所以用map存储
};
后面发现在GICI、POSGO 开源代码都有类似的数据结构,(英雄所见略同) 并且由于map是
卫星导航算法重构与多频多系统程序设计实践

本文分享了作者在卫星导航算法重构过程中的经验,包括开源程序推荐、数据结构优化(如使用C++map设计)、C++IO流的应用、多线程多进程编程技巧以及处理多频多系统的需求。
最低0.47元/天 解锁文章
38





