第三章 传感器与数据采集:高精地图的“眼睛”与“耳朵”

各位同学,大家好。欢迎来到《高精地图构建与验证》的第三讲。今天我们来聊聊传感器与数据采集。说白了,这就是高精地图的“感官系统”。没有它们,地图就是无源之水。

我个人习惯把传感器比作一个团队的成员:激光雷达是那个严谨的测绘员,相机是那个善于观察的艺术家,而GPS/IMU组合导航,则是那个永远知道自己在哪里的导航员。它们各司其职,又必须紧密配合。

3.1 激光雷达:点云世界的“尺子”

激光雷达,LiDAR,原理其实不复杂。就是发射激光束,打到物体上反射回来,通过计算时间差来测距。你想想看,一秒钟发射几十万甚至上百万个点,就构成了我们常说的“点云”。

原理与核心指标

  • 测距原理:主流是ToF(飞行时间法)。也有FMCW(调频连续波)的,抗干扰能力强,但成本高。
  • 线束:16线、32线、64线、128线。线束越多,垂直分辨率越高,看到的细节越丰富。我建议,做高精地图,至少64线起步。
  • 视场角:水平360°是标配。垂直视场角越大,盲区越小。
  • 精度:通常2-3cm。这是地图绝对精度的基础。

重要内容: 选型时,别只看线束。点频(每秒点数)和测距精度同样关键。点频决定了建图的效率,精度决定了地图的质量。

选型避坑指南

我曾经在一个项目中,为了省钱选了16线激光雷达。结果建出来的地图,路沿和电线杆全是“锯齿状”,后期处理费了老大劲。所以,我的经验是:预算允许的情况下,线束和精度往高了选。这钱省不得。

主流产品对比

品牌 型号 线束 测距 典型应用
Velodyne VLS-128 128 300m L4级自动驾驶
Hesai Pandar64 64 200m 高精地图采集
RoboSense RS-LiDAR-32 32 150m 低速园区车

提示/技巧: 实际采集时,激光雷达的安装高度很重要。我一般建议装在车顶,高度1.8-2.0米。太低容易被遮挡,太高了近距离盲区会变大。

3.2 相机与视觉系统:给点云“上色”

激光雷达能提供精确的几何信息,但它“色盲”。这时候就需要相机出马了。相机负责提供纹理、颜色,还有交通标志、车道线这些语义信息。

相机选型要点

  • 分辨率:至少500万像素。用于识别交通标志,需要更高的分辨率。
  • 帧率:20-30fps。太快了数据量太大,太慢了运动模糊严重。
  • 快门类型全局快门。这一点很重要。卷帘快门在车辆运动时会产生“果冻效应”,导致图像扭曲,影响标定精度。
  • 镜头:焦距决定了视场角。我习惯用多个相机组成环视系统,覆盖360°。

为什么会强调全局快门?我在项目里吃过亏。一开始用了卷帘快门的工业相机,车辆一颠簸,图像里的车道线就歪了,和点云对不上。后来换了全局快门,问题迎刃而解。

视觉与激光雷达的配合

说白了,就是“取长补短”。激光雷达提供深度,相机提供颜色。融合后的数据,既有精确的3D坐标,又有丰富的语义信息。比如,我们通过点云知道那里有一根杆子,通过图像知道那是一根交通指示牌。

3.3 GPS/IMU组合导航:知道“我在哪”

这是整个系统的“定海神针”。没有它,所有的传感器数据都是“漂”的。GPS提供绝对位置,但容易受遮挡;IMU提供相对姿态,但会随时间漂移。两者组合,才能得到稳定、高频率的位姿。

核心概念

  • GPS(全球定位系统):提供经纬度、海拔。精度在米级,差分GPS(RTK)可以到厘米级。
  • IMU(惯性测量单元):包含加速度计和陀螺仪。测量加速度和角速度,积分得到速度和姿态。
  • 组合导航:通过卡尔曼滤波等算法,融合GPS和IMU数据。在GPS信号好的时候,用GPS修正IMU的漂移;在GPS信号丢失时(如隧道),用IMU进行推算。

警告/注意事项: 组合导航的初始化很重要。车辆启动后,需要静止一段时间(通常1-2分钟),让IMU完成初始对准。我曾经见过有人没做初始化就直接开出去采集,结果整段数据的姿态都是错的,全部作废。

选型建议

对于高精地图采集,我建议使用战术级或导航级IMU。消费级的IMU(比如手机里的)漂移太快,几分钟就偏得没边了。好的组合导航系统,比如NovAtel、Applanix,价格不菲,但物有所值。

3.4 多传感器标定基础:让它们“说同一种语言”

这是最容易被忽视,但也是最重要的一步。你想想看,激光雷达有自己的坐标系,相机有相机的坐标系,IMU也有自己的坐标系。如果不把它们统一起来,数据就是“鸡同鸭讲”。

标定什么?

  • 内参标定:标定传感器自身的参数。比如相机的焦距、畸变系数;激光雷达的旋转轴偏移。
  • 外参标定:标定传感器之间的相对位置和姿态。比如激光雷达坐标系到相机坐标系的旋转矩阵和平移向量。

标定方法

  1. 目标法:使用标定板、标定间。精度高,但操作繁琐。我习惯在项目初期用这个方法,建立基准。
  2. 无目标法:利用自然场景中的特征(如建筑物角点、车道线)进行自动标定。方便,但鲁棒性稍差。

代码示例:激光雷达与相机外参标定(伪代码)

// 1. 从点云中提取角点特征
std::vector<Point3D> lidar_corners = extractCornersFromPointCloud(cloud);

// 2. 从图像中提取对应的角点特征
std::vector<Point2D> image_corners = extractCornersFromImage(image);

// 3. 使用PnP算法求解外参
// 输入:3D点、2D点、相机内参
// 输出:旋转矩阵R,平移向量t
solvePnP(lidar_corners, image_corners, camera_matrix, dist_coeffs, R, t);

// 4. 验证:将点云投影到图像上,检查重合度
projectPointCloudToImage(cloud, R, t, camera_matrix);

重要内容: 标定不是一劳永逸的。车辆震动、温度变化都可能导致外参发生微小变化。我建议,每次出车采集前,都做一次快速验证标定。如果发现投影误差超过3个像素,就需要重新标定了。

好了,这一章的内容就到这里。传感器是数据的源头,源头出了问题,后面再怎么处理也是白搭。下一章,我们会聊聊如何把这些原始数据,变成真正可用的地图要素。