1、坐标系基础:为什么自动驾驶需要坐标系?
说实话,我刚入行做自动驾驶时,也问过这个问题。
车在路上跑,为什么要搞一堆坐标系?直接看摄像头画面不就行了?
后来踩了个坑才明白——摄像头看到的只是二维画面,而车需要知道三维空间里的真实位置。没有坐标系,你连车道线在哪都说不清楚。
1.1 四个坐标系,一个都不能少
自动驾驶里,我们常打交道的是这四个坐标系:
- 世界坐标系——描述真实世界的绝对位置
- 相机坐标系——以相机为中心看世界
- 图像坐标系——相机成像平面上的物理位置
- 像素坐标系——图像里每个像素的坐标
它们之间的关系,说白了就是一条流水线:
世界坐标 → 相机坐标 → 图像坐标 → 像素坐标
我个人习惯把这四个坐标系想象成「翻译链条」。每次转换,就是把信息翻译成下一个系统能理解的语言。
1.2 世界坐标系:给地球一个原点
世界坐标系是绝对的。它不依赖任何传感器,只依赖一个固定的原点。
举个例子,我做过一个项目,要在高架桥上检测车道线。桥面有坡度,如果只用相机画面,根本分不清是车道线弯了还是路面不平。这时候必须把像素点映射回世界坐标系,才能准确判断。
世界坐标系通常用 (X_w, Y_w, Z_w) 表示。原点可以选在路口、停车场入口,或者某个固定地标。你想想看,没有这个坐标系,两辆车各自说「我在路口东边10米」,但说的根本不是同一个路口——那就乱套了。
1.3 相机坐标系:以镜头为原点
相机坐标系的原点在相机光心,Z轴指向镜头前方。
为什么要多此一举?因为世界坐标系里的点,相机看不到。相机只能看到「相对于自己」的位置。
我记得有一次调试车道线检测,发现检测结果总是偏右。查了半天,原来是相机安装时偏了1度。这个偏差在世界坐标系里几乎看不出来,但在相机坐标系里,所有点的位置都偏移了。
相机坐标 (X_c, Y_c, Z_c) 和世界坐标之间,靠的是外参矩阵来转换。外参包括旋转矩阵 R 和平移向量 t。
核心公式:
[X_c, Y_c, Z_c, 1]^T = [R | t] * [X_w, Y_w, Z_w, 1]^T
说白了,就是先旋转,再平移。
1.4 图像坐标系:从三维到二维
这一步是「降维打击」。
相机坐标系是三维的,但图像是二维的。怎么把三维点投影到二维平面上?靠的是内参矩阵中的透视投影。
图像坐标系的原点在相机光轴与成像平面的交点(也就是主点),单位是毫米或米这样的物理单位。
公式很简单:
x = f * X_c / Z_c
y = f * Y_c / Z_c
其中 f 是焦距。你看,Z_c 被除掉了——这就是为什么远处的物体看起来小。
一个小技巧: 我习惯把 Z_c 想象成「深度」。深度越大,投影后的 x、y 越小。这也是为什么车道线在画面远处会汇聚成一点。
1.5 像素坐标系:给图像编个号
图像坐标系是物理单位,但计算机不认识毫米,它只认识像素。
像素坐标系的原点在图像左上角,u 轴向右,v 轴向下。每个像素的坐标 (u, v) 就是它在图像矩阵中的行和列。
从图像坐标到像素坐标,需要两个参数:
- dx, dy:每个像素的物理尺寸(毫米/像素)
- u0, v0:主点在像素坐标系中的位置
转换公式:
u = x / dx + u0
v = y / dy + v0
嗯,这里要注意:dx 和 dy 通常不相等,因为像素不一定是正方形。我遇到过一些廉价摄像头,dx 和 dy 差了5%以上,如果不校正,车道线检测会歪得离谱。
1.6 完整转换链路
把上面四步串起来,就是完整的坐标转换链路:
世界坐标 (X_w, Y_w, Z_w)
↓ 外参矩阵 [R | t]
相机坐标 (X_c, Y_c, Z_c)
↓ 透视投影 (除以 Z_c)
图像坐标 (x, y)
↓ 像素缩放 + 偏移
像素坐标 (u, v)
我曾经踩过的坑: 有一次我直接用了相机厂商提供的内参,结果车道线检测总是有偏差。后来自己标定才发现,厂商给的内参是在实验室环境下测的,装到车上后,镜头因为重力轻微变形,内参已经变了。
所以我的建议是:上车后重新标定一次,别偷懒。
1.7 知识体系总览
下面这张图,是我自己总结的坐标系转换关系。你看一眼就能明白整个链路:
1.8 为什么车道线检测离不开坐标系?
你想想看,车道线检测最终要输出什么?
不是像素坐标,而是真实世界中的车道线方程。比如「前方50米处车道线向左弯曲,曲率半径200米」。
这个信息必须用世界坐标系来表达,否则控制模块没法用。
所以整个流程是:
- 从像素坐标反推回图像坐标
- 结合深度信息(或地面假设)反推回相机坐标
- 用外参矩阵的逆矩阵,从相机坐标回到世界坐标
每一步都依赖坐标系之间的精确转换。任何一个环节出错,车道线都会「飘」到错误的位置。
一句话总结:
坐标系是自动驾驶的「通用语言」。没有它,摄像头、雷达、控制模块各说各话,车就没法开。
好了,这一章就到这里。坐标系这个东西,刚开始觉得抽象,用多了就习惯了。下一章我们聊聊相机标定——怎么拿到那些内参和外参。