2. 坐标系入门:世界坐标系、车辆坐标系、相机坐标系、激光雷达坐标系、图像坐标系
做自动驾驶感知,说白了就是跟坐标系打交道。我刚开始接触这个领域时,觉得坐标系不就是数学课上学的xyz轴嘛,有什么难的?结果第一次做多传感器融合项目,就被坐标系转换狠狠上了一课。
你想想看,一辆车上装了6个摄像头、1个激光雷达、还有GPS和IMU。每个传感器都有自己的"小算盘"——它们各自定义自己的原点在哪、哪个方向是正方向。如果不把这些坐标系统一起来,那感知结果就是一团乱麻。
这一节,我带你把自动驾驶里最常见的几个坐标系捋清楚。嗯,都是实战中天天要用的东西。
2.1 世界坐标系
世界坐标系,也叫全局坐标系。它是整个场景的"绝对参考系"。你可以把它想象成地球上的经纬度——不管车怎么动、传感器怎么转,世界坐标系是固定不变的。
在自动驾驶里,世界坐标系通常这样定义:
- 原点:一般选在车辆起始位置,或者地图的某个固定点
- X轴:指向正东方向
- Y轴:指向正北方向
- Z轴:垂直向上(符合右手定则)
重要概念:世界坐标系是唯一一个不随车辆运动而变化的坐标系。所有其他坐标系的最终归宿,都要转换到世界坐标系下。
我在项目中遇到过一个问题:GPS给出的经纬度是WGS84坐标系下的,而高精地图用的是UTM坐标系。这两者之间需要做投影转换。当时没处理好,结果车辆定位偏差了十几米——还好是在测试场,要是在路上就出大事了。
2.2 车辆坐标系
车辆坐标系是跟着车走的。车头朝哪,坐标系就朝哪。它描述的是"相对于车本身"的位置关系。
行业内一般遵循ISO 8855标准:
| 轴 | 方向 | 说明 |
|---|---|---|
| X轴 | 车辆前进方向 | 车头为正 |
| Y轴 | 车辆左侧方向 | 左转为正 |
| Z轴 | 垂直向上 | 车顶为正 |
个人习惯:我一般把车辆后轴中心作为车辆坐标系的原点。为什么?因为后轴中心在车辆运动学模型里是最稳定的点,做轨迹预测时误差最小。
车辆坐标系有什么用?举个例子:你检测到前方10米处有个行人。这个"前方10米"就是在车辆坐标系下说的。如果车掉了个头,那这个行人的坐标就变了——因为车辆坐标系跟着车转了。
2.3 相机坐标系
相机坐标系是摄像头自己的"小世界"。它描述的是"从相机角度看"的空间位置。
相机坐标系有个特点——它的Z轴是朝前的,指向相机拍摄的方向。这和车辆坐标系不一样:
- 原点:相机光心(镜头中心)
- X轴:指向相机右侧
- Y轴:指向相机下方(注意,是向下!)
- Z轴:指向相机前方(拍摄方向)
避坑指南:我曾经在标定相机时,把Y轴方向搞反了。结果3D检测框全部上下颠倒——行人在地上爬,汽车在天上飞。检查了半天才发现是坐标系符号问题。记住:相机坐标系的Y轴是向下的,和常规直觉相反。
相机坐标系到图像坐标系的转换,就是经典的"小孔成像"模型。这个我们后面会详细讲,这里先记住:相机坐标系是3D的,图像坐标系是2D的,中间差了一个投影变换。
2.4 激光雷达坐标系
激光雷达坐标系,不同厂家定义不太一样。但主流方案是这样的:
| 轴 | 方向 | 说明 |
|---|---|---|
| X轴 | 雷达前方 | 通常与车辆前进方向一致 |
| Y轴 | 雷达左侧 | 水平方向 |
| Z轴 | 垂直向上 | 高度方向 |
激光雷达输出的是点云数据。每个点包含(x, y, z)坐标,还有反射强度值。这些坐标就是在激光雷达坐标系下的。
我建议你特别注意一点:激光雷达的安装位置不同,它的坐标系原点就不同。装在车顶和装在保险杠上,坐标转换参数完全不一样。做外参标定时,这个一定要量准。
2.5 图像坐标系
图像坐标系是2D的。它描述的是"像素在图片上的位置"。
图像坐标系有两种表示方式:
- 像素坐标:(u, v),单位是像素。原点在图像左上角,u轴向右,v轴向下。
- 物理坐标:(x, y),单位是毫米。原点在图像中心(主点),x轴向右,y轴向上。
关键点:像素坐标和物理坐标之间,差了一个"内参矩阵"。内参矩阵包含焦距、主点位置、像素尺寸等信息。这些参数在相机出厂时就定了,但实际使用中会有偏差,需要做内参标定来校准。
举个例子:你检测到图像上某个行人的像素坐标是(320, 240)。这个坐标本身没有物理意义——它只是告诉你"这个人在图像的第320列、第240行"。要想知道这个人在空间中的实际位置,就得把像素坐标转换到相机坐标系,再转换到车辆坐标系,最后到世界坐标系。
2.6 坐标系之间的转换关系
好了,五个坐标系都介绍完了。现在的问题是:它们之间怎么转换?
我画了一张图,帮你理清它们之间的关系:
从图上你能看到:
- 世界坐标系是老大,所有坐标系最终都要跟它对齐
- 车辆坐标系是中间人,传感器坐标都先转到它这里
- 相机和激光雷达是平级关系,各自通过外参标定转到车辆坐标系
- 图像坐标系是2D的,通过内参从相机坐标系投影得到
实战建议:做多传感器融合时,我习惯把所有数据都先转到车辆坐标系下处理。这样逻辑最清晰——不管传感器装在哪,统一用"相对于车"的坐标来描述障碍物位置。
2.7 坐标系转换的数学本质
说白了,坐标系转换就是两件事:旋转和平移。
数学上用一个4x4的齐次变换矩阵来表示:
| R t |
| 0 1 |
其中:
- R:3x3旋转矩阵,描述两个坐标系之间的朝向关系
- t:3x1平移向量,描述两个坐标系原点之间的偏移
举个例子,把激光雷达坐标系下的点转换到车辆坐标系:
P_vehicle = R * P_lidar + t
这里的R和t,就是激光雷达到车辆的外参。我们做外参标定,本质上就是求这个R和t。
注意:旋转矩阵有6个自由度(3个旋转角+3个平移量),但实际标定时我们通常只关心3个旋转角和3个平移量。为什么?因为旋转矩阵虽然是9个元素,但它有正交约束,真正独立的只有3个角度。
嗯,坐标系的内容就讲到这里。这些概念看起来简单,但实际用起来坑不少。我建议你动手画一画每个坐标系的方向,把转换关系写下来。下一节我们讲外参标定的具体方法,到时候这些坐标系知识全都要用上。
一句话总结:坐标系转换是自动驾驶感知的"通用语言"。不会坐标系转换,就做不了多传感器融合。
可可精品资料库