第四节:坐标系定义——世界、车辆、传感器
坐标系这东西,说白了就是给空间里的每个点一个“身份证”。
我刚开始做感知时,觉得坐标系定义就是个数学概念,没什么大不了的。直到有一次,我把激光雷达的点云投影到图像上,结果车跑到天上去了……嗯,从那以后,我再也不敢小看坐标系了。
4.1 世界坐标系——一切的基础
世界坐标系是全局的参考系。它不随车辆移动而改变。
我个人习惯把世界坐标系的原点放在地图的某个固定点,比如路口中心或者停车场入口。X轴指向东,Y轴指向北,Z轴指向天。这就是所谓的ENU坐标系(East-North-Up)。
核心要点:世界坐标系是唯一的、静止的。所有其他坐标系都相对于它定义。
为什么需要世界坐标系?你想想看,如果每辆车都用自己的坐标系,那两辆车怎么知道彼此的位置?世界坐标系就是那个“共同语言”。
在实际项目中,世界坐标系通常由高精地图提供。地图上的每个车道线、每个红绿灯,都有世界坐标。我们的任务,就是把传感器看到的东西,映射到这个全局框架里。
4.2 车辆坐标系——车自己的小世界
车辆坐标系跟着车走。原点一般在车辆后轴中心(或者质心),X轴指向车头前方,Y轴指向左侧,Z轴指向上方。
这里有个常见的坑:不同车厂的坐标系定义可能不一样。有的把原点放在前轴,有的放在后轴。我曾经因为没注意这个,把一辆车的坐标直接套到另一辆车上,结果偏差了半米多。
避坑指南:拿到车辆数据后,第一件事就是确认坐标系定义。别问我怎么知道的……
车辆坐标系有什么用?它描述的是“车自己看到的世界”。比如,前方10米有个障碍物,这个“前方10米”就是相对于车辆坐标系的。
车辆坐标系和世界坐标系之间,靠的是车辆的位姿(位置+朝向)来转换。这个位姿通常来自GPS/IMU或者SLAM算法。
4.3 传感器坐标系——每个传感器的视角
每个传感器都有自己的坐标系。相机、激光雷达、毫米波雷达,各有各的“看法”。
4.3.1 相机坐标系
相机坐标系的原点在光心(镜头中心)。Z轴指向相机前方(沿着光轴),X轴向右,Y轴向下。
等等,为什么Y轴向下?因为图像坐标系的原点在左上角,Y轴向下为正。为了和图像坐标对齐,相机坐标系的Y轴也就朝下了。
相机坐标系到像素坐标的转换,涉及内参矩阵。这个我们后面会详细讲。这里你只需要记住:相机看到的是“透视投影”,近大远小。
4.3.2 激光雷达坐标系
激光雷达坐标系的原点在雷达中心。通常X轴指向车辆前方,Y轴指向左侧,Z轴指向上方。
但注意,不同型号的激光雷达可能有差异。比如Velodyne的坐标系和Hesai的就不完全一样。我建议你拿到雷达后,先看它的技术手册,确认坐标系定义。
激光雷达输出的是点云,每个点包含(x, y, z)坐标和反射强度。这些坐标就是相对于激光雷达坐标系的。
个人经验:激光雷达的坐标系通常和车辆坐标系对齐得比较好,因为安装时就会尽量让雷达的X轴平行于车头方向。但总有偏差,所以需要标定。
4.4 坐标系之间的转换关系
现在我们有三个坐标系:世界、车辆、传感器。它们之间怎么转换?
说白了,就是旋转+平移。用数学语言说,就是刚体变换。
一个点从传感器坐标系转换到车辆坐标系,需要知道传感器在车辆上的安装位置(平移)和安装角度(旋转)。这就是外参标定要做的事。
从车辆坐标系到世界坐标系,需要知道车辆的位姿。
所以整个链条是:
传感器坐标 → 车辆坐标 → 世界坐标
反过来也一样:世界坐标 → 车辆坐标 → 传感器坐标。
我画了一张图,帮你理清这些关系:
4.5 实战中的坐标系管理
在实际项目中,我建议你这样做:
- 统一命名规范:比如用
world、vehicle、lidar、camera作为坐标系名称,别自己瞎起名。 - 记录坐标系定义:每个传感器的坐标系定义,写进文档里。别靠脑子记,你记不住的。
- 写测试代码:每次标定完,用几个已知点验证一下转换是否正确。我习惯在标定板上放几个标记点,转换后看看误差。
核心原则:坐标系转换的精度,直接决定了感知系统的可靠性。一个像素的偏差,在50米外可能就是半米多的误差。
好了,坐标系定义就讲到这里。记住:世界坐标系是根,车辆坐标系是干,传感器坐标系是枝叶。搞清楚了它们的关系,后面的融合、跟踪、预测才能站得住脚。
可可精品资料库