合并并完善双链路标定文档

This commit is contained in:
lichun.qu
2026-08-25 15:37:35 +08:00
parent 8358b3f933
commit d1fa69c89b
19 changed files with 462 additions and 1948 deletions
+32 -47
View File
@@ -1,69 +1,54 @@
# 车辆多传感器外参标定
本仓库同时维护两条独立的外参标定链路:LiDARIMU 与 RTKIMU。两条链路共享通用的几何IMU 预积分基础能力,但各自的观测模型、求解器、工具入口和验收结论独立管理
本仓库维护两条彼此独立的外参标定流程:**雷达–IMU** 和 **RTKIMU**。两条流程复用少量通用的几何IMU 读取和预积分代码,但不共用观测模型、求解器或验收结论
## 当前应如何使用
## 从这里开始
| 目标 | 推荐链路 | 当前可交付状态 |
| 目标 | 阅读文档 | 当前可交付范围 |
| --- | --- | --- |
| LiDAR 与 IMU 的旋转、时间对齐 | LiDAR–IMU | 旋转与主机桥接时间对齐可冻结;完整平移不可交付。 |
| RTK 天线相位中心与 IMU 的工程外参 | RTK–IMU | 旋转外参已求出,平移外参利用机械先验经动态数据一致性验证确定(不是纯靠数据求出)。 |
| 需要完整 RTK–IMU 工程候选和复现方式 | RTK–IMU | 先阅读 [README_RTK_IMU.md](README_RTK_IMU.md)。 |
| 标定雷达与 IMU | [雷达–IMU 标定](docs/雷达-IMU标定.md) | 旋转与时间关系已有实车候选;平移不可交付。 |
| 标定双天线 RTK 与 IMU | [RTKIMU 标定](docs/RTK-IMU标定.md) | 旋转已固定;杆臂以机械测量为基准,并完成动态一致性验证,尚未获得正式工程放行。 |
不要任何一条链路未通过的平移结果当作已标定的 6DoF 外参。结果的接受状态以对应 JSON gate 为准
不要任何一条流程中被拒绝的平移结果当作完整六自由度外参。是否接受结果,以相应结果 JSON 的 `accepted` 字段和门禁结论为准,而不是仅看优化是否收敛
## 为什么同时保留两条链路
## 两条流程的关系
LiDAR–IMU 链路通过点云相对运动与 IMU 预积分求手眼外参,适合旋转与时间对齐;但当前实车数据的加速度预积分位移,尤其 Z 分量,不足以支持可靠平移求解,且主要采集运动缺乏竖直激励。因此它的 `full_se3` 门禁未通过。
```text
雷达–IMU
点云相对运动 + IMU 预积分
→ 旋转与时间关系;平移受 IMU 位移误差和激励不足限制
RTKIMU 链路直接利用双天线基线、GNSS 位置和 Doppler 速度,并以机械测量给出天线相位中心相对 IMU 的绝对杆臂。它不是“用 RTK 替代 LiDAR”,而是针对 LiDAR–IMU 平移不可观的问题,采用更直接的天线位置/速度观测做工程外参验证。
RTKIMU
双天线基线 + GNSS 位置/速度 + IMU
→ 天线相位中心相对 IMU 的旋转和杆臂一致性验证
```
完整理由、两条模型的差异及当前结果见 [LiDAR→RTKIMU 决策说明](docs/lidar_imu_to_rtk_imu.md)
选择 RTK–IMU 不是用 RTK 替换雷达。它用于解决“雷达–IMU 的平移在当前实车数据上不可可靠交付”这一独立问题;RTK–IMU 的外参也不能自动转换为雷达–IMU 外参
## 仓库结构
```text
calibration/
├─ imu_lidar/ LiDAR–IMU 专用流程,以及双方共用基础模块
├─ rtk_imu/ RTKIMU 专用算法
├─ tools/ 两条链路的命令入口、导出和审计工具
├─ tests/ 自动化测试
├─ docs/ 详细方法、状态、采集与决策说明
├─ artifacts/ 受审核的结果快照;大过程文件仅保留本地
config/ 车辆安装与流程配置
├─ README.md 本页:仓库总览
└─ README_RTK_IMU.md RTKIMU 当前工程流程、结果与复现
├─ imu_lidar/ 雷达–IMU 专用算法和命令行入口
├─ rtk_imu/ RTKIMU 专用算法
├─ tools/ 原始数据导出、求解、审计和结果汇总入口
├─ docs/ 两份规范说明:雷达–IMU、RTK–IMU
├─ artifacts/ 已提交的结果摘要与审核证据
├─ config/ 车辆安装与流程配置
tests/ 自动化测试
```
`rtk_imu/`依赖下列 `imu_lidar/` 通用模块:
`rtk_imu/`允许复用 `imu_lidar/` 中的通用模块:`contracts.py``geometry.py``geodesy.py``imu_io.py``imu_preintegration.py``rotation_handeye.py`。它不依赖雷达专用的点云读取、去畸变、配准、雷达流程编排或雷达联合优化器。
- `contracts.py`:数据契约。
- `geometry.py`SO(3)、变换和坐标运算。
- `geodesy.py`:地理坐标到 ENU。
- `imu_io.py`IMU 读取。
- `imu_preintegration.py`IMU 预积分、bias 修正与 whitening。
- `rotation_handeye.py`:通用旋转手眼初值器。
## 数据与过程文件
RTKIMU 不得依赖 LiDAR 专用的 `lidar_io.py``lidar_deskew.py``registration.py``pipeline.py``phase_a.py``joint_optimizer.py`
原始 `.rscap`、统一导出数据、节点状态、检查点和调试中间结果只保留本地;仓库只提交可复核的代码、工具、配置、说明和结果摘要。RTK–IMU 的正式结果索引在 [artifacts/rtk_imu_calibration_v3/README.md](artifacts/rtk_imu_calibration_v3/README.md)
## 文档入口
## 开发与验证
| 文档 | 内容 |
| --- | --- |
| [README_RTK_IMU.md](README_RTK_IMU.md) | RTK–IMU 当前候选、状态、流程、审核证据和复现命令。 |
| [docs/lidar_imu_to_rtk_imu.md](docs/lidar_imu_to_rtk_imu.md) | 为什么 LiDAR–IMU 暂不能交平移、为什么引入 RTK–IMU、两者边界与共享代码。 |
| [rtk_imu/README.md](rtk_imu/README.md) | RTKIMU 包的代码职责与 import 边界。 |
| [docs/rtk_imu_multisource_v3.md](docs/rtk_imu_multisource_v3.md) | G90/HI13 统一导出及 R1b/R2V/R2G/R3 旋转链路。 |
| [docs/rtk_imu_engineering_6dof.md](docs/rtk_imu_engineering_6dof.md) | node-state factor graph、机械先验、验收门禁。 |
| [docs/IMU-LiDAR标定.md](docs/IMU-LiDAR标定.md) | LiDARIMU 方法与采集要求。 |
| [docs/20260808_LiDAR-IMU标定现状与问题.md](docs/20260808_LiDAR-IMU标定现状与问题.md) | LiDAR–IMU 当前问题、证据和历史处置记录。 |
```powershell
python -m pip install -e ".[dev]"
python -m pytest -q
```
## 结果与过程文件
`artifacts/rtk_imu_calibration_v3/` 中只提交审核结论及其关键证据。原始 `.rscap`、统一导出数据、节点状态、checkpoint、调试 JSON 与旧版本过程产物均通过 `.gitignore` 保持本地,不应随提交或推送传播。
每次改动前先确认使用哪一条链路;每次交付前先读取相应 release JSON 中的 accepted gate,而不是仅凭优化器收敛、残差下降或一个看似合理的 4×4 矩阵下结论。
## LiDARIMU 专用运行指南
[README_Lidar_IMU.md](README_Lidar_IMU.md) 保留 LiDAR–IMU 的独立运行命令、合成复现与输入输出说明;它是远端原 README 的专用化重命名,不再承担仓库总导航职责。
雷达点云处理需要时再安装可选依赖:`python -m pip install -e ".[open3d]"`