Files
calibration/PAIR_DIAGNOSTICS.md
T

3.0 KiB
Raw Blame History

Pair 局部诊断与全局灵敏度扫描

本说明补充主 README。所有变换均采用:

X = T_body_lidar
A_ij X = X B_ij
B_ij = T_Li_Lj(把站点 j 点云变到站点 i)

模式 4 相对模式 3 的数值差定义为:

Delta_ij = B_ij^-1 * (X^-1 * A_ij * X)

打印的平移 xyz 和旋转 RPY 是 Delta_ij 在站点 j 雷达局部坐标系中的分量,不是屏幕坐标。3D 相机视角会改变画面中的“横向”,所以不能仅凭屏幕左右判断车体系 Y 或 yaw。

Pair 0 当前诊断

Open3D 精筛 Pair 0station 0 <- 1)的当前结果为:

translation xyz = [-1.2535, +1.4157, +7.7441] cm
rotation RPY xyz = [-0.5355, -0.1093, +0.0247] deg
norm = 7.9716 cm / 0.547109 deg

因此这对主要表现为 roll/pitch 相关姿态差和相对 Z 差,yaw 仅约 0.025 deg,不应优先调 yaw。

可视化试验

查看原结果:

$Repo = "D:\你的代码目录\calibration"
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$Repo\run\view_open3d_result.ps1" -PairIndex 0

试验车体系左乘 pitch +0.2 deg

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$Repo\run\view_open3d_result.ps1" -PairIndex 0 -LeftPitchDeg 0.2

此时按键含义:3 为 GICP 的 B4 为当前最终 X 预测,5 为试验修正后的 X 预测。试验使用:

X_test = DeltaR_body * X

这是真正的车体系左乘,会同时旋转 X 的旋转部分和平移向量;小角度下才近似等价于直接给 JSON 的 pitch 加相同角度。

全部运动对扫描

运行:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$Repo\run\run_sensitivity_scan.ps1" -PairIndex 0

程序扫描:

  • pitch+0.1/+0.2/+0.3 deg
  • 在这些 pitch 及零 pitch 附近扫描 roll-0.2/-0.1/+0.1 deg
  • yaw -0.2/+0.2 deg 只作为低灵敏度对照;
  • Open3D 全部精筛对、small_gicp 全部精筛对、跨后端共识对分别计算;
  • 同时报告地面法向与高度残差;
  • 使用 0.05 m / 0.5 deg 作为透明的归一化尺度,统计全局 RMS、改善对数和恶化对数。

输出位于 results/diagnostics/。JSON 保存逐对结果,CSV 便于横向比较。

接受规则

局部扫描只用于定位,程序不会覆盖 final_extrinsic_recommended.json。候选至少需要满足:

  1. 不能只改善 Pair 0;全部精筛对的归一化 RMS 应下降;
  2. 改善的运动对数量应多于恶化数量;
  3. Open3D、small_gicp 与共识集合应给出相同方向的趋势;
  4. 地面法向和高度约束不能明显恶化;
  5. 多个代表性运动对的模式 4/5 可视化应同步改善。

如果只有 Pair 0 改善,应把它视为局部配准或场景问题,不修改全局 X。

对于当前仅含 yaw 的 RTK A,车体系 Z 轴平移在 AX=XB 中不可观。扫描程序会用 X.z + 0.10 m 做数值检查,但不会扫描或修改 z;z 必须由地面高度约束或外部量测确定。