大家都知道,定位算法工程师需要定位理论和代码编程两条腿走路。对于测绘类的多数学生,特别是新手小白来说,理论知识往往有余,而编程能力不足。学习开源代码,或基于开源代码及工具实现自己的实验想法,对研究者及从业者来说是必经之路。本文给大家分享一些笔者曾学习使用过的开源代码和工具,总结如下。
1. RTKLIB (Tomoji Takasu) https://www.rtklib.com/毫无疑问,RTKLIB是GNSS算法开源代码中的No.1,从程序功能到代码和工具的质量,相信很多卫星定位算法领域的研究人员及从业者的代码都是由此代码开始。其作者高须知二(Tomoji Takasu)是东京海洋大学的教授。RTKLIB由C/C++语言实现,从2007年发布1.0版本以来,现已更新至2.4.3版本。RTKLIB强大功能总结如下:支持多GNSS定位,支持多种定位模式,支持多种GNSS标准协议,支持多种接收机专有信息,支持通过指定协议的通讯,进而实现实时定位,提供带界面的工具及开源代码,且带有详细的使用手册。关于RTKLIB,很多研究人员及从业者进行使用教学及代码阅读的分享,其中B站用户OuYangMingJun和Lewen_NavSense(赵乐文老师)有视频详细的介绍,一些博客网站也有代码阅读笔记分析。同时有研究人员在RTKLIB基础上进行二次开发,比如周锋老师的GAMP,二次开发者的博客 https://rtklibexplorer.wordpress.com/。关于RTKLIB的信息及资料网络易得,不再赘述。高须知二研究日记:https://gpspp.sakura.ne.jp/diary202412.htm
GREAT (GNSS+ REsearch, Application and Teaching) 软件由武大测绘学院设计开发,是一个用于空间大地测量数据处理、精密定位和定轨及多源融合导航的综合性软件平台。软件核心计算模块使用C++语言(C++17)编写,辅助脚本模块使用Python3和C-Shell语言实现自动化数据处理。在2021年,GREAT团队开源了GREAT-UPD,解算GNSS模糊度固定产品UPD的代码;2023年,团队又开源了GREAT-IFCB,计算GNSS频间偏差IFCB的代码。这两部分都开源信息都发表在GPS Solutions的gps-toolbox的合集。在今年九月底,又开源了GREAT-PVT,即GNSS精密定位的相关代码。GREAT相关开源代码的详细信息及团队主页在以下公众号文章有详细介绍,相关问题可以官方QQ群咨询。另外,GREAT实验室在B站的账号“GREAT智能导航实验”发布有GREAT-PVT的培训视频供大家学习。官方介绍:武汉大学GREAT软件平台精密定位代码开源(内测版)
PRIDE PPP-AR 源于葛茂荣教授在PPP-AR领域所做的研究,后来由耿江辉教授团队进一步开发完善。当前该软件未使用任何保护性的模块,完全开放且更为简化,功能也更强大,性能也更稳定。团队开源其软件旨在为高精度GNSS研究人员提供一个基础支撑平台,促进PPP-AR在大地测量和地球科学方面的应用。该软件主要编程语言为Fortran,有命令行交互版本(CUI, Command User Interface)和界面交互版本(GUI, Graphical User Interface),GUI版本操作较简单。使用软件解算位置时仅需测站观测文件,软件会通过网络自动下载解算需要的产品(值得点赞)。软件的用户手册介绍详细,在B站可搜到软件的培训视频,有官方QQ群为大家答疑,通过群里的聊天可以看到该软件是在行业有切实的应用的。详细内容可查阅团队官网(http://pride.whu.edu.cn/index.shtml)。PRIDE团队公众号:PRIDE PPP-AR的首次线上课程培训
4. BKG Ntrip Client (BNC)BNC是一个开源的多数据流终端程序,专为实时GNSS定位而设计。它主要设计用于接收Ntrip 数据流,处理 HTTP 通信并将接收到的GNSS数据传输到串口或IP端口馈送网络软件或DGPS/RTK应用程序,也可以从RTCM或RINEX文件计算实时PPP位置解。
实时是GNSS导航定位的重要应用场景。IGS早在2001年就成立了实时工作组,从2007年开启Real-time Pilot项目,旨在推动实时GNSS规范的制定,软件开发,国际合作与技术的发展。并于2013年4月1日正式上线了IGS RTS 服务。BNC便是在此背景下应运而生,是IGS实时工作组重点推荐的软件之一,另一个则是RTKLIB。
BNC软件的开发者包括捷克技术大学的 Leos Mervart、Ntrip Enterprise 的 Georg Weber、BKG 的 Andrea Stürze、Alberding GmbH 的 Dirk St?cker 等多位科研机构和商业公司的大牛。不仅支持实时GNSS数据流接收、播发、解码、格式转换,也支持实时 SPP 和 PPP 定位解算,功能丰富强大,免费开放源代码、支持主流的Windows、Linux和Mac OS操作系统。
PPP-Wizard是法国太空研究中心(CNES)基于BNC修改的一款实时PPP定位软件,功能更加强大。有研究人员对比了三款实时PPP软件的性能,结论是BNC与PPPWIZARD的实时PPP性能指标基本相当,RTKLIB软件稍差。
<杜石,黄观文,葛玉龙,等.BNC/RTKLIB/PPPWIZARD实时精密单点定位服务性能评估[J].大地测量与地球动力学,2021,41(02)
:125-130.DOI:10.14075/j.jgg.2021.02.004>
在此,推荐大佬 “迷途兄” 的BNC阅读笔记:BNC源码阅读笔记
5. PPPH(Berkay Bahadur,土耳其 Hacettepe University)对于部分初学者来说,理论和编程都不扎实,C/C++难以上手。而MATLAB语言可以清晰看到各个中间参数及矩阵,就相对易懂,PPPH就是使用MATLAB实现的2018年开源的多GNSS PPP算法程序。开源PPPH的论文发表在GPS Solutions的gps-toolbox的合集,合集链接见文末。对该软件的论文翻译可见CSDN的博客(百度易得):https://blog.csdn.net/2301_81723939/article/details/142135233
IGNAV (integrated navigation for ins and gnss)是基于RTKLIB开发的INS/GNSS组合导航算法库,用C语言编写,适用于车载场景,目前正进行INS/GNSS融合视觉信息、激光雷达的算法编写,算法库在持续更新中。IGNAV主要功能包括:松耦合算法;SPP、PPP、DGPS、RTK紧耦合算法;里程计辅助;磁力计辅助;NHC、ZUPT、ZARU等运动约束;Doppler辅助INS/GNSS;双天线航向辅助;静对准、动对准初始化;INS正向和反向机械编排;INS/GNSS正向和反向组合滤波;初步支持视觉信息辅助定位定姿;RTS/前后向滤波平滑;车载轨迹动态显示等。代码仓库地址:https://gitee.com/xaaoyongping/ignav
7. CSSRlib(Rui Hirokawa,三菱电机)CSSRLIB是基于RTKILB使用Python实现的高精度GNSS定位开放工具包,它支持基于SSR的 PPP 或 PPP-RTK 定位,同时也支持RTK。CSSRlib工具包的目标是提供一个易于理解的开放式代码,用以学习使用公开星基PPP/PPP-RTK服务(如BDS3的PPP-B2b、QZSS的CLAS、Galileo的HAS和IGS的地基公开服务)实现PPP/PPP-RTK定位。代码仓库:https://github.com/hirokawa/cssrlib/python库地址:https://pypi.org/project/cssrlib/
- FAST(武汉大学 常春涛) https://gitee.com/changchuntao/FAST
https://gitcode.com/gh_mirrors/ga/GAMPII-GOOD/overview------------------------------------------------------------------------当前导航定位领域,包括GNSS的PPP/RTK/PPP-RTK、组合导航、多源融合导航定位等细分方向,都有数不清的开源代码,感谢相关研究人员的贡献!选择适合自己研究内容的一个,卷起来吧!如果你有推荐的高质量工具或者开源程序,欢迎评论区留言!
NOTE1:期刊 GPS Solutions 的gps-toolbox是一个专题集,着重于展示GNSS工程师和科学家使用的算法和源代码。该系列始于1999年,旨在促进全球导航卫星系统软件的公开交流,并附有简短的解释性文件和数据集。论文发表在GPS Solutions上,作者有责任在GitHub等公开域中托管包含所有必要文档的代码库。合集论文链接:https://link.springer.com/collections/jbbjffdced合集程序链接:https://geodesy.noaa.gov/gps-toolbox/NOTE2::开源全球导航卫星系统(GNSS)软件和资源社区清单: https://github.com/barbeau/awesome-gnss.git