3. 坐标系定义与转换:雷达坐标系、车辆坐标系、世界坐标系、欧拉角与旋转矩阵

做雷达标定,说白了就是跟坐标系打交道。我见过不少工程师,算法模型调得飞起,一碰到坐标系转换就翻车。嗯,这其实是个基本功,但也是最容易出bug的地方。

今天咱们就把这件事彻底捋清楚。你想想看,雷达装到车上,它看到的目标位置是相对于雷达自己的。但车辆控制需要的是目标相对于车,或者相对于地面的位置。这中间差了三次坐标变换。

3.1 三大坐标系,各司其职

先搞清楚我们手里有几张“地图”。

3.1.1 雷达坐标系(Sensor Coordinate System)

这是雷达自己的小世界。通常定义:

  • X轴:雷达正前方
  • Y轴:雷达左侧(符合右手系)
  • Z轴:雷达正上方

雷达输出的点云数据,比如距离、方位角、俯仰角,都是在这个坐标系下算的。我个人习惯把雷达坐标系称为“原始坐标系”,因为所有测量数据都从这里出发。

经验之谈: 我遇到过一款雷达,它的Y轴定义是朝右的。安装前一定要看Datasheet,别想当然。

3.1.2 车辆坐标系(Vehicle Coordinate System)

这个坐标系以车辆为中心。标准定义(ISO 8855)是这样的:

  • X轴:车辆前进方向
  • Y轴:车辆左侧
  • Z轴:车辆正上方
  • 原点:通常在后轴中心,或者车辆质心

为什么用后轴中心?因为车辆转弯时,后轴中心基本不侧滑,定位更稳定。我在做AEB功能标定时,就吃过亏——一开始把原点定在前保险杠,结果转弯时目标位置跳得厉害。

3.1.3 世界坐标系(World Coordinate System)

这是全局参考系。通常用UTM坐标系或者经纬度+高程。在标定场景里,我们常用的是“标定场坐标系”——一个固定的、已知的参考框架。

世界坐标系的作用很简单:把不同时刻、不同车辆、不同传感器的数据统一到同一个空间里。你想想看,如果两辆车各自用自己的车辆坐标系,那它们永远没法“对话”。

3.2 欧拉角:旋转的三种姿势

坐标系之间怎么转?靠欧拉角。说白了就是绕三个轴各转一次。

常用的顺序是 Z-Y-X(偏航-俯仰-横滚):

  • 偏航角(Yaw, ψ):绕Z轴旋转。车头左右摆。
  • 俯仰角(Pitch, θ):绕Y轴旋转。车头上下翘。
  • 横滚角(Roll, φ):绕X轴旋转。车身左右侧倾。
注意: 欧拉角有“万向锁”问题。当俯仰角接近±90°时,偏航和横滚会耦合。我建议在标定算法内部用四元数或旋转矩阵,只在人机交互界面显示欧拉角。

3.3 旋转矩阵:数学工具箱

绕单轴的旋转矩阵很简单,记住这三个:

// 绕Z轴旋转(偏航)
Rz(ψ) = | cosψ  -sinψ  0 |
        | sinψ   cosψ  0 |
        | 0      0     1 |

// 绕Y轴旋转(俯仰)
Ry(θ) = | cosθ   0   sinθ |
        | 0      1   0    |
        | -sinθ  0   cosθ |

// 绕X轴旋转(横滚)
Rx(φ) = | 1   0      0    |
        | 0   cosφ  -sinφ |
        | 0   sinφ   cosφ |

组合旋转时,顺序很重要。Z-Y-X顺序的完整旋转矩阵是:

R = Rz(ψ) * Ry(θ) * Rx(φ)

注意乘法顺序:先绕X转,再绕Y,最后绕Z。我刚开始做的时候总搞反,结果标定出来的角度全是错的。后来养成了习惯,每次写代码前先画个旋转顺序图。

3.4 从雷达到车辆:外参标定的核心

这一步就是把雷达坐标系下的点,变换到车辆坐标系下。公式很简单:

P_vehicle = R * P_radar + T

其中:

  • R:3x3旋转矩阵(雷达相对于车辆的姿态)
  • T:3x1平移向量(雷达相对于车辆的位置)

这6个参数(3个旋转角 + 3个平移量),就是雷达的外参。

避坑指南: 我曾经遇到过一台雷达,安装时支架有1°的俯仰偏差。在50米处,这个偏差会导致目标高度误差接近0.87米。你以为目标是轿车,其实它是个路牌。所以外参标定一定要做,不能靠“目测安装”。

3.5 从车辆到世界:动态定位

车辆坐标系到世界坐标系的变换,是随时间变化的。因为车在动。通常用GPS/IMU提供的车辆位姿:

P_world = R_vehicle_to_world * P_vehicle + T_vehicle_to_world

这里的R和T是实时更新的。说白了,就是车辆在世界里“漂移”,我们得跟着它算。

3.6 完整变换链路

把上面两步串起来,从雷达到世界的完整变换是:

P_world = R_v2w * (R_r2v * P_radar + T_r2v) + T_v2w

这个公式,就是多传感器融合的数学基础。你想想看,激光雷达、摄像头、毫米波雷达,各自的数据最终都要统一到世界坐标系下,才能做决策。

核心要点: 标定的本质,就是求解这些R和T。外参标定求R_r2v和T_r2v,定位系统求R_v2w和T_v2w。缺一个,整个系统就“对不齐”。

3.7 知识体系总览

下面这张图,把本章的核心逻辑串起来了。建议你保存下来,写代码时对照着看。

坐标系定义与转换 - 知识体系 雷达坐标系 X: 正前方 Y: 左侧, Z: 上方 车辆坐标系 X: 前进方向 Y: 左侧, Z: 上方 世界坐标系 UTM / 经纬度 固定参考框架 外参标定 GPS/IMU 完整变换链路 P_world = R_v2w · (R_r2v · P_radar + T_r2v) + T_v2w 外参:R_r2v, T_r2v | 定位:R_v2w, T_v2w 欧拉角 (Z-Y-X) 偏航 ψ → 俯仰 θ → 横滚 φ 注意万向锁问题 旋转矩阵 R = Rz(ψ) · Ry(θ) · Rx(φ) 乘法顺序:从右向左 标定的本质:求解R和T,让多传感器数据“对齐”

3.8 实战建议

最后,给你几个我在项目中踩过坑后总结的建议:

  1. 统一单位:雷达输出毫米,车辆坐标系用米,世界坐标系用米。转换前先归一化。我见过有人把毫米当成米用,结果目标飞到了天上。
  2. 验证闭环:标定完成后,找一个已知位置的目标,把数据从雷达坐标系转到世界坐标系,看看误差。这叫“闭环验证”,能发现大部分问题。
  3. 记录安装参数:每次装车后,记录雷达的安装位置和角度。万一标定丢了,还能用手动测量的值顶一下。
  4. 小心符号约定:不同厂家对旋转正方向的定义可能不同。比如“向左转”是正还是负?查清楚再写代码。
一个小技巧: 调试时,可以用一个简单的测试:把雷达放在已知位置,比如车辆正前方1米、高度0.5米处。然后看转换后的坐标对不对。如果对了,说明外参没问题。

坐标系转换,说白了就是“对齐”。把雷达的眼睛、车辆的身体、世界的地图,三者对齐。这一步做扎实了,后面的目标跟踪、融合、决策,才有根基。

可可精品资料库