1. 项目概述
在机器人感知系统中,激光雷达和惯性测量单元(IMU)是两种最核心的传感器设备。RoboSense Helios 32(速腾)是一款高性能32线激光雷达,而Xsens MTi 300则是工业级IMU设备。本文将详细介绍在ROS1 Noetic环境下如何配置这两款设备,实现它们的协同工作。
作为机器人开发者,我经常需要将不同厂商的传感器集成到ROS系统中。这个过程看似简单,但实际上会遇到各种意料之外的问题。通过本文,我将分享从硬件连接到软件配置的完整流程,以及我在实际项目中积累的经验技巧。
2. 硬件准备与网络配置
2.1 雷达网络配置
速腾Helios 32雷达采用以太网通信,首先需要配置电脑与雷达的网络连接:
- 安装Wireshark网络分析工具:
bash复制sudo apt install wireshark-qt
- 启动Wireshark捕获雷达数据包:
bash复制sudo wireshark
在Wireshark界面中,选择与雷达连接的网卡(通常是enp或eth开头的接口),开始捕获数据包。雷达上电后,你会看到类似下图的数据包交换:

关键是要记录下"Who"和"Tell"后面的IP地址:
- "Who"地址是雷达期望电脑使用的IP
- "Tell"地址是雷达自身的IP
注意:不同型号的速腾雷达默认IP可能不同,Helios 32通常使用192.168.1.200。如果无法捕获数据包,请检查网线连接和雷达电源。
2.2 电脑网络配置
根据捕获到的"Who"地址配置电脑的静态IP。以Ubuntu为例:
- 打开网络设置 → 选择有线连接 → IPv4设置
- 方法选择"手动"
- 添加地址:输入"Who"地址(如192.168.1.102),子网掩码通常为255.255.255.0
- 保存设置
配置完成后,测试网络连通性:
bash复制ping 192.168.1.200
如果ping不通,请检查:
- 防火墙是否阻止了ICMP请求
- 网线是否接触良好
- 雷达电源是否正常
2.3 访问雷达Web界面
在浏览器中输入雷达IP地址("Tell"地址),可以访问雷达的Web配置界面。这里可以查看和修改雷达的各种参数,如:
- MSOP端口(默认6699)
- DIFOP端口(默认7788)
- 雷达旋转频率(通常10Hz或20Hz)
- 返回模式(单回波/双回波)

重要:记录下这些参数,后续驱动配置需要与之对应。特别是端口号,如果修改了默认值,必须在驱动配置中同步修改。
3. 驱动安装与配置
3.1 速腾雷达ROS驱动
- 创建工作空间并下载驱动:
bash复制mkdir -p ~/driver_ws/src
cd ~/driver_ws/src
git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git
- 初始化子模块:
bash复制cd rslidar_sdk
git submodule init
git submodule update
- 安装依赖库:
bash复制sudo apt-get update
sudo apt-get install -y libyaml-cpp-dev libpcap-dev
- 编译工作空间:
bash复制cd ~/driver_ws
catkin_make
常见问题:如果编译报错找不到yaml-cpp,可能需要手动安装:
bash复制sudo apt-get install libyaml-cpp-dev
3.2 配置雷达参数
编辑rslidar_sdk/config/config.yaml文件,关键配置如下:
yaml复制common:
msg_source: 1 # 1表示使用在线雷达
send_point_cloud_ros: true # 发布点云话题
lidar:
- driver:
lidar_type: RSHELIOS # 雷达型号
msop_port: 6699 # MSOP端口
difop_port: 7788 # DIFOP端口
use_lidar_clock: true # 使用雷达时钟
min_distance: 0.2 # 最小检测距离
max_distance: 200 # 最大检测距离
ros:
ros_frame_id: rslidar # 坐标系名称
ros_send_point_cloud_topic: /rslidar_points # 点云话题
注意:端口号必须与雷达Web界面中的设置一致。如果雷达使用非标准端口,必须在此处相应修改。
3.3 Xsens MTi 300 IMU配置
- 为USB设备添加权限:
bash复制ls /dev/ttyUSB* # 查看设备节点
sudo chmod 777 /dev/ttyUSB0 # 赋予权限
- 下载并编译驱动:
bash复制cd ~/Downloads
git clone https://github.com/xsenssupport/Xsens_MTi_ROS_Driver_and_Ntrip_Client.git
cp -r Xsens_MTi_ROS_Driver_and_Ntrip_Client/ros/src/xsens_ros_mti_driver ~/driver_ws/src/
- 安装依赖:
bash复制sudo apt install ros-noetic-nmea-msgs ros-noetic-mavros-msgs
- 编译驱动:
bash复制cd ~/driver_ws
catkin_make
提示:如果遇到权限问题,可以执行:
bash复制sudo chmod -R o+rw src/xsens_ros_mti_driver/
4. 设备测试与时间同步
4.1 雷达测试
启动雷达节点:
bash复制source devel/setup.bash
roslaunch rslidar_sdk start.launch
如果一切正常,你应该能看到点云数据:
bash复制rostopic echo /rslidar_points
常见问题:如果没有数据,检查:
- 雷达电源和网络连接
- 防火墙设置(sudo ufw disable可以临时关闭防火墙测试)
- config.yaml中的参数是否正确
4.2 IMU测试
启动IMU节点:
bash复制roslaunch xsens_ros_mti_driver xsens_mti_node.launch
检查IMU数据:
bash复制rostopic echo /imu/data
4.3 时间同步
对于多传感器融合,时间同步至关重要。推荐使用PTP协议进行硬件时间同步:
- 安装ptpd:
bash复制sudo apt install linuxptp
- 启动PTP服务:
bash复制sudo ptp4l -m -i enp11s0 -S
- 在ROS中使用message_filters进行时间同步:
python复制import message_filters
from sensor_msgs.msg import PointCloud2, Imu
def callback(pointcloud, imu):
# 处理同步后的数据
pass
pointcloud_sub = message_filters.Subscriber('/rslidar_points', PointCloud2)
imu_sub = message_filters.Subscriber('/imu/data', Imu)
ts = message_filters.ApproximateTimeSynchronizer(
[pointcloud_sub, imu_sub],
queue_size=10,
slop=0.1)
ts.registerCallback(callback)
经验分享:时间同步是传感器融合中最容易出问题的环节。如果发现数据不同步,可以:
- 检查各设备的时间源设置
- 调整slop参数容忍更大的时间差
- 考虑使用硬件同步方案
5. 高级配置与优化
5.1 雷达点云优化
速腾雷达支持多种点云输出格式。在CMakeLists.txt中可以启用额外功能:
cmake复制set(ENABLE_TRANSFORM_XYZI ON)
set(ENABLE_POINT_TYPE_XYZIRT ON)
重新编译后,点云消息将包含ring(线号)和timestamp(时间戳)信息,这对于SLAM算法非常重要。
5.2 IMU参数校准
使用Xsens的MT软件套件可以进行IMU校准:
- 下载MT软件套件:
bash复制wget https://www.xsens.com/hubfs/Software/MT_Software_Suite_linux-x64_2025.2.sh
- 安装依赖:
bash复制sudo apt-get install sharutils libdouble-conversion1 libicu60
- 运行安装程序:
bash复制sudo ./MT_Software_Suite_linux-x64_2025.2.sh
- 启动MT Manager进行校准:
bash复制cd /opt/xsens/MT_Software_Suite_linux-x64_2025.2/mtmanager/linux-x64/bin
./mtmanager
在校准界面中,按照向导完成静态校准和动态校准,可以显著提高IMU精度。
5.3 性能优化建议
- 雷达配置优化:
- 根据应用场景调整旋转频率(室内10Hz足够,室外可能需要20Hz)
- 合理设置min_distance和max_distance,减少无效点云
- 启用dense_points过滤NaN点
- IMU配置优化:
- 设置合适的波特率(推荐921600)
- 根据应用选择输出频率(200Hz-400Hz是常用范围)
- 启用内置滤波器减少噪声
- ROS系统优化:
- 使用nodelet减少数据传输开销
- 调整缓冲区大小防止数据丢失
- 考虑使用零拷贝传输提高效率
6. 常见问题排查
6.1 雷达无数据
可能原因及解决方案:
- 网络配置错误 → 检查IP和端口设置
- 防火墙阻止 → 临时关闭防火墙测试
- 雷达故障 → 通过Web界面检查状态
6.2 IMU数据漂移
处理方法:
- 进行静态校准
- 检查安装是否牢固
- 避免靠近强磁场源
6.3 时间同步失败
调试步骤:
- 检查PTP服务是否正常运行
- 确认所有设备使用相同时间源
- 调整同步算法的slop参数
6.4 系统资源占用过高
优化建议:
- 降低传感器输出频率
- 使用轻量级消息类型
- 考虑使用多机分布式架构
在实际项目中,我遇到过各种奇怪的问题。有一次雷达数据时有时无,最后发现是网线接触不良。还有一次IMU数据完全错误,原来是安装位置靠近电机产生了强磁场干扰。这些经验告诉我,传感器配置不仅要注意软件参数,硬件环境同样重要。
