rtklib python版(翻译)

8 篇文章 0 订阅

文章来自于rtklibexplorer的博客:a-python-version-of-rtklib ,这里只是做一个简单的翻译,方便查看,有必要的话请点击链接查看原文信息。

在这篇文章中,我想介绍一个我最近正在进行的新项目。

RTKLIB 可以成为探索全球导航卫星系统精密定位世界的伟大工具。有许多配置选项(有人说太多了!)允许用户比较不同算法设置的影响。它也是开源的,因此用户可以准确地看到代码在幕后做什么,甚至可以修改代码以探索可用配置集之外的选项。

然而,其代码相当复杂,并且编写的风格密集,这对于想要深入挖掘的休闲探索者来说是相当吓人的。C/C+ + 的编译特性也使得其比交互性更强的环境难开发。这些障碍意味着,尽管 RTKLIB 是开源的,但只有少数用户真正深入到核心代码中。对于那些希望更进一步,试验或开发自己的 GNSS 的人来说,RTKLIB可能不是一个最佳选择。

我经常认为,一个 Python 版本的 RTKLIB 将有助于最小化这些障碍,并使 RTKLIB 作为一个学习和开发工具更加有用。最近,我通过高须智二的日记中的一个参考文献了解到一个新开发的 Python 版本的代码,代码名为 CSSRLib,由三菱电机的 Rui Hirokawa 编写。它主要旨在证明如何使用SSR校正数据,同时也包含了一部分rtklib的代码以运行PPK和PPP解算。另外这个算法包里也包含了一些样本数据和包装脚本以在样本数据上运行这些解算策略。显然,这是一项巨大的努力和一项重大成就。

虽然 CSSRLib 算法包对于探索精确的 GNSS 解决方案可能非常有用,但是从 c 到 Python 的转换不够严格,无法让用户直接在这段代码和 RTKLIB 之间来回跳转。

我认为这将是一个有趣的练习,重写的 python 代码更加紧密地与 RTKLIB 保持一致,在 demo5版本中添加所有的改变和增强,并尽可能地匹配 demo5解决方案的解决方案。事实证明,这是一个比我意识到的更加耗时的主张,但是经过几个月的项目断断续续的工作之后,我终于能够完成一个代码,在大多数情况下,符合这些标准。

它不打算成为 RTKLIB 的 c 版本的替代品,因为它只执行完整库功能的一小部分,并且运行速度明显变慢。它目前只运行 PPK 解决方案,虽然我想以后添加 PPP 解决方案。CSSRLib 包支持 GPS 和 Galileo 星座。我已经增加了对 GLONASS 的支持,但 Beidou 仍然不支持。由于最初的CSSRLib的实现和目的是完全不同的,因此我在Github上为其创建了一个新的存储库,并将其命名为rtklib-py。该代码仍然共享其许多CSSRLib的源代码,因此我在代码文件中留下了原始版权通知,并将致谢加入到了原代码中。

CSSRLib 包中包括一个来自大地型接收机的样本数据集,但由于 demo5代码侧重于低成本接收机,我用另外两个数据集取代了样例数据集,一个来自安装在车顶上的 u-blox F9P 接收机,另一个来自谷歌智能手机分米挑战(Google Smartphone Decimeter Challenge) ,数据集包含来自安装在车内的智能手机的数据。

按字面意思直译c代码为python代码后,代码运行起来非常慢,主要是因为 Python 是一个解释型语言,而 c 是一个编译语言。为了使 python 代码以合理的速度运行,RTKLIB 中的许多 for 循环已经被 Numpy 数组操作替换。这种优化的需要,加上 c 和 Python 之间固有的差异,意味着代码不是完全相同的,但是我试图使这两个代码在文件名、函数名、变量名等方面尽可能相似

下面是一个来自左边的 RTKLIB 和右边的 RTKLIB-py 的trace日志的示例,这个示例演示了它们之间的相似性。代码之间仍然存在细微的差异,再加上解决方案的迭代性质,确实会导致最终的定位结果出现少量偏差,但中间结果在大多数情况下非常接近。
在这里插入图片描述

两种代码之间的输入(rinex 文件)和输出是相同的,因此 RTKCONV 和 RTKPLOT 可以分别用于生成 rinex格式的输入文件和绘制pos结果。

新代码中的配置参数具有与 RTKLIB 代码非常相似的名称和功能,尽管并非所有选项都支持,特别是,PPP模式比PPK 模式更频繁的使用配置信息。对于两个示例数据集,配置参数分别在 f9p _ config.py 和 phone _ config.py 中定义。运行解决方案的主脚本是 run _ ppk.py。默认情况下设置为运行 F9P数据集,如果想运行解算智能手机的数据集的话把对应的注释放开就行。您可以通过修改run_ppk.py中指定的文件来运行自己的数据。或者也可以这样,复制一下默认的配置文件,然后根据直接的数据调整配置选项。

下面是对F9P样本数据集分别使用RTKLIB(前向滤波)和和rtklib-py解算结果的对比,两者使用相同的配置参数。
在这里插入图片描述

RTKlib和rtklib-py结果对比

这是两种解算结果的区别。正如你所看到的,它们非常接近,但并不完全一样。
在这里插入图片描述

RTKLIB-py 并不是为了替代 RTKLIB,对于那些只对最终结果感兴趣的人来说也不是一个好的选择。不过,我希望它能在其它几个可能的方面发挥作用:

  1. 作为一个“地图”,探索和了解 RTKLIB 的内部细节是如何工作的

  2. 作为一个开发环境用来增强或者调整RTKLIB 算法。由于两个软件包之间几乎同步,当这些调整测试通过后,可以很容易地将它们移植回 RTKLIB 的 c/c + + 版本。

  3. 更具交互性的环境中调试 在RTKLIB 中发现的问题

  4. 将代码片段剪切粘贴到更自定义的解决方案中

最后一个目标,希望能让这个代码成为参加今年谷歌智能手机分米挑战赛的团队的工具。

这篇文章的目的只是介绍新的代码,所以我不会在这里进行更多的细节。Github 存储库中的自述文件中有一些运行代码的简短说明,但我确实假设用户已经相当熟悉运行 Python 应用程序。

我个人喜欢在 Spyder IDE 中运行 Python,它提供了一个易于使用的交互式环境,并且在安装中包含 Numpy 和其他流行库。但是,我确信,如果您喜欢另一种选择,还有其他一些好的开发环境。

我总是对其他人关于这些话题的想法感兴趣,所以请在下面的评论部分留下你的任何意见或建议。

有用的链接:

高须智二的日记 http://gpspp.sakura.ne.jp/diary202112.htm

CSSRlib https://pypi.org/project/cssrlib/

rtklib-py https://github.com/rtklibexplorer/rtklib-py

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值