手把手教你用Livox Mid-360跑通LIO-SAM:从CustomMsg数据转换到完整配置流程
当固态激光雷达遇上传统SLAM框架,数据兼容性问题往往成为开发者的第一道门槛。Livox Mid-360作为一款非重复扫描式雷达,其点云分布特性与机械旋转雷达存在本质差异。本文将带您零基础实现Livox Mid-360与LIO-SAM的无缝对接,重点突破CustomMsg数据转换这一技术节点。
1. 环境准备与驱动安装
在开始前,请确保系统已安装ROS Melodic或Noetic(建议Ubuntu 18.04/20.04),并完成基础开发工具链配置:
sudo apt-get install -y build-essential cmake git libeigen3-devLivox官方驱动安装需执行以下步骤:
mkdir -p ~/livox_ws/src cd ~/livox_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver.git cd .. rosdep install --from-paths src --ignore-src -r -y catkin_make注意:若遇到
livox_sdk依赖缺失,需手动克隆Livox-SDK到src目录
验证驱动是否正常工作:
source devel/setup.bash roslaunch livox_ros_driver livox_lidar_msg.launch此时应能看到终端输出点云发布日志,表示雷达已正确连接。
2. 数据类型转换关键实现
LIO-SAM原生支持sensor_msgs/PointCloud2,而Livox驱动输出的是livox_ros_driver/CustomMsg。我们需要修改三处核心代码:
2.1 消息头文件修改
在include/utility.h中添加CustomMsg支持:
#include <livox_ros_driver/CustomMsg.h> typedef livox_ros_driver::CustomMsg PointCloudMsg;2.2 回调函数适配
修改imageProjection.cpp中的点云回调:
void cloudHandler(const PointCloudMsg::ConstPtr& livoxMsg) { pcl::PointCloud<PointType>::Ptr cloud(new pcl::PointCloud<PointType>); for (unsigned int i = 0; i < livoxMsg->point_num; ++i) { PointType point; point.x = livoxMsg->points[i].x; point.y = livoxMsg->points[i].y; point.z = livoxMsg->points[i].z; cloud->push_back(point); } // 后续处理逻辑保持不变... }2.3 Launch文件配置
创建新的启动文件mid360.launch:
<launch> <include file="$(find livox_ros_driver)/launch/livox_lidar_msg.launch"/> <node pkg="lio_sam" type="lio_sam_imuPreintegration" name="lio_sam_imuPreintegration" output="screen"> <remap from="/livox/lidar" to="/pointcloud" /> </node> </launch>3. 实战调试与性能优化
3.1 常见报错解决方案
| 错误类型 | 现象描述 | 修复方法 |
|---|---|---|
| TF缺失 | No transform between [odom] and [base_link] | 检查IMU数据是否正常发布 |
| 点云异常 | 特征点提取失败 | 调整config/params.yaml中的edgeThreshold和surfThreshold |
| 内存泄漏 | 运行一段时间后崩溃 | 在CMakeLists.txt中添加-O3优化选项 |
3.2 参数调优建议
- 点云降采样:将
downsampleRate设为0.2-0.3以平衡精度与性能 - IMU融合:增大
imuAccNoise和imuGyrNoise值可降低高频振动影响 - 回环检测:调整
loopSearchRadius至1.5-2.0米适应室内场景
# config/params.yaml 关键参数示例 featureExtraction: edgeThreshold: 0.1 surfThreshold: 0.05 mapping: maxIteration: 44. 效果验证与场景测试
完成部署后,通过以下命令启动完整系统:
roslaunch lio_sam mid360.launch在RViz中添加以下显示项可获得最佳可视化效果:
- PointCloud2:话题
/laser_cloud_surround - Path:话题
/odometry_path - TF:坐标系
map到base_link
实测数据表明,在16线等效配置下,Mid-360与LIO-SAM组合可实现:
- 定位精度:室内环境±5cm,室外开阔区域±15cm
- 建图速率:8-12Hz(i7-11800H处理器)
- 内存占用:约1.2GB(典型办公场景)
对于需要多雷达融合的场景,可在livox_lidar_msg.launch中设置多设备ID:
<param name="multi_topic" type="bool" value="true"/> <param name="lidar_bag" type="string" value="livox1 livox2"/>