ignav代码阅读笔记

整个代码还是根据rtklib进行改的,功能很完善,但是我主要只关注ppp/ins紧组合

代码链接

https://github.com/Erensu/ignav

代码功能

可以完成ppp和ins的紧组合,把conf文件中ins-tc改成2就行,这项是1的话就是ins和spp紧组合,3是ins和dgps紧组合,4是ins和rtk紧组合

主函数入口

app文件夹下的rtkrcv.cc是主函数入口

-o 后面是option file

INSTC_PPK这个模式表示的是ins and gnss tightly coupled mode: ppp-kinematic

紧组合流程涉及的主要函数及其调用关系

rtkrcv.cc文件:

con_open->con_thread这个线程是控制台线程,start, stop, shutdown都是这里输入

rtkrcv.cc文件的main进去->startsvr->rtksvrstart(这个函数属于rtksvr.cc文件)

rtksvr.cc文件:

rtksvrstart->rtksvrthread->pntpos是单点定位

rtksvrthread->decoderaw->input_raw->input_m39->decode_imu_m39->decode_imu_data(这里把imu的数据读进去了)

给的示例数据的imu是迈普时空m39型号,具体读取是以二进制的形式读取的

通过ignav结果输出的rslt文件的最后几列,把imu的数据改成euroc-imu,并修改inpstr5-format为=euroc-imu,但是读一会imu数据就卡住

修改如下:将euroc.cc文件中的extern int input_imu_euroc(raw_t *raw, unsigned char data)函数中的

raw->imu.time.time=(time_t)val[0];

raw->imu.time.sec =val[0]-(time_t)val[0];

改成

int gpsweek = val[0] / 604800;

double gpssec = val[0] - gpsweek * 604800;

gtime_t timunow = gpst2time(gpsweek,gpssec);

raw->imu.time = timunow;

具体原因就是imu时间戳读取出了问题,实际文件中是gpst,而原始代码直接给入(time_t)val[0]是错误的

但是改完之后好像原来m39的数据里的里程计信息损失了,导致结果计算无法fix了,感觉没了差分信息

改成euroc的imu数据形式:

之前m39的imu格式

rtksvrthread->tcigpos是紧组合核心函数

Conf文件解读

pos1-posmode选成PMODE_INS_TGNSS才是INS和GNSS的紧组合,ppp.cc中的pppos函数会判断opt->mode(也就是pos1-posmode),如果是PMODE_INS_TGNSS,那么tc变量置为1,这样x就选成rtk->ins.x,否则tc为0,x就是rtk->x,就是rtklib中的那个rtk->x

/* input stream path args------------------------------------------------------

 * inpstr1-path:  rover observation data file path

 * inpstr2-path:  base observation data file path

 * inpstr3-path:  correction data file path

 * inpstr4-path:  gnss position measurement data file path

 * inpstr5-path:  imu measurement raw data file path

 * inpstr6-path:  reserve

 * inpstr7-path:  dual-ants measurement data path

 * ---------------------------------------------------------------------------*/

sp3精密星历文件和clk精密钟差文件在conf文件中是否输入?

紧组合代码运行bug调试

按照官方给的操作会出现下图这样的nan和inf的问题

解决方法:需要把ins.cc中的updateins函数里,变量domge初始化没有设置成0

紧组合代码解读

INS的update在e系下进行,具体代码见文件ins-gnss-tc.cc的!updateins(insopt,ins,imu)这一行,具体这一行实现了机械编排。

下面propinss(ins,insopt,ins->dt,ins->x,ins->P);是做了卡尔曼滤波状态预测,

下面info=rtkpos(rtk,obs,nu+nr,nav);是做卡尔曼滤波的量测更新。rtkpos函数就是rtklib更改而来,

 

 

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
### 回答1: Python 代码笔记是对 Python 程序代码的解释和说明。它可以帮助你理解代码的工作原理,并在以后更好地维护和编写代码。常用的代码笔记格式有注释、文档字符串等。示例代码: ```python # 计算平方 def square(x): """ 返回x的平方 """ return x*x print(square(4)) ``` 在上面的代码中,`# 计算平方`是注释,`"""返回x的平方"""`是文档字符串。 ### 回答2: Python代码笔记是程序员在学习和实践Python编程语言时记录的一种文档。它包括通过编写实际的Python代码示例来记录各种语法、函数、模块、库和算法的用法和应用。 Python代码笔记通常用于记录和整理编程语言的基本知识,并用代码示例来演示这些知识的具体使用。因为Python语言本身较为简洁易读,因此在代码笔记中使用Python语言编写示例代码非常方便。 通过编写Python代码笔记,程序员可以更好地理解和掌握Python编程语言的特性和用法。而且代码笔记还可以作为程序员的参考资料,帮助他们在遇到问题时快速找到解决方案并进行复用。 除了记录基本知识之外,Python代码笔记还可以用于记录程序员在实际项目中遇到的问题和解决方案。通过记录这些问题和解决方案,程序员可以在未来的项目中预防和避免相同的问题,并且能够提高自己的编程技巧和经验。 总之,Python代码笔记是程序员学习和实践Python编程语言时记录的一种文档。它可以帮助程序员整理知识、提高编程技巧,并成为他们解决问题和提高效率的有力工具。 ### 回答3: Python代码笔记是程序员在学习和使用Python语言时记录的一种方式。它可以包括以下内容: 首先,Python代码笔记通常会记录Python代码的基本语法和用法。这些笔记会列举Python的关键字、变量类型、运算符、控制流语句等基本知识点,以便在需要的时候进行快速查阅和复习。 其次,Python代码笔记还会记录一些常用的Python库和模块的使用方法。Python具有丰富的第三方库和模块,如numpy、pandas、matplotlib等,这些库在数据处理、科学计算、绘图等领域都有广泛的应用。通过记录库和模块的使用方法,可以帮助程序员实现特定的功能或解决具体的问题。 此外,Python代码笔记还会记录一些常见的编程技巧和经验。比如如何提高代码的效率、如何优化算法、如何进行调试等等。这些技巧和经验是程序员在实际开发中积累的宝贵资料,可以帮助他们更好地解决问题和提高工作效率。 最后,Python代码笔记还可以记录一些项目示例和实践经验。当程序员在开发具体的项目时,他们会遇到各种问题和挑战,记录下来的项目示例和实践经验可以为他们以后的开发工作提供参考和借鉴。这些实践经验可以包括项目的架构设计、数据库操作、接口调用等方面的知识。 综上所述,Python代码笔记是程序员学习和使用Python语言的重要辅助工具,它通过记录基本语法、常用库和模块的使用、编程技巧和经验以及项目示例和实践经验等内容,帮助程序员提高开发效率,解决问题,并不断提升自己的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值