坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系、激光雷达坐标系、IMU坐标系

做传感器标定这些年,我最大的感触就是——坐标系搞不明白,后面全是坑。你想想看,激光雷达说障碍物在左边,相机说在右边,IMU说在下面,到底信谁的?说白了,坐标系就是各个传感器的“语言”,我们要做的就是把它们翻译成同一种话。

这一章,咱们就把自动驾驶里最常见的六个坐标系捋一遍。我尽量用大白话讲,但该有的公式和转换关系,一个都不会少。

1. 世界坐标系(World Coordinate System)

世界坐标系,你可以理解为整个场景的“绝对参考系”。它固定在大地上,不会随着车辆移动而改变。我习惯把世界坐标系的原点选在车辆启动的位置,或者某个路标点。

为什么需要它?因为所有传感器都有自己的局部坐标系,我们要把它们的感知结果统一到同一个空间里,才能做融合。举个例子,激光雷达检测到前方10米有障碍物,这个“前方10米”是相对于雷达本身的。但车辆在移动,雷达也在动,所以必须转换到世界坐标系下,才能知道障碍物在地图上的真实位置。

关键点:世界坐标系是静止的,通常遵循右手定则——X轴指向东,Y轴指向北,Z轴指向天(ENU坐标系)。也有用北东地(NED)的,看项目习惯。

2. 相机坐标系(Camera Coordinate System)

相机坐标系是以相机光心为原点建立的。Z轴指向相机前方(也就是拍摄方向),X轴向右,Y轴向下。嗯,这里要注意,相机坐标系的Y轴是朝下的,这和很多人的直觉不一样。

我在做双目视觉标定时,就吃过这个亏。当时把Y轴方向搞反了,结果重建出来的点云全部倒立,找了半天bug才发现是坐标系定义的问题。

相机坐标系的核心作用,是把三维世界中的点投影到二维图像上。这个投影过程,就是所谓的“相机模型”。

3. 图像坐标系(Image Coordinate System)

图像坐标系是二维的,原点在图像的中心(也就是主点位置)。X轴向右,Y轴向下。注意,这里的单位是物理长度,比如毫米。

为什么要有图像坐标系?因为相机传感器输出的是一张张图片,但图片上的像素位置是离散的,我们需要一个连续的坐标系来描述图像上的点。图像坐标系就是干这个的。

从相机坐标系到图像坐标系,靠的是透视投影。说白了,就是小孔成像原理。公式很简单:

x = f * (X / Z)
y = f * (Y / Z)

其中 (X, Y, Z) 是相机坐标系下的点,(x, y) 是图像坐标系下的投影点,f 是焦距。

4. 像素坐标系(Pixel Coordinate System)

像素坐标系就是我们最终看到的图片坐标系。原点在图片的左上角,u轴向右,v轴向下。单位是像素。

从图像坐标系到像素坐标系,就是一个缩放和平移的过程。因为图像坐标系的原点在中心,像素坐标系的原点在左上角,而且单位不同。

u = x / dx + u0
v = y / dy + v0

这里 dx 和 dy 是每个像素的物理尺寸,u0 和 v0 是主点在像素坐标系下的位置。

我的经验:标定相机内参时,u0 和 v0 通常接近图像宽高的一半。如果偏差太大,说明镜头畸变严重或者标定板没放好。

5. 激光雷达坐标系(LiDAR Coordinate System)

激光雷达坐标系的原点在雷达的旋转中心。通常X轴指向车辆前方,Y轴指向左侧,Z轴指向上方。这是最常见的定义方式,但不同厂商可能有差异。

我记得有一次做多激光雷达融合,两个雷达的坐标系定义就不一样。一个用的是X向前、Y向左,另一个用的是X向右、Y向前。折腾了一下午才把转换矩阵算对。所以拿到新雷达,第一件事就是看它的坐标系定义文档。

激光雷达输出的点云,每个点都包含 (x, y, z) 坐标,以及反射强度值。这些坐标就是相对于雷达坐标系原点的。

6. IMU坐标系(IMU Coordinate System)

IMU坐标系通常遵循右手定则,X轴指向车辆前方,Y轴指向右侧,Z轴指向下方。注意,IMU的Z轴是朝下的,因为加速度计测量的是重力加速度,朝下为正。

IMU输出的是加速度和角速度,这些数据都是在IMU自身坐标系下测量的。做惯性导航时,需要把IMU坐标系下的数据转换到车体坐标系或者世界坐标系下。

避坑指南:我曾经在IMU安装时没注意方向,把IMU转了90度装上去。结果解算出来的姿态全是错的,车辆明明在平地上开,IMU却说在爬坡。后来加了一个旋转矩阵才纠正过来。

7. 坐标系之间的转换关系

搞清楚了每个坐标系,接下来就是它们之间的转换。说白了,就是旋转加平移。用数学语言说,就是刚体变换。

一个三维点从坐标系A转换到坐标系B,公式如下:

P_B = R * P_A + T

其中 R 是3x3的旋转矩阵,T 是3x1的平移向量。

常见的转换链路是这样的:

  1. 激光雷达 → 相机:把激光雷达点云投影到相机图像上,用于融合感知
  2. 相机 → 世界:把相机检测到的目标转换到世界坐标系下,用于定位和建图
  3. IMU → 车体:把IMU数据转换到车体坐标系,用于姿态解算
  4. 车体 → 世界:把车辆位姿转换到世界坐标系,用于全局定位

这些转换关系,就是标定要解决的问题。标定的本质,就是求解这些旋转矩阵和平移向量。

8. 知识体系总览

下面这张图,我把六个坐标系和它们之间的转换关系画出来了。你一看就明白。

自动驾驶多传感器坐标系体系 世界坐标系 (World) 车体坐标系 (Vehicle/Body) 位姿变换 激光雷达坐标系 (LiDAR) 相机坐标系 (Camera) IMU坐标系 (IMU) 外参标定 外参标定 外参标定 图像坐标系 (Image) 像素坐标系 (Pixel) 透视投影 离散化 图例: 绝对参考系 中间参考系 传感器坐标系 投影坐标系 离散坐标系

从这张图你可以看到,世界坐标系在最顶层,车体坐标系是中间枢纽,各个传感器坐标系挂在车体下面。相机后面还跟着图像坐标系和像素坐标系,这是成像链路的必经之路。

做标定的本质,就是求解这些坐标系之间的变换矩阵。我个人的习惯是,先把每个传感器的内参标定好,然后再做外参联合标定。这样一步步来,不容易出错。

实用建议:刚开始接触标定的同学,我建议你先在纸上画出坐标系转换链路图,把每个变换矩阵的符号写清楚。这样写代码的时候,思路会清晰很多。

好了,这一章的内容就到这里。坐标系是标定的地基,地基打不牢,后面盖什么楼都会塌。下一章我们开始讲具体的标定方法,到时候会用到这些坐标系知识。

可可精品资料库