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中的配置步骤:

  1. 修改modules/drivers/velodyne/conf/velodyne.conf
  2. 设置激光雷达型号(HDL-64E、VLP-16、HDL-32E)
  3. 配置IP地址和端口号
  4. 设置坐标系变换(通常为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系列。

配置要点:

  1. 设置串口或网口通信参数
  2. 配置IMU的安装位置(前轴中心、后轴中心等)
  3. 设置GPS的更新频率(一般10Hz)
  4. 配置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驱动 Velodyne vs RoboSense • IP/端口配置 • 坐标系变换 • 多雷达同步 Camera驱动 USB / GMSL接口 • 曝光/白平衡 • 帧率控制 • 多相机同步 IMU/GPS融合 NovAtel / Honeywell • 串口/网口通信 • 坐标系对齐 • 频率匹配 核心要点 • LiDAR:注意IP端口不冲突,坐标系要统一 • Camera:手动曝光更稳定,帧率不是越高越好 • IMU/GPS:安装方向和坐标系定义必须一致

说白了,传感器驱动配置的核心就三点:通信参数别搞错、坐标系要对齐、频率要匹配。你想想看,如果LiDAR的点云坐标系跟IMU的坐标系差了90度,那融合出来的定位数据能准吗?

我个人建议,刚开始接触Apollo和Autoware的朋友,先从LiDAR驱动入手。因为LiDAR的数据最直观,点云图出来了没,一眼就能看出来。Camera驱动次之,因为曝光参数需要反复调。IMU/GPS融合驱动最难,因为数据是抽象的,出了问题不容易定位。

最后提醒一句:不管用哪个平台,传感器驱动配置完成后,一定要做一次「数据回放验证」。就是录一段bag包,然后离线回放,看看数据是不是连续的、有没有丢帧。我曾经跳过这一步,结果上路测试时发现GPS数据每隔10秒就断一次,差点出事故。

可可精品资料库