Files
calibration/docs/lidar_imu_to_rtk_imu.md
T

93 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 从 LiDARIMU 平移困难到 RTKIMU 工程外参
本文解释为什么仓库同时保留 LiDAR–IMU 与 RTK–IMU 两条链路、为什么本轮将天线–IMU 外参的工程验证重心转向 RTK–IMU,以及两条链路如何避免互相混淆。
## 决策结论
保留两条链路,不删除 LiDAR–IMU。LiDARIMU 仍然是雷达与 IMU 旋转/时间关系的有效工具,也记录了平移失败的具体证据;RTK–IMU 是针对“天线相位中心到 IMU 的杆臂”采用的独立观测模型。它们共享基础数学与 IMU 预积分,但不共享求解器或验收结论。
当前 RTK–IMU 结果应描述为:**机械测量锚定的杆臂,经 RTK+IMU 动态数据一致性验证的工程候选**。它不是 data-only 平移标定,也不是已正式 engineering 放行的结果。
## LiDAR–IMU 为什么暂时不能交平移
LiDAR–IMU 链路将相邻关键帧的点云配准相对运动,与同一区间 IMU 预积分运动做手眼/联合优化。当前实车数据中旋转和时间关系可得到稳定结果,但平移受两个独立问题限制:
1. **IMU 位移预积分不可靠。** 加速度积分对重力与加速度零偏敏感;当前 `Δp` 尤其 Z 分量会发散。已有证据显示点云相对旋转残差中位约 `0.16°`,而 IMU 位移增量模长常大于 `1 m`,说明这不是单纯旋转误差。
2. **运动激励不足。** 现有重点窗口以水平转弯为主,缺少连续坡道/俯仰激励,竖直杆臂弱可观。即使加入很强的平移先验,求解也可能只是先验回显,而非数据观测。
因此 LiDAR–IMU 的状态是:旋转与时间对齐可用,`full_se3`/平移不可作为安装参数交付。详细证据在 [LiDARIMU 现状与问题](20260808_LiDAR-IMU标定现状与问题.md) 和 [问题清单](问题清单.md)。
## 为什么 RTK–IMU 更适合验证天线杆臂
RTK 直接给出天线相位中心的 GNSS 位置与 Doppler 速度;双天线还给出 ANT1→ANT2 基线方向。对固定旋转 `R_WI` 和杆臂 `l_I = p_ANT1^I`,观测模型为:
```text
p_ANT1^W = p_IMU^W + R_WI * l_I
v_ANT1^W = v_IMU^W + R_WI * ((omega - b_g) × l_I)
```
转弯时的 `omega × l_I`、加减速和坡道中的姿态变化,都会直接增强杆臂可观性;这比把加速度二次积分当作唯一位移来源更适合做天线–IMU 一致性检查。
双天线基线本身只有 2DoF 方向信息,不能凭空构造完整三轴姿态。本项目采用:
1. R1b:以基线和 IMU 动态估计 ANT1→ANT2 在 IMU 中的 2DoF 方向。
2. R2V:以基线和高质量 Doppler velocity 做独立诊断。
3. R2G:在确认水平的静止场地,以基线 + 重力 + 地面水平先验补齐完整旋转。
4. R3:跨会话、block-out、协方差和可观性复核。
正式固定旋转来源是 `R2G_gravity_level_prior`;旧式 GNHPR 三轴姿态手眼只保留为诊断,不作为正式外参。
## RTK–IMU 平移如何求解和验证
每个 GNSS node 使用 15DoF 状态 `(R,p,v,bg,ba)`,相邻 node 由 covariance-whitened IMU preintegration 与 bias random-walk 连接。因子包括:
- BESTNAVA:天线相位中心 XYZ
- GGA:仅在 BEST 缺失时约束 XY,不混用 MSL 高度到 ENU Z
- Doppler:天线速度;
- HPR:可选基线/姿态观测,direct 与短 bridge 使用不同协方差;
- 静止段:gravity candidate 与 ZUPT 分离,禁止将匀速直线误作 ZUPT。
杆臂的判断流程不是“优化器有数值就算成功”:
1. 先用无机械先验的 free solve 评估 Schur 边缘化后的 3×3 杆臂信息、协方差、最弱方向和多初值稳定性。
2. 若完整 XYZ 不可观,冻结 free 结果为诊断基线,不继续无限增加非线性 free solve。
3. 以机械测量作为绝对杆臂来源,比较 fixed-mechanical、soft-prior 与 free 的代价和物理残差。
4. 在 circle、left-right、slope 高动态窗口,以及与标定窗口不重叠的 held-out 数据上固定杆臂验证。
5. 做旋转扰动敏感性、独立 innovation 与 propagation root-cause audit;这些审计不重新优化杆臂。
## 本次结果应如何理解
- 当前固定工程候选:`l_I = [-0.4518015159, -0.2644749820, 0.7314656115] m`
- 机械测量决定杆臂绝对值;RTK+IMU 动态数据用于独立一致性和稳定性验证。
- 47 个非重叠标定窗口表明机械先验与数据拟合相容,但没有足够的数据驱动信息去有意义地细化机械值。
- held-out 物理验证和旋转敏感性通过;杆臂敏感的高动态数据没有发现机械外参明显冲突。
- 低速、低角速度独立传播仍有约 `0.20 m/s²` 的公共加速度偏差;这更像 propagation nuisance,而不是由 `omega × l` 消失后的杆臂错误造成。该问题尚未关闭,故 `engineering_translation_accepted=false`
这解释了两个同时成立的事实:机械外参没有被动态数据否定,但整个传播模型尚未达到正式放行标准。机器可读结果见 [工程 release 决策](../artifacts/rtk_imu_calibration_v3/engineering_release_decision.json)。
## 代码边界和共享模块
```text
imu_lidar/
lidar_io.py, lidar_deskew.py, registration.py, keyframes.py
motion_pairs.py, phase_a.py, pipeline.py, joint_optimizer.py
-> LiDARIMU 专用
rtk_imu/
rtk_io.py, rtk_attitude.py, rtk_imu_rotation.py
rtk_imu_multisource.py, rtk_imu_engineering.py, rtk_imu_node_graph.py
-> RTKIMU 专用
imu_lidar/contracts.py, geometry.py, geodesy.py, imu_io.py,
imu_preintegration.py, rotation_handeye.py
-> 两条链路可复用的基础能力
```
RTKIMU 只能 import 这 6 个共享模块,不应 import LiDAR 专用求解文件。命令入口都在 `tools/`,并按 `run_rtk_imu_*``audit_rtk_imu_*` 与 LiDAR 工具名称区分。
## 进一步工作
在宣称正式工程放行前,应优先关闭低速传播公共加速度偏差:区分图优化 nuisance accel bias 与可迁移物理 bias,复核静态 bias、重力泄漏和短时传播。不要用调机械先验、调 covariance 或扩大 free solve 来掩盖该问题。
RTK–IMU 的完整工程流程、当前变换和复现命令见 [README_RTK_IMU.md](../README_RTK_IMU.md)。