2、坐标系基础:世界坐标系、车辆坐标系、IMU坐标系、激光雷达坐标系、相机坐标系及其转换关系

做高精地图外参标定,说白了就是跟一堆坐标系打交道。我刚开始接触这个领域时,最头疼的就是这些坐标系之间的转换关系。你想想看,一个点在世界里是固定的,但在不同传感器眼里,位置和姿态都不一样。搞不清楚这个,标定就无从谈起。

今天我就把这几个核心坐标系掰开揉碎了讲清楚。嗯,咱们一个一个来。

2.1 世界坐标系(World Coordinate System)

世界坐标系,也叫全局坐标系。它是一个绝对参考系,用来描述所有物体在地球上的位置。我个人习惯用 W系 来表示。

在高精地图里,世界坐标系通常采用 WGS-84 经纬度坐标系,或者更常用的 UTM 投影坐标系。为什么用UTM?因为它是平面直角坐标,计算起来方便。

核心要点:

  • 原点:通常定义在地球参考椭球体中心(WGS-84)或投影带中央经线(UTM)
  • X轴:指向东(Easting)
  • Y轴:指向北(Northing)
  • Z轴:指向天顶(Up),符合右手定则

我在项目中遇到过一个问题:不同地图供应商用的世界坐标系基准不一样。有的用CGCS2000,有的用WGS-84。虽然差异很小,但累积起来能差好几米。所以标定前,一定要确认统一的世界坐标系基准。

2.2 车辆坐标系(Vehicle Coordinate System)

车辆坐标系,简称 V系。它固定在车身上,随车移动。这是所有传感器标定的"锚点"。

行业内有个标准——ISO 8855,定义了车辆坐标系的方向:

轴 方向 说明
X轴 车辆前进方向 指向车头
Y轴 车辆左侧 垂直于X轴,指向驾驶员左侧
Z轴 车辆上方 垂直于地面,指向车顶

注意:有些车厂用右手系,有些用左手系。我见过一个团队因为坐标系方向搞反,导致整个标定结果全错。标定前,务必确认车辆坐标系定义文档。

2.3 IMU坐标系(IMU Coordinate System)

IMU坐标系,即 I系。IMU测量的是加速度和角速度,它的坐标系定义直接影响姿态解算。

IMU坐标系通常遵循 右前上 或 前左上 的约定:

  • 右前上(RFU):X向右,Y向前,Z向上。这是最常见的配置。
  • 前左上(FLU):X向前,Y向左,Z向上。部分欧洲厂商用这个。

我曾经踩过一个坑:IMU的安装方向跟车辆坐标系不一致。比如IMU的X轴指向车右侧,但车辆坐标系X轴指向车头。这时候就需要一个旋转矩阵来对齐。如果不做这个对齐,后续的航迹推算全是错的。

我的建议:在标定流程中,先把IMU坐标系旋转到与车辆坐标系对齐。这一步叫"IMU到车体的旋转标定",通常用静态六位置法完成。

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

激光雷达坐标系,简称 L系。不同厂商的雷达坐标系定义略有差异,但大体遵循以下规则:

轴 典型定义 说明
X轴 雷达前方 与雷达安装方向一致
Y轴 雷达左侧 垂直于X轴
Z轴 雷达上方 垂直于雷达底面

但要注意,有些机械式雷达(比如Velodyne)的坐标系是 Z轴向上,Y轴向前。而固态雷达(比如Livox)可能又是另一种定义。所以拿到雷达的第一件事,就是看它的坐标系定义文档。

我记得有一次,团队新来了一个同事,直接用默认的坐标系转换公式,结果点云投影到图像上全是歪的。查了半天,原来是雷达坐标系定义跟代码里写的不一样。

2.5 相机坐标系(Camera Coordinate System)

相机坐标系,即 C系。它遵循小孔成像模型,定义如下:

  • 原点:相机光心(透镜中心)
  • Z轴:指向相机前方,沿光轴方向
  • X轴:指向相机右侧(图像水平方向)
  • Y轴:指向相机下方(图像垂直方向)

注意:相机坐标系是右手系,但它的Y轴指向下方。这意味着从相机看出去,物体在图像上的y坐标越大,实际位置越低。这个跟直觉是反的,我刚入行时经常搞混。

2.6 坐标系转换关系

好了,现在五个坐标系都介绍完了。它们之间的转换关系,是外参标定的核心。

转换的本质就是 旋转 + 平移。用数学表达就是:

P_target = R * P_source + T

其中:

  • R:3x3旋转矩阵
  • T:3x1平移向量
  • P_source:源坐标系下的点
  • P_target:目标坐标系下的点

常见的转换链是这样的:

  1. 激光雷达 → 车辆坐标系:这是外参标定的主要目标之一。通过标定得到 R_l2v 和 T_l2v。
  2. 相机 → 车辆坐标系:同样需要标定。得到 R_c2v 和 T_c2v。
  3. IMU → 车辆坐标系:通常用静态标定或出厂参数。
  4. 车辆坐标系 → 世界坐标系:通过GPS/IMU组合导航实时计算。

举个例子,要把激光雷达的一个点投影到世界坐标系:

P_world = R_v2w * ( R_l2v * P_lidar + T_l2v ) + T_v2w

这里 R_v2w 和 T_v2w 是车辆在世界坐标系下的位姿,由组合导航提供。

避坑指南:我曾经在写转换代码时,把旋转矩阵的乘法顺序搞反了。记住,先旋转后平移,顺序不能乱。另外,旋转矩阵必须是正交矩阵,行列式为+1。如果标定出来的R行列式是-1,说明坐标系是镜像关系,肯定错了。

2.7 知识体系总览

为了让你更直观地理解这些坐标系之间的关系,我画了一张结构图:

坐标系转换关系总览 世界坐标系 (W) 车辆坐标系 (V) IMU坐标系 (I) 激光雷达坐标系 (L) 相机坐标系 (C) GPS/IMU组合导航 静态标定 外参标定 外参标定 转换关系:P_target = R * P_source + T 所有传感器最终统一到车辆坐标系,再由车辆坐标系映射到世界坐标系

从这张图可以看得很清楚:车辆坐标系是核心枢纽。所有传感器的数据,最终都要转换到车辆坐标系下,再通过组合导航映射到世界坐标系。

2.8 实践中的注意事项

最后,我总结几个实际项目中容易踩的坑:

  • 坐标系定义不一致:不同传感器厂商、不同算法库,坐标系定义可能不同。比如OpenCV的相机坐标系Y轴向下,而ROS的相机坐标系Y轴向上。一定要做转换。
  • 旋转顺序问题:欧拉角的旋转顺序(比如ZYX、XYZ)不同,结果完全不同。我建议统一用四元数或旋转矩阵,避免歧义。
  • 平移单位:激光雷达的平移量通常是米,但有些IMU输出的是厘米。单位搞错,标定结果差两个数量级。
  • 时间同步:坐标系转换的前提是时间对齐。如果激光雷达和IMU的时间戳不同步,转换出来的点云位置是错的。

重要提醒:坐标系转换不是一次性的工作。车辆运行过程中,传感器可能发生微小位移(比如颠簸导致雷达支架松动)。所以外参标定需要定期校验,或者做在线标定。

好了,坐标系基础就讲到这里。这些概念虽然基础,但非常重要。我见过太多因为坐标系搞错而导致标定失败的案例。记住一句话:坐标系定义清晰,标定就成功了一半。

可可精品资料库