第4章 传感器驱动集成:LiDAR驱动配置(Velodyne/RS-LiDAR)、摄像头驱动配置(USB/Camera)、IMU/GPS驱动配置、传感器标定基础

好,咱们进入第四章。这一章,说白了就是让Autoware的「眼睛」和「耳朵」能正常工作。

传感器驱动集成,是整个系统搭建里最磨人的环节之一。我见过太多团队,算法调得飞起,结果一上车发现雷达不出点云、摄像头黑屏、IMU数据乱跳……嗯,那场面,相当尴尬。

所以这一章,咱们把每个传感器的驱动配置掰开揉碎,讲清楚。你跟着我的节奏走,能少踩很多坑。

4.1 LiDAR驱动配置:Velodyne与RS-LiDAR

LiDAR是自动驾驶的「主力眼睛」。目前主流的两大派系,一个是Velodyne(老牌劲旅),一个是RS-LiDAR(国产新贵)。驱动配置上,思路类似,但细节不同。

4.1.1 Velodyne驱动配置

我个人习惯用 velodyne_driver 这个ROS包。安装很简单,直接apt或者源码编译都行。

sudo apt install ros-noetic-velodyne-driver ros-noetic-velodyne-pointcloud

装完之后,核心是配置 velodyne_driver_node 的launch文件。你需要指定雷达的IP地址、端口号、以及型号。

举个例子,我手头有一台VLP-16,它的默认IP是192.168.1.201。那我的launch文件大概长这样:

<launch>
  <node pkg="velodyne_driver" type="velodyne_driver_node" name="velodyne_driver">
    <param name="model" value="VLP16"/>
    <param name="device_ip" value="192.168.1.201"/>
    <param name="port" value="2368"/>
    <param name="frame_id" value="velodyne"/>
  </node>
</launch>
注意: 记得把电脑的IP设置成和雷达同一网段(比如192.168.1.x)。否则你连不上它。我曾经因为网线插错交换机,折腾了半小时才发现是IP冲突。

启动之后,用 rostopic echo /velodyne_points 就能看到点云数据了。如果没数据,先ping一下雷达IP,确认网络通不通。

4.1.2 RS-LiDAR驱动配置

RS-LiDAR(速腾聚创)的驱动,官方叫 rslidar_sdk。它支持多种型号,比如RS-16、RS-32、RS-80等。

配置方式稍微有点不同。你需要先下载源码,然后编译:

git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git
cd rslidar_sdk
mkdir build && cd build
cmake .. && make -j4

编译完成后,修改 config/config.yaml 文件。这里要指定雷达的型号、IP、以及点云坐标系。

lidar:
  - driver:
      lidar_type: RS16          # 根据你的型号改
      msop_port: 6699           # 默认端口
      difop_port: 7788
      start_angle: 0
      end_angle: 360
      frame_id: rslidar
      device_ip: 192.168.1.200  # 雷达IP
小技巧: RS-LiDAR的驱动默认会输出原始点云和分割后的点云。如果你只需要原始点云,可以在配置里把 pointcloud_type 设为 XYZI。

启动命令:

roslaunch rslidar_sdk start.launch

嗯,这里要注意,RS-LiDAR的驱动有时候会因为网络延迟丢包。我建议你检查一下网卡配置,开启巨型帧(Jumbo Frame)能改善不少。

4.2 摄像头驱动配置:USB与CSI Camera

摄像头是视觉感知的基础。Autoware里常用的摄像头有两种接口:USB和CSI(比如树莓派的摄像头)。

4.2.1 USB摄像头驱动

USB摄像头驱动,最常用的是 usb_cam 包。安装:

sudo apt install ros-noetic-usb-cam

启动节点:

roslaunch usb_cam usb_cam-test.launch

默认它会打开 /dev/video0。如果你有多个摄像头,记得修改launch文件里的 video_device 参数。

我个人习惯把分辨率设为1280x720,帧率30fps。太高了带宽扛不住,太低了图像卡顿。

<param name="image_width" value="1280"/>
<param name="image_height" value="720"/>
<param name="framerate" value="30"/>
避坑指南: 我曾经遇到过USB摄像头插上后,系统识别为 /dev/video1 而不是 /dev/video0。结果launch文件没改,一直黑屏。所以启动前,先用 ls /dev/video* 确认一下设备号。

4.2.2 CSI摄像头驱动(以树莓派为例)

CSI摄像头走的是MIPI接口,延迟比USB低。在树莓派上,驱动用 raspicam_node。

sudo apt install ros-noetic-raspicam-node

启动:

roslaunch raspicam_node camerav2_410.launch

这里有个坑:树莓派的摄像头需要先启用 raspi-config 里的Camera接口。否则驱动会报错。

嗯,CSI摄像头的图像质量通常比USB好,但布线要小心。我见过有人把排线扯断了,结果图像全是雪花。

4.3 IMU/GPS驱动配置

IMU和GPS,是自动驾驶的「耳朵」和「导航仪」。它们提供姿态、角速度、位置信息。

4.3.1 IMU驱动

IMU驱动,我用得最多的是 imu_driver 或者 xsens_imu。以常见的MPU9250为例,可以用 mpu9250_imu 包。

sudo apt install ros-noetic-mpu9250-imu

启动:

roslaunch mpu9250_imu mpu9250_imu.launch

IMU数据的关键参数是 frame_id 和 orientation。我建议你把IMU的坐标系和车体坐标系对齐,否则后续的融合算法会出问题。

个人经验: IMU的零偏(bias)需要校准。我一般把IMU静止放置10秒,取平均值作为零偏。否则你开车时,IMU会以为你在漂移。

4.3.2 GPS驱动

GPS驱动,常用的是 nmea_navsat_driver。它支持NMEA协议,大部分GPS模块都兼容。

sudo apt install ros-noetic-nmea-navsat-driver

启动:

roslaunch nmea_navsat_driver nmea_serial_driver.launch

你需要指定串口设备(比如 /dev/ttyUSB0)和波特率(通常是9600或115200)。

嗯,GPS信号在室内基本没用。我第一次测试时,在车库里等了五分钟没定位,后来才发现是屋顶挡住了卫星。

4.4 传感器标定基础

传感器标定,说白了就是让不同传感器「说同一种语言」。LiDAR和摄像头看到的同一个物体,坐标必须对齐。

标定分为两部分:内参标定和外参标定。

  • 内参标定:校准传感器自身的参数(比如摄像头的焦距、畸变系数)。
  • 外参标定:校准传感器之间的相对位置和姿态(比如LiDAR和摄像头之间的旋转和平移)。

4.4.1 摄像头内参标定

用棋盘格标定板,配合 camera_calibration 包。

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera

你拿着标定板在摄像头前晃动,程序会自动采集角点。采集足够后,点击「CALIBRATE」,然后「SAVE」。

注意: 标定板要平整,不能有折痕。我见过有人用打印纸,结果标定出来的畸变系数全是错的。

4.4.2 LiDAR与摄像头联合标定

这个稍微复杂一点。Autoware官方推荐用 lidar_camera_calibration 包。

你需要准备一个带有特征点的标定板(比如棋盘格或圆形靶标)。然后同时采集LiDAR点云和摄像头图像,手动选取对应点。

标定结果是一个4x4的变换矩阵,表示LiDAR坐标系到摄像头坐标系的转换。

| R   t |
| 0   1 |

其中R是旋转矩阵,t是平移向量。

嗯,这个标定过程很考验耐心。我当年标定一次花了两个小时,结果发现有一个点选歪了……后来我写了个脚本自动匹配,省了不少时间。

知识体系总览

下面这张SVG图,帮你理清本章的核心逻辑:

传感器驱动集成知识体系 LiDAR驱动 Velodyne: velodyne_driver RS-LiDAR: rslidar_sdk 配置IP/端口/型号 摄像头驱动 USB: usb_cam CSI: raspicam_node 分辨率/帧率/设备号 IMU/GPS驱动 IMU: mpu9250_imu GPS: nmea_navsat_driver 串口/波特率/坐标系 传感器标定基础 内参标定:摄像头焦距/畸变 外参标定:LiDAR↔Camera变换矩阵 输出:/velodyne_points /image_raw /imu/data /fix 供感知、定位、规划模块使用

好了,这一章的内容就到这里。传感器驱动集成,看似琐碎,但每一步都关系到后续算法的成败。你按照上面的步骤来,应该能顺利跑通。

记住,遇到问题先检查网络、设备号、坐标系。这三个地方出错的概率最高。

核心要点回顾:
  • LiDAR驱动:Velodyne用velodyne_driver,RS-LiDAR用rslidar_sdk,注意IP和端口。
  • 摄像头驱动:USB用usb_cam,CSI用raspicam_node,确认设备号。
  • IMU/GPS驱动:IMU需校准零偏,GPS需室外空旷环境。
  • 标定:内参标定用棋盘格,外参标定用联合标定工具。

可可精品资料库