第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>
启动之后,用 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
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"/>
/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的坐标系和车体坐标系对齐,否则后续的融合算法会出问题。
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需校准零偏,GPS需室外空旷环境。
- 标定:内参标定用棋盘格,外参标定用联合标定工具。
可可精品资料库