17个版本 (7个破坏性更新)

0.7.1 2024年8月18日
0.6.0 2024年8月6日
0.5.0 2024年7月28日
0.4.3 2024年3月28日
0.3.0 2023年11月30日

#129 in 地理空间

Download history 6/week @ 2024-05-03 190/week @ 2024-05-10 27/week @ 2024-05-17 4/week @ 2024-05-24 5/week @ 2024-06-07 3/week @ 2024-06-14 3/week @ 2024-07-05 193/week @ 2024-07-26 132/week @ 2024-08-02 14/week @ 2024-08-09 288/week @ 2024-08-16

每月下载量 627
3 crate 中使用

MPL-2.0AGPL-3.0-or-later

260KB
6K SLoC

GNSS-RTK

crates.io Rust crates.io rustc

在Rust中进行的精确定位计算

PPP / RTK

GNSS-RTK是一个简单高效的导航求解器,支持PPP和RTK导航。这使得它成为大多数导航应用的理想解决方案。
它易于部署,配置简单,即使是默认设置也会显示出良好的结果(无需调整!)。

GNSS-RTK灵活高效

  • 你可以用单一可见信号进行导航
  • 你不必采样L1,可以用现代信号进行导航
  • 它支持无相位测距的导航
  • 针对双频伪距的特殊CPP方法(无相位测距),其行为类似于缓慢收敛的PPP方法
  • 它是一个真正的测量工具,因为它可以在没有先验知识的情况下运行
  • 它可以通过部署完整的PPP测量来满足RTK/大地测量参考站校准的挑战性任务

其他酷炫功能

  • 在所有支持的时标上工作
  • 可以使用圆锥方位角掩码(最小和最大方位角)进行导航。在这种情况下,我们只选择来自那个特定方向的车辆。
  • 如果我们对某些函数进行更通用的处理并提出更好的大气接口,它可能适用于其他行星。

GNSS-RTK不关心SV或信号调制。它关注的是物理、距离、频率和环境现象。这意味着你可以从任何可用的数据源操作它,只要你能提供所需的输入。

应用

以下应用使用了GNSS-RTK

示例和更多信息

  • 此存储库中包含了一些示例,它们将教会你如何部署求解器,至少是在基本设置中。
  • RINEX Wiki 描述了此框架的广泛应用,从高层次上进行了描述。

生态系统

GNSS-RTK包含以下库,并与它们紧密相关

正在进行中

此框架正在积极开发中。大多数功能已经稳定且表现良好,有些功能尚不可用或需要改进。

以下是需要解决的问题(同时,请参考活跃的GitHub问题)

  • ppp 相位导航尚未完全完成。我们通过执行长时间测量实现了非常好的性能。PPP将允许更快地收敛。
  • rtk-ppp 尚未完全实现,只有基本RTK存在。

请参考此门户网站(Wiki页面、讨论等)和RINEX Wiki以了解此工具的功能。

PVT解

求解器的目标是解决精确的PVT解。标准导航中必须观测到至少4颗SV。
在固定高度模式导航时,只需观测到3颗SV。
在仅时间模式导航时,需要观测到单一SV。

在进行测量(请参阅专用段落)时,需要观测到4颗SV直到求解器完全初始化。使用返回的对象(PVTSolution或Error)来确定是否可以放松对天空观测的限制(尚不可用)。

预设标准在配置文件(或配置脚本)中手动设置。目前,请参阅RINEX Wiki或RINEX脚本数据库,以获取有意义的示例。

根据预设配置,其他要求将适用于前面的列表,最重要的是

  • CPP 策略需要在辅助频率上进行伪距观测
  • PPP 策略需要在两个频率上进行伪距和相位观测
  • SNR、仰角和方位角掩码需要收集满足这些条件的所需数量的SV

每个PVT解都包含精度损失(DOP)和其他有意义的信息,如哪些SV对解有贡献。我们有能力以所有支持的Timescale表达时钟偏移。

策略和其他设置

求解器的行为和输出结果高度依赖于所选的策略

高级策略需要更深入的知识,可能需要更多调整求解器配置。不过,Rust/JSON基础设施足够强大,允许仅定义感兴趣的配置部分:其他将简单地默认。

PVTSolutionType 定义了我们想要形成的解的类型,因此,我们需要收集的最小SV数量。如前所述,其他标准如 min_sv_elevmax_sv_azim 将限制条件,要求这些车辆必须符合才能被考虑。

当将 fixed_altitude 设置为特定值时,所需的SV数量减少1。
当将 PVTSolutionType 设置为 TimeOnly 时,这没有影响。

SolverOpts 配置为调整求解器提供了更高级的选项。简而言之,这允许

  • 选择我们的导航滤波器之一,如卡尔曼滤波器或LSQ
  • 定义PVT解的确认标准

Modeling 定义我们补偿的物理和环境现象。
建模与所选求解器策略紧密相关。例如,影响厘米级(如太阳辐射率)的模型,除了高级PPP策略外,在其他策略中都没有意义。另一方面,如果不考虑至少一些物理现象,无论策略如何,都无法达到米级解决方案。

大气和环境偏差

此求解器始终能够模拟所有条件并形成一个解决方案。
了解我们的API设计方式,尽可能好地操作它,以获得最佳结果。

对流层延迟

对流层偏差始终需要估计。
默认情况下,求解器将使用在[model::tropo API]中实现的模式。
如果您能自行确定所需的纬度和Epoch下的对流层延迟组件(TropoComponents结构),强烈鼓励您提供数据。为此,我们使用一个可以作为TropoComponents源的函数指针。TropoComponents评估参数(函数指针参数)应包括

  • Epoch
  • 海拔(海平面以上),以米为单位
  • 纬度,以十进制度数表示

对于无法提供数据的Epochs,这不会成问题,我们将依靠内部模型。

手工TropoComponents提供者的示例

待办事项

⚠️当使用内部模型时,我们建议对候选对象应用>= 5°仰角掩码。

电离层延迟

待办事项

先验位置

求解器可以装备先验知识(对最终位置的大致想法),或者可以完全自主运行。在这种情况下,求解器将非常准确地初始化自己,这需要额外的一步。

入门指南

参考我们的示例应用程序,了解如何更详细地操作我们的API。

依赖关系

~41-56MB
~1M SLoC