210 lines
9.1 KiB
Markdown
210 lines
9.1 KiB
Markdown
# 20260808 HI13 + H32:LiDAR–IMU 标定现状与问题
|
||
|
||
> 数据:`D:\data\calibration_usable_20260808`
|
||
> 可用会话:`sessions_v1_host_aligned`(三优先窗)
|
||
> 当前结果目录:各窗 `out_fixed_dt0/`
|
||
> 清单:`sessions_v1_host_aligned/calibration_manifest_fixed_dt0.json`
|
||
> 车辆配置:`config/vehicle_hi13_h32_20260808.yaml`
|
||
> 约定外参:`p_IMU = T_IMU_lidar · p_lidar`
|
||
|
||
---
|
||
|
||
## 1. 一句话结论
|
||
|
||
**旋转 + 主机桥接时间对齐可以冻结;平移(full_se3)尚不可正式交付。**
|
||
三窗 `rotation_only`(δt=0)结果跨窗一致,**不必因平移先验 Z 修正而重跑旋转**。
|
||
|
||
---
|
||
|
||
## 2. 当前可用结果(`out_fixed_dt0`)
|
||
|
||
约定:`p_IMU = T_IMU_lidar · p_lidar`;本轮交付 **仅旋转**,`t = [0,0,0]`,`time_offset_s = 0`。
|
||
|
||
| 窗 | 状态 | δt | roll/pitch/yaw (°) | 手眼 RMS (°) | 手眼对数 | vs CAD prior |
|
||
|----|------|----|---------------------|--------------|----------|--------------|
|
||
| `priority_174005_174515` | `rotation_only_accepted` | 0 | −0.398 / +0.108 / **89.998** | 0.625 | 1374 | 0.413° |
|
||
| `priority_174905_175450` | 同上 | 0 | −0.316 / −0.352 / **90.002** | 0.293 | 1182 | 0.473° |
|
||
| `priority_175910_180530` | 同上 | 0 | −0.373 / −0.036 / **90.005** | 0.786 | 789 | 0.375° |
|
||
|
||
- 跨窗旋转互差约 **0.15°–0.47°**(相对三窗均值 ≤0.26°)。
|
||
- CAD/安装平移先验只用于后续 SE3 / 校验,不写入本轮交付 `T`。
|
||
- 原始摘要:各窗 `out_fixed_dt0/summary.json`;总表 `calibration_manifest_fixed_dt0.json`。
|
||
|
||
### 2.1 窗1 `priority_174005_174515` — `R_IMU_lidar`
|
||
|
||
- 路径:`...\priority_174005_174515\out_fixed_dt0\summary.json`
|
||
- rpy_deg_xyz:`[-0.39806616272552936, 0.10842366761721789, 89.99788311264182]`
|
||
- quaternion_xyzw:`[-0.0031254048203223084, -0.0017872288323561246, 0.7070914597978358, 0.707112936622415]`
|
||
|
||
```text
|
||
R =
|
||
[[ 3.6946588133e-05, -0.9999758655693408, -0.0069474393698490 ],
|
||
[ 0.9999982088237712, 2.3798651350e-05, 0.0018925598731371 ],
|
||
[-0.0018923488575947, -0.0069474968493909, 0.9999740753156198 ]]
|
||
t = [0, 0, 0]
|
||
```
|
||
|
||
### 2.2 窗2 `priority_174905_175450` — `R_IMU_lidar`
|
||
|
||
- 路径:`...\priority_174905_175450\out_fixed_dt0\summary.json`
|
||
- rpy_deg_xyz:`[-0.31554362742542746, -0.35231680831805484, 90.00193338170823]`
|
||
- quaternion_xyzw:`[0.00022698471903919405, -0.004121119694188399, 0.7071067019847445, 0.7070948146172911]`
|
||
|
||
```text
|
||
R =
|
||
[[-3.3743238552e-05, -0.9999848355714863, -0.0055070399001942 ],
|
||
[ 0.9999810938467022, 1.2097239027e-07, -0.0061491421465438 ],
|
||
[ 0.0061490495645171, -0.0055071432752239, 0.9999659297008071 ]]
|
||
t = [0, 0, 0]
|
||
```
|
||
|
||
### 2.3 窗3 `priority_175910_180530` — `R_IMU_lidar`
|
||
|
||
- 路径:`...\priority_175910_180530\out_fixed_dt0\summary.json`
|
||
- rpy_deg_xyz:`[-0.37335575043737196, -0.03585856981709423, 90.00538974486676]`
|
||
- quaternion_xyzw:`[-0.002082462199099642, -0.002525219418619018, 0.7071355299053291, 0.7070704554452735]`
|
||
|
||
```text
|
||
R =
|
||
[[-9.4068775206e-05, -0.9999787650354249, -0.0065161821101807 ],
|
||
[ 0.9999997997313592, -8.9988606603e-05, -0.0006264497522950 ],
|
||
[ 0.0006258500675082, -0.0065162397345547, 0.9999785732361544 ]]
|
||
t = [0, 0, 0]
|
||
```
|
||
|
||
### 相对历史失败轮次
|
||
|
||
| 轮次 | 问题 | 结果 |
|
||
|------|------|------|
|
||
| `sessions_v1_aligned` | 首帧强行对齐设备钟 | 三窗手眼失败,RMS ~9°–12° |
|
||
| 自由估 δt + signed refine | 窗3 δt 漂到 −0.48 s;窗2 yaw≈19° | 跨窗 yaw 矛盾(81°/19°/93°) |
|
||
| **本轮 fixed δt=0** | 主机桥接后冻结时间 | 三窗 yaw≈90°,可互证 |
|
||
|
||
---
|
||
|
||
## 3. 已澄清并写入配置的坐标系 / 先验
|
||
|
||
### 3.1 车体与传感器
|
||
|
||
- 车体:X 前 / Y 左 / Z 上;雷达与 IMU 安装在 **X 正方向**(后轮轴前方)。
|
||
- CAD 图纸可能画成 +X 朝后,那只是读图坐标系,**不是**车体真实轴。
|
||
- IMU:HI13 RFU(X 右 / Y 前 / Z 上),原始数据不做轴向重映射。
|
||
- 雷达 NPZ:假定与车体一致(X 前 / Y 左 / Z 上)。
|
||
|
||
### 3.2 安装量(`translation_m`)
|
||
|
||
| 传感器 | X / Y(后轮轴中心) | Z(离地) |
|
||
|--------|---------------------|-----------|
|
||
| IMU | 2.574 / 0.0365 m | 0.8925 + 0.294 = **1.1865 m** |
|
||
| 雷达 | 2.522 / 0.00002 m | 相位中心离地 **1.994999879 m** |
|
||
|
||
- 后轮轴中心离地:**294 mm**(Z 用离地高时加在 CAD 轴心高上)。
|
||
- 雷达 CAD `dZ=1.637499879 m`;相位中心离地还需加后轮轴离地 `0.294 m` 和相位中心偏移 `0.0635 m`,最终为 `1.994999879 m`。
|
||
|
||
### 3.3 导出外参先验
|
||
|
||
- `R_IMU_lidar` ≈ yaw 90°:`[[0,-1,0],[1,0,0],[0,0,1]]`(软约束 σ=15°)。
|
||
- `t_IMU_lidar` ≈ **`[0.0365, -0.0518, 0.8085]` m**(相对 Z = 1.994999879 − 1.1865 = 0.808499879 m)。
|
||
- **旋转先验不因 Z 修正改变**;平移先验 Z 更新为 0.808499879 m。
|
||
|
||
---
|
||
|
||
## 4. 现存问题清单
|
||
|
||
### P1. IMU 预积分平移 `Δp` 不可用(阻塞正式平移)
|
||
|
||
- 现象:可视化模式 4 若用完整 `X⁻¹ A X`,橙/蓝点云常呈**上下错层**(Z 差米级~几十米)。
|
||
- 根因:加速度预积分缺少可靠重力/零偏处理,`t_A` 尤其 Z 发散;**不是旋转外参错了**。
|
||
- 旁证:相对 GICP 的旋转残差中位约 0.16°;`|t_A|` 中位却常 >1 m。
|
||
- 影响:`full_se3` / 依赖 IMU 位移的平移估计不可信。
|
||
- 缓解(已做):`visualize_pair_3d.py` 对 `rotation_only` 默认模式 4 = **R 共轭 + GICP 的 t_B**(`--mode4-translation gicp|imu|auto`)。
|
||
|
||
### P2. 平面运动导致竖直平移弱可观
|
||
|
||
- 三优先窗以水平转弯为主,缺少缓坡/俯仰激励。
|
||
- 流水线门控已给出 `translation_accepted=false`。
|
||
- 即使打开平移先验(σ≈5 cm),弱激励下结果易变成**先验回显**,不宜当标定成功。
|
||
|
||
### P3. 时间偏移若再自由估计会被带偏(已规避,需保持)
|
||
|
||
- 主机 UTC 桥接(MSOP/IMU `HostReceiveUtc`)后,两路已在同一时间轴,残差通常几十毫秒量级。
|
||
- 若再做有符号 δt 精修,会与错误/未收敛的 R 耦合,窗3 曾从约 −0.12 s 走到 **−0.48 s**。
|
||
- **现行做法**:桥接会话使用 `--fixed-time-offset-s 0 --no-signed-time-refine`。
|
||
|
||
### P4. 单窗低残差 ≠ 外参正确(历史教训)
|
||
|
||
- 自由 δt 轮次中,窗2 手眼 RMS 最低(~0.3°)但 yaw≈19°,与 CAD/其他窗差 60°+。
|
||
- 平面运动下 yaw 外参可出现多个能拟合 `R_A R_X ≈ R_X R_B` 的解。
|
||
- **必须**做跨窗一致性 + 可视化叠点,不能只看单窗 RMS。
|
||
|
||
### P5. 旋转软先验尚未做无先验对照
|
||
|
||
- 当前 σ=15°;笔记显示 Tsai 初值本身已接近(约 0.3°–1.1° RMS),不像纯先验硬拽。
|
||
- 仍缺一次:关闭先验或放大 `sigma_deg` 的对照,以排除「只是被拉到 90°」的疑虑。
|
||
|
||
### P6. 文档与操作约定未完全同步(工程)
|
||
|
||
- README 需明确写清:host-bridge 后固定 δt=0、禁用 signed refine、rotation_only 可视化用法。
|
||
- 交付物目前缺一版「冻结的联合/中位 R + 使用说明」JSON/报告(旋转可交,平移明确不交)。
|
||
|
||
---
|
||
|
||
## 5. 不该做 / 可以做
|
||
|
||
| 动作 | 建议 |
|
||
|------|------|
|
||
| 因 Z 先验修正重跑三窗 rotation_only | **不必**(R 未依赖新 t) |
|
||
| 正式交付 6-DOF / 信赖当前 `Δp` 估 t | **不要** |
|
||
| 试验性 `full_se3`(固定 R、δt=0、新 t 先验) | 可做,结果标「实验」 |
|
||
| 可视化验收模式 3 vs 4(gicp 平移) | **建议做** |
|
||
| 无先验 / 大 σ 旋转对照 | **建议做** |
|
||
| 冻结交付 `R` + `δt=0` 说明 | **建议做** |
|
||
| 补采缓坡或加强垂直尺寸约束后再估 t | 正式平移前需要 |
|
||
|
||
---
|
||
|
||
## 6. 建议下一步顺序
|
||
|
||
1. **验收旋转**:三窗抽转弯运动对,模式 3/4 叠点;可选无先验对照。
|
||
2. **定稿旋转**:三窗中位或联合手眼 → 交付 `R_IMU_lidar` +「δt=0(主机桥接)」说明;**明确不交 t**。
|
||
3. **工程收尾**:README 主机桥接配方;需要时再整理联合标定脚本入口。
|
||
4. **平移(靠后)**:改善 IMU 位移模型或改用更可靠的位移观测 + 竖直激励后,再用新 `t` 先验跑 SE3。
|
||
|
||
---
|
||
|
||
## 7. 常用路径与命令
|
||
|
||
```text
|
||
数据根:
|
||
D:\data\calibration_usable_20260808\sessions_v1_host_aligned\
|
||
|
||
结果:
|
||
...\priority_XXXX\out_fixed_dt0\summary.json
|
||
...\priority_XXXX\out_fixed_dt0\motion_pairs.json
|
||
...\calibration_manifest_fixed_dt0.json
|
||
```
|
||
|
||
```powershell
|
||
# 可视化(rotation_only 默认模式4用 GICP 平移)
|
||
python tools\visualize_pair_3d.py `
|
||
--lidar D:\data\calibration_usable_20260808\sessions_v1_host_aligned\priority_174005_174515\lidar `
|
||
--summary D:\data\calibration_usable_20260808\sessions_v1_host_aligned\priority_174005_174515\out_fixed_dt0\summary.json `
|
||
--pair-index 0
|
||
|
||
# 若要看「坏 Δp」导致的错层效果:
|
||
# --mode4-translation imu
|
||
```
|
||
|
||
---
|
||
|
||
## 8. 问题优先级(跟踪用)
|
||
|
||
| ID | 严重度 | 状态 | 标题 |
|
||
|----|--------|------|------|
|
||
| P1 | 高 | 未解决 | IMU `Δp` 不可用,阻塞正式平移 |
|
||
| P2 | 高 | 未解决 | 平面运动,竖直 t 弱可观 |
|
||
| P3 | 高 | 已规避 | 自由 δt / signed refine 带偏(需保持冻结) |
|
||
| P4 | 中 | 已吸收教训 | 单窗低残差不可单独验收 |
|
||
| P5 | 中 | 待做 | 无旋转先验对照 |
|
||
| P6 | 低 | 待做 | README/交付物同步 |
|