# RTK–IMU 标定链路审计与当前方案 > 2026-08-21 多源原始报文重构、R1b/R2V/R2G/R3 实现与三批数据实测结果, > 见 [rtk_imu_multisource_v3.md](rtk_imu_multisource_v3.md)。本页保留旧式 > GGA/GNHPR 链路的审计背景;完整 HPR 手眼仍只允许作为诊断。 ## 结论 当前数据可以验证“双天线基线方向与 IMU 的一致性”,但不能单独标定一个无歧义的完整三自由度 RTK 姿态外参。 G90 的 heading 表示主天线 ANT1 到从天线 ANT2 的基线方位。实车中主天线在左、从天线在右,因此该基线指向车体右侧,不是前进方向。IMU 的 +Y 指向车前;结合静止重力数据支持 IMU +Z 向上,可得到安装先验:IMU +X 指向车右,和 ANT1→ANT2 同向。 双天线只能观测这根基线的方位和仰角,绕基线自身的旋转不可观。GNHPR pitch 是横向基线的仰角,更接近车体横滚响应,不能当作坡道上的纵向车体 pitch;roll 字段也不是独立的第三姿态观测。因此,旧链路把 HPR 拼成完整 SO(3) 再做三轴手眼,是坡道 RMS、会话牵引和不稳定 yaw/pitch 的主要来源。 当前实现保留旧式完整 HPR 结果作为诊断量,但不允许它通过完整旋转门禁;平移在完整旋转通过前被硬冻结。 ## 坐标系和参考点 统一输出约定: ```text p_RTK = R_RTK_IMU p_IMU + t_RTK_IMU ``` RTK 车固坐标定义: - +X:ANT1(主天线、左侧)→ ANT2(从天线、右侧),指向车右。 - +Y:车辆前进方向,与 IMU +Y 同向。 - +Z:车辆上方;静止重力数据支持 IMU +Z 向上。 - 该完整三轴定义包含机械安装先验;GNHPR 实际直接观测的只有 +X 基线。 位置参考点: - GGA 为 ANT1/主天线相位中心。 - 相位中心离地高度为 1.916499878 m。 ## 求解链路 ### R0:协议、数据质量和时间 1. 校验 NMEA checksum。 2. GGA 位置只接收 Q=4 固定解。 3. GNHPR 姿态只接收 Q=4 固定解;Q=5 浮点解仅进入诊断统计,不参与标定。 4. 保留 GNHPR 自己的卫星数、差分龄期和基站号,不能再用 GGA 卫星数替代 HPR 质量。 5. 姿态使用 `hpr_measurement_utc_s` 映射后的 IMU 设备时间。 6. 遇到 HPR 无效、浮点、时间间隔异常或基线跳变时切断连续段,运动对不得跨断点。 ### T0:残余时间偏移 只使用可观测的有符号 heading 角速度与 IMU `gyro_z` 做相关扫描。角速度模长会混入不可观的绕基线旋转,不再作为时间审计依据。 时间偏移只用于初始化/诊断。只有相关峰足够高、与次峰分离且峰宽足够窄时才应用,否则保持 0 s。 ### R1:双天线基线一致性 对每个连续固定解片段构造 0.75 s、1.5 s、3.0 s 的相对运动。以安装先验 `u_IMU=[1,0,0]` 检验: ```text angle(u_RTK(t0), u_RTK(t1)) ≈ angle(u_IMU, ΔR_IMU(t0,t1) u_IMU) ``` 该标量约束不虚构 RTK 的前向轴和上向轴。输出整体、逐会话 RMS/P95、分轴诊断及最坏时间区间。所有会话的总权重归一,避免高激励或样本更多的会话支配结果。 ### R2:旧式完整 HPR 诊断 为兼容历史输出,将基线补成零 roll 的数学坐标架,再运行完整手眼。这个结果仅用于暴露符号错误、异常会话和旧结果变化,不能作为可交付外参。 LOO 删除一个会话后,会重新优化剩余会话的陀螺零偏,不再固定全量数据的 nuisance 参数。 ### T1:平移 只有完整三自由度旋转“可观且通过”时,才允许进入杆臂和平移求解。当前条件不满足,因此: - 不运行平移优化; - 不输出 `translation_result.json`; - `t_RTK_IMU_m` 和 `T_RTK_IMU` 为 null; - 历史巨大 Z、米级不确定度和约 1 m/s 速度残差不再消耗优化时间。 ## 当前 8 会话结果 结果目录:`artifacts/rtk_imu_calibration_v2/all_sessions`。 ```text 可观测基线一致性: RMS / median / P95 = 0.593665 / 0.146040 / 1.212972 deg priority_175910 RMS / P95 = 1.316292 / 2.472570 deg slope RMS / P95 = 1.264514 / 2.475899 deg 最坏区间 = priority_175910,约 5.084 deg baseline gate = passed 时间偏移: 全局候选 = +0.005 s 峰值相关 = 0.909019 近峰宽度 = [-0.110, +0.170] s 实际应用 = 0 s 旧式完整 HPR 诊断: RPY = [-0.132765, -0.297433, -1.558358] deg RMS / P95 = 1.172397 / 2.404977 deg std = [0.615416, 0.437419, 3.687145] deg priority_175910 re-optimized LOO = 1.698555 deg max re-optimized LOO = 1.699427 deg(删除 slope) legacy numeric gate = failed full attitude observable = false 平移: frozen / not run ``` 旧结果中的 `priority_175910` 条件 LOO 为 5.14°。严格剔除 Q5、会话等权、断段保护以及 LOO 重估零偏后,该会话完整诊断 LOO 降为 1.699°。它和坡道会话仍是主要异常源,但现在异常集中在基线仰角通道,而不是 heading:这更符合原始 HPR 中 Q5、低卫星数和 pitch 大幅波动的事实。 ## 已排除或仍存在的漏洞 - 已修复:heading 误当车前方向。 - 已修复:GNHPR pitch 误当纵向车体 pitch。 - 已修复:不可观 roll 注入完整姿态。 - 已修复:Q5 浮点 HPR 进入标定。 - 已修复:HPR 质量字段在导出时丢失。 - 已修复:相对运动跨越无效段或跳变。 - 已修复:样本多的会话权重过大。 - 已修复:LOO 固定全量会话零偏。 - 已修复:时间相关使用三轴角速度模长。 - 已修复:旋转未通过仍继续优化平移。 - 仍存在:当前运动不能稳定地从 GGA 速度补全车前/车上方向。 - 仍存在:基线绕轴自由度没有独立传感器观测。 - 仍存在:`priority_175910` 和坡道的基线仰角存在局部异常。 ## 如何得到可交付的完整旋转 按优先级建议: 1. 采一组专用数据:空旷区域、全程 RTK fixed、较长直线加减速、左右转、坡道上下行,保留原始 GGA/GNHPR/IMU 时间和全部质量字段。 2. 用高质量前向速度补第二根轴。只在速度足够高、航向变化平缓的区间用 GGA course,并在同一优化中建模 ANT1 杆臂、非完整车辆侧向速度约束和时间偏移。 3. 用静止重力补上向轴时,必须把“地面水平/车辆静止”写成显式先验,并将结果标记为安装先验约束解,而不是双天线数据独立解。 4. 若能取得 G90 内部融合后的完整 INS 姿态、第三天线、轮速/转角或可靠车体姿态源,优先作为第二独立方向。 5. 完整旋转通过留出验证后,才恢复平移;平移应同时估计杆臂、速度、加计偏置,并检查垂向高程基准。 当前数据上尝试用平滑 GGA 速度直接补全姿态,结果随平滑窗口明显变化,受低速、转弯杆臂和高程差分噪声影响,不能进入正式结果。 ## 与主流开源方法的对应 - Kalibr:角速度相关适合作为时间偏移初始化,不应在宽峰时强行采用候选值。 - iKalibr:采用连续时间轨迹联合估计时空参数,并强调充分激励;适合后续专用数据。 - MINS:异步测量插值并把传感器外参、时间和 nuisance 状态一起估计。 - GICI-LIB:因子图中显式进行 GNSS/INS 初始化、质量控制和异常值处理。 本项目暂不直接引入这些大型框架,而是吸收其原则:先保证物理可观测性和数据质量,再进行联合优化;不能用自由状态吸收错误模型。 参考: - Unicore N4 Reference Commands Manual - Unicore UM982 User Manual - https://github.com/Unsigned-Long/iKalibr - https://github.com/ethz-asl/kalibr - https://github.com/rpng/MINS - https://github.com/chichengcn/gici-open ## 代码入口 - `rtk_imu/rtk_attitude.py`:GNHPR 基线语义及零 roll 数学补全。 - `rtk_imu/rtk_io.py`:RTK CSV、Q4/Q5 和 checksum 质量门禁。 - `rtk_imu/rtk_imu_rotation.py`:时间审计、连续段、基线审计、旧式诊断和重优化 LOO。 - `rtk_imu/rtk_imu_replay.py`:坐标定义、参考点、平移冻结和 JSON 输出。 - `tools/rscap_v2/g90_rtk.py`:原始 GNHPR 解析及质量字段。 - `tools/export_g90_rtk_to_sessions.py`:GNHPR 质量字段导出。 - `tools/run_rtk_imu_calibration.py`:端到端命令行入口。 - `tests/test_rtk_imu_calibration.py`:轴定义、Q4/Q5、时间和预积分回归测试。