机器翻译。以英文原文为准。 English

GNSS 拒止环境定位 · 私有仓库 · 9 个包

知道自己可能错多少的定位。

每一种不依赖卫星的导航方法都有同样的失效模式:它给出一个自信但错误的数字,而下游没有任何环节能察觉。pnt-stack 由九个包组成,遵循相反的规则:每一层都把自身的不确定性向上传递,并拒绝断言它无法支撑的位置。

思路

拒绝是一等输出。

一个没有附带基准面的水深读数,不是一个可以谨慎使用的数字。它是一次指明缺失内容的拒绝。这种形态在每一层反复出现,正是它让栈的最顶层能够说出 ACT、CAUTION 或 REFUSE,并且说到做到。

不确定性向上传递

`celnav` 返回一个位置,以及协方差、误差椭圆和保护级别。没有边界的定位不算定位。

以不同方式失效的数据源

天文、地磁和海底地形误差互不相关,因此 `pntfuse` 可以交叉校验它们,把有故障的那个排除掉,而不是把它平均进去。

受支持 ≠ 可以放心信任

`CAUTION` 状态之所以存在,是因为一个定位可能完全有证据支持,却仍然不该据此行动。

九个包 · 12,725 行 · 3,923 行测试

完整链路,端到端。

感知

输入 NMEA 0183。每个量都带有它的时效、基准,以及它为何不可信的原因。

celnav

天文定位解算、加权最小二乘、误差椭圆、保护级别、卡方故障检测。

magnav

航磁补偿与地形辅助导航,均基于真实飞行数据。

pntfuse

跨数据源完整性监测与故障排除,组合以不同方式失效的数据源。

边界

预授权的能力边界,以及防篡改、哈希链式的决策日志,使用 Ed25519 签名。

进行中

连续运行一周、跨越重启的值守,写下能挺过断电的日志。

helm

ACT / CAUTION / REFUSE。它的 26 个测试是关于诚实的规则,而不是关于布局。

完整性

在被允许测量任何东西之前,先以真实值 5% 为基准校准到 4.915%。

bridge

估计器与必须做决定的那部分之间的接缝。

skymaths 是一个 submodule,而不是副本。它在自己的公共仓库中保持权威版本,因为 TerraFirma 和 Starwheel 也依赖它。正是 vendoring 一份副本,让 TerraFirma 偏差了十一个像素长达一年。

大多数项目略去的部分

哪些是实测的,哪些只是写下来的。

此表直接复制自项目自己的 SYSTEM.md,这个文件存在的目的就是把两者分开。那些不好看的行才是重点。

层状态证据
magnav 补偿实测 在真实 DAF-MIT 飞行数据上跨航次 22.8×
magnav 导航实测 后处理 6.64 m DRMS / 因果约 28.5 m,四次飞行,其中一次留作测试
skymaths实测 太阳 0.01 nm,月亮 0.17,行星 0.02,对照 Meeus 的算例
integrity已校准 在被允许测量任何东西之前,对真实值 5% 测得 4.915%
测深匹配器已对照孪生体验证 在真实星图的 30 条共享航段上峰值完全一致,拒绝 1:1,双方 DRMS 均为 12.76 m
pntfuse逻辑已测试 55 个测试;磁误差模型是真实的,定位解是合成的
envelope逻辑已测试 24 个测试,Ed25519,哈希链式
sense从未遇到过总线 48 个测试;9 个注入故障中 7 个被拒绝,2 个被证明无法检测。每一句都是合成的
underway从没见过船 39 个测试;尚未打开过任何串口
celnav从未见过任何观测 数学正确,却什么都看不到
垂直领域参考完全不需要硬件 而且它主导了每一次天文定位

实际状况:这个技术栈里的任何东西都还没接触过现实。地磁结果是用别人的地图、在别人的飞行数据上做的真实测量。所有天文部分都是正确的数学,但从未见过一次观测。最关键的那个缺口,补上大约要花 £25。

和这里的其他一切遵循同样的规则。

PANTHEON 拒绝让智能体在没有授权的情况下行动。这个项目拒绝断言它无法支撑的位置。这是同一种直觉:一个会拒绝的系统比一个会猜测的系统更有用,只不过这次用在一个没有客户、没有截止日期的问题上。

我的工作方式 → 我做的其他东西 →