Skip to content

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 文件到定位解算与输出的整个过程;