4、传感器驱动对比:LiDAR驱动配置(Velodyne vs RoboSense)、Camera驱动、IMU/GPS融合驱动
传感器驱动,说白了就是自动驾驶系统的「眼睛」和「耳朵」怎么跟大脑对话。我这些年折腾过不少传感器,从Velodyne的HDL-64E到RoboSense的RS-LiDAR-32,再到各种工业相机和组合导航设备。说实话,每个厂家的驱动都有各自的脾气,配置起来坑也不少。
今天咱们就掰开揉碎了聊聊,Apollo和Autoware在这三块传感器驱动上到底怎么配、怎么调、怎么避坑。
4.1 LiDAR驱动配置:Velodyne vs RoboSense
激光雷达是自动驾驶的「主力眼睛」。Apollo和Autoware都支持主流品牌,但配置方式差别挺大。
4.1.1 Velodyne驱动配置
Velodyne的驱动在Apollo里叫velodyne_driver,在Autoware里叫velodyne_pointcloud。我个人习惯用Apollo的版本,因为它对多雷达同步支持得更好。
Apollo中的配置步骤:
- 修改
modules/drivers/velodyne/conf/velodyne.conf - 设置激光雷达型号(HDL-64E、VLP-16、HDL-32E)
- 配置IP地址和端口号
- 设置坐标系变换(通常为
velodyne64到novatel)
核心配置示例(Apollo):
# 在velodyne.conf中
model: VLP-16
frame_id: "velodyne16"
ip: "192.168.1.201"
port: 2368
scan_angle: 360
rpm: 600
嗯,这里要注意一个坑。Velodyne的默认IP是192.168.1.201,但如果你用的是多雷达系统,每个雷达的IP必须不同。我曾经在一个项目里忘了改IP,结果两个雷达的数据在ROS里打架,点云图直接糊成一团。
4.1.2 RoboSense驱动配置
RoboSense(速腾聚创)的雷达这两年越来越火,性价比确实高。但它的驱动配置跟Velodyne不太一样。
Autoware中的配置要点:
- 使用
rslidar_sdk驱动包 - 需要配置
config.yaml中的激光雷达参数 - 特别注意
msop_port和difop_port的对应关系
避坑指南:我曾经在配置RS-LiDAR-32时,发现点云数据一直断断续续。查了半天,原来是difop_port设成了跟msop_port一样的值。RoboSense的这两个端口必须不同,一般msop用6699,difop用7788。
| 参数 | Velodyne VLP-16 | RoboSense RS-LiDAR-32 |
|---|---|---|
| 数据端口 | 2368 | 6699 |
| 控制端口 | 8308 | 7788 |
| 坐标系 | velodyne16 | rslidar |
| 驱动包 | velodyne_driver | rslidar_sdk |
4.2 Camera驱动配置
相机驱动看起来简单,但实际坑最多。为什么?因为相机参数太敏感了,曝光、白平衡、帧率,哪个调不好都影响感知效果。
Apollo的Camera驱动:
- 使用
modules/drivers/camera模块 - 支持USB和GMSL接口相机
- 配置文件在
conf/camera.conf
# camera.conf 核心参数
camera_name: "front_6mm"
camera_type: "usb_cam"
pixel_format: "yuyv"
image_width: 1920
image_height: 1080
frame_rate: 30
auto_exposure: false
exposure_time: 5000 # 微秒
我个人建议把auto_exposure关掉。为什么?因为自动驾驶场景变化太快,自动曝光会导致画面忽明忽暗,感知算法根本受不了。我一般手动设一个固定曝光值,比如白天5000微秒,晚上10000微秒。
Autoware的Camera驱动:
Autoware用的是ROS标准的usb_cam或gscam驱动。配置方式更灵活,但需要自己写launch文件。
注意:Autoware的相机驱动默认是30帧,但如果你同时跑多个相机,CPU可能会扛不住。我建议根据实际需求降到15帧,对感知精度影响不大,但CPU占用能降一半。
4.3 IMU/GPS融合驱动
IMU和GPS的融合驱动,说白了就是给定位系统提供「加速度+角速度+位置」的原始数据。Apollo和Autoware都支持NovAtel、Honeywell等主流组合导航设备。
4.3.1 Apollo的IMU/GPS驱动
Apollo使用modules/drivers/gnss模块,支持NovAtel的OEM系列和Honeywell的HG系列。
配置要点:
- 设置串口或网口通信参数
- 配置IMU的安装位置(前轴中心、后轴中心等)
- 设置GPS的更新频率(一般10Hz)
- 配置IMU的角速度偏移校准
# gnss.conf 核心配置
gnss_type: "novatel"
serial_port: "/dev/ttyUSB0"
baud_rate: 115200
imu_frame_id: "imu"
gps_frame_id: "gps"
imu_rate: 100 # 100Hz
gps_rate: 10 # 10Hz
4.3.2 Autoware的IMU/GPS驱动
Autoware使用nmea_navsat_driver和imu_driver两个独立包。说实话,这种方式更灵活,但配置起来也更麻烦。
我踩过的坑:有一次在Autoware里配NovAtel的IMU,发现角速度数据一直飘。查了三天,最后发现是IMU的安装方向跟坐标系定义不一致。NovAtel的IMU默认Z轴向上,但Autoware的坐标系里Z轴是向下的。解决办法是在launch文件里加一个imu_tf变换。
小技巧:如果你用的是NovAtel的OEM7系列,建议直接用Apollo的驱动。Autoware的驱动对OEM7支持不太好,我试过几次都出现数据丢包。
4.4 传感器驱动对比总结
咱们用一张SVG图来总结一下这三大传感器驱动的核心逻辑:
说白了,传感器驱动配置的核心就三点:通信参数别搞错、坐标系要对齐、频率要匹配。你想想看,如果LiDAR的点云坐标系跟IMU的坐标系差了90度,那融合出来的定位数据能准吗?
我个人建议,刚开始接触Apollo和Autoware的朋友,先从LiDAR驱动入手。因为LiDAR的数据最直观,点云图出来了没,一眼就能看出来。Camera驱动次之,因为曝光参数需要反复调。IMU/GPS融合驱动最难,因为数据是抽象的,出了问题不容易定位。
最后提醒一句:不管用哪个平台,传感器驱动配置完成后,一定要做一次「数据回放验证」。就是录一段bag包,然后离线回放,看看数据是不是连续的、有没有丢帧。我曾经跳过这一步,结果上路测试时发现GPS数据每隔10秒就断一次,差点出事故。