首个阈值命中之前没有区间起点
距离型 RPE 在 `all_pairs=False` 时只收集累计路径首次达到各个距离阈值的 pose,再把相邻端点配成非重叠区间,却没有把 pose 0 放入端点列表。对于位置为 `0, 1, 2, 3, 4 m`、`delta=2 m` 的直线路径,旧逻辑只返回 `(2, 4)`,完整漏掉 `(0, 2)`,使轨迹起始阶段的误差不进入统计。


面向里程计与 SLAM 系统的 Python 评测工具,提供轨迹对齐、绝对位姿误差(APE)、相对位姿误差(RPE)、结果统计和可视化,支持 KITTI、TUM、EuRoC 等常见轨迹格式。
距离型连续 RPE 应从 pose 0 开始覆盖整条轨迹;阈值命中的 pose 是区间终点,不能同时取代最初的起点。
pose index follows distance on this test path
initial trajectory error is absent from RPE statistics
ids = [0] · accumulate from pose 1
距离型 RPE 在 `all_pairs=False` 时只收集累计路径首次达到各个距离阈值的 pose,再把相邻端点配成非重叠区间,却没有把 pose 0 放入端点列表。对于位置为 `0, 1, 2, 3, 4 m`、`delta=2 m` 的直线路径,旧逻辑只返回 `(2, 4)`,完整漏掉 `(0, 2)`,使轨迹起始阶段的误差不进入统计。
连续 RPE pair 的端点列表描述整条轨迹的区间边界,而第一条边界必须是起点。仅在达到阈值时记录终点,会天然丢失首段;但如果从 pose 0 重新参与距离累积,又会构造起点与自身的无效关系。因此应先固定起点,再从第二个 pose 开始累计实际路程。
将连续模式的端点初始化为 `ids = [0]`,随后使用 `enumerate(poses[1:], start=1)` 从 pose 1 开始累积距离,保留原始全局索引;阈值判断、区间清零以及 `all_pairs=True` 路径均保持不变。回归用五个等距 pose 直接锁定 `[(0, 2), (2, 4)]`。
非重叠的米制 RPE 现在从轨迹起点开始形成完整分段,不再少算一个区间或忽略开头累计的位姿误差;行为也与基于 frame 和 angle 的连续过滤器保持一致。针对过滤器的 11 项测试、全量 111 项测试以及类型检查全部通过。
