3.0 KiB
3.0 KiB
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 0(station 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:\Outdoor Ackerman Cart Sensor Adaptation\LiDAR_RTK_Calibration_Rigorous_20260721"
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 的 B,4 为当前最终 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。候选至少需要满足:
- 不能只改善 Pair 0;全部精筛对的归一化 RMS 应下降;
- 改善的运动对数量应多于恶化数量;
- Open3D、small_gicp 与共识集合应给出相同方向的趋势;
- 地面法向和高度约束不能明显恶化;
- 多个代表性运动对的模式 4/5 可视化应同步改善。
如果只有 Pair 0 改善,应把它视为局部配准或场景问题,不修改全局 X。
对于当前仅含 yaw 的 RTK A,车体系 Z 轴平移在 AX=XB 中不可观。扫描程序会用 X.z + 0.10 m 做数值检查,但不会扫描或修改 z;z 必须由地面高度约束或外部量测确定。