1.6 学习建议
简单地说,看源码之前先学会使用 GUI 软件,了解软件的功能与操作流程;而后尝试编译并跑通 CUI 应用,以后处理程序(rnx2rtkp)作为切入点来理解源码。
1.6.1 解读源码的建议
编程基础:RTKLIB 主要以 C 语言编写,不过不需要特意学语法,稍微有点 C 语言基础即可,建议直接看代码,遇到问题再来查相应的参考手册即可;
避免完美主义:遇到看不懂的地方,先暂时跳过,可以先整体后局部;
避免大而全。不建议以系统性大而全的方式整理 RTKLIB 源码,因为 RTKLIB 的代码量很大,而且代码的组织方式很晦涩,变量命名都是 abc 之类的名称,代码并没使用现代化的编程方式,很难一下子就看懂,笔者当下是在搞了两三年 RTK 以后才回头整理这些工作的,因此与一些初学者的起点是不一样的;
以问题为导向:建议以问题为导向地梳理和学习 RTKLIB,例如:
- 一些重要函数的调用关系是怎样的?(参考 1.4 节)
- 一些关键的数据和结构体(
obs_t
,nav_t
,rtk_t
)是如何传递的?(参考 11.1 节) - 滤波器是如何构建的?(参考 RTKLIB-Manual-CN 附录 E.7 节 及 11 章相应部分)
- RINEX 或 RTCM 的原始数据是如何解析并转换为 obs_t/nav_t 结构体的?(参考第 6 章)
以上只是一些示例问题。相信研究 RTKLIB 的人通常是相关专业的研究人员或工程师,对于这一阶段的人而言,以问题为导向的学习和工作方法才是最高效的(而非学生时代从头学到尾的策略)。
绘图辅助理解:RTKLIB 代码量庞大,直接阅读容易让人一头雾水,复杂的代码逻辑也难以迅速掌握。不妨绘制流程图、函数调用关系图、思维导图等,辅助理解代码。绘图不仅能帮助梳理思路,绘制好的图日后还能作为复习资料使用。
1.6.2 RTKLIB手册
RTKLIB 手册是官方提供辅以理解的 RTKLIB 的,因此建议在进行源码解析时候,不妨多关注其中的内容,尤其是 附录 E 中的模型和算法。
RTKLIB 手册中文版:RTKLIB-Manual-CN
1.6.3 学习顺序
- CUI 程序的使用:了解 CUI 程序与界面程序的关系及学习方法。命令行功能的程序和界面程序功能是一一对应的。
- 界面程序好用,命令行程序代码好读。可以通过界面程序学软件的用法,理解程序运行逻辑;
- 然后再通过阅读命令行程序的源码,来更深入的理解;
- 单历元解算起点:
- 无论是实时解算还是后处理,都是从
rtkpos()
函数开始进行单历元解算,可以此作为研究的切入点; - 单点定位可关注
pntpos()
; - 相对定位可关注
relpos()
; - 精密单点定位可关注
pppos()
;
- 无论是实时解算还是后处理,都是从
- 后处理学习路径:学的时候先从后处理开始(方便修改源码和调试),先看
postpos()
的用法(使用 GUI 应用),然后顺着 rnx2rtkp 的源码(解读 CUI 程序),梳理从读取 RINEX 文件到定位解算与输出的整个过程;