ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

FAST-LIO2实战:在ROS Noetic下部署并跑通自己的数据集(避坑记录)

FAST-LIO2实战:在ROS Noetic下部署并跑通自己的数据集(避坑记录)

FAST-LIO2实战:在ROS Noetic下部署并跑通自己的数据集(避坑记录)

当第一次看到FAST-LIO2在复杂环境下依然能稳定输出厘米级定位精度时,我就被这个开源算法深深吸引了。作为一个长期从事移动机器人定位研究的工程师,我深知在实际项目中,理论上的性能指标和落地效果之间往往存在巨大鸿沟。本文将分享我在Ubuntu 20.04 + ROS Noetic环境下部署FAST-LIO2的全过程,特别针对使用Livox Mid-40雷达和自定义数据集的实战经验,其中包含多个官方文档未提及的关键细节和避坑指南。

1. 环境准备与源码编译

1.1 系统依赖配置

在开始编译前,需要确保系统已安装以下关键组件:

sudo apt-get install -y ros-noetic-pcl-ros ros-noetic-livox-ros \ libeigen3-dev libboost-all-dev libyaml-cpp-dev

特别提醒:Eigen版本必须≥3.3.4,否则会在编译ikd-Tree时出现模板元编程错误。我曾因系统默认安装的3.3.2版本浪费了两小时排查时间。

1.2 源码获取与编译

推荐使用以下命令克隆最新代码(含关键submodule):

git clone --recursive https://github.com/hku-mars/FAST_LIO.git cd FAST_LIO mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. make -j$(nproc)

常见编译错误处理:

  • PCL版本冲突:若遇到pcl::PointCloud相关模板错误,需检查/usr/include/pcl-1.10/pcl/impl/point_types.hpp是否被错误引用,解决方案是强制指定正确的PCL路径:
find_package(PCL 1.10 REQUIRED) include_directories(${PCL_INCLUDE_DIRS})
  • Livox驱动问题:如果使用非Livox雷达,需在CMakeLists.txt中注释掉find_package(livox_ros_driver REQUIRED),否则会导致编译中断。

2. 传感器配置与标定

2.1 外参标定实战

FAST-LIO2的性能极度依赖准确的雷达-IMU外参,推荐采用以下两种标定方法:

方法对比表:

标定方法精度评估耗时适用场景
手动测量±5cm10min简单机械结构
LI-Init标定±1cm30min复杂安装环境
运动激励标定±2cm45min无专业标定工具时

对于Livox雷达,强烈建议使用官方提供的livox_camera_lidar_calibration工具。关键操作步骤:

  1. 采集静态标定板数据时,保持雷达与标定板距离在1-3米范围内
  2. 运动激励阶段采用"8字形"轨迹,持续至少2分钟
  3. 检查标定结果中的rotation_matrix是否满足正交性条件:
import numpy as np R = np.load('extrinsic_R.npy') print("正交性误差:", np.linalg.norm(R @ R.T - np.eye(3)))

2.2 参数文件深度解析

config/avia.yaml为例,关键参数调优建议:

preprocess: lidar_type: 1 # Livox雷达设为1 point_filter_num: 1 # 降采样率,Livox建议保持1 feature_extract: N_SCAN: 6 # 对应Livox的线数 edge_threshold: 0.1 # 角点判定阈值,室外可提高到0.15

避坑提示:

  • timestamp_unit必须与bag包实际时间戳单位一致(Livox通常为ns级)
  • imu_topic名称需与实际ROS话题完全匹配(包括大小写)

3. 数据集运行与实时测试

3.1 Bag包播放技巧

对于录制质量不佳的自定义bag包,推荐使用以下预处理命令:

rosbag play your_data.bag -r 0.5 --clock --pause -d 5

关键参数说明:

  • -r 0.5:降速播放,避免丢帧
  • --pause:先暂停等待节点启动
  • -d 5:延迟5秒,给ROS Master留出初始化时间

实时数据采集建议:

  • 使用rosbag record时务必添加--split --duration=30参数,避免生成超大bag文件
  • 对于Livox雷达,设置rosbag record /livox/imu /livox/lidar确保话题同步

3.2 建图质量优化

当遇到点云模糊或轨迹漂移时,按以下步骤排查:

  1. 检查IMU数据质量

    rostopic echo /imu/data | grep linear_acceleration

    正常值范围:重力加速度≈9.8m/s²,非静止状态下应有明显变化

  2. 调整运动补偿参数

    motion_compensation: enable: true scan_period: 0.1 # 与雷达扫描周期严格一致
  3. 关键性能指标监控

    • 使用rqt_graph确认所有话题连接正常
    • 通过top命令观察CPU占用,正常情况应<150%

4. 高级调试与性能优化

4.1 可视化调试技巧

推荐使用自定义RViz配置,添加以下显示组件:

  • PointCloud2:订阅/cloud_registered话题,设置Size=0.05
  • Path:订阅/odometry_path话题,设置Line Width=0.02
  • TF:勾选/livox_frame/base_link坐标系

诊断工具链:

rosrun rqt_console rqt_console # 查看详细日志 rosrun plotjuggler plotjuggler # 分析IMU和位姿数据

4.2 多传感器融合配置

对于需要融合轮式里程计的场景,修改laserMapping.cpp中的回调函数:

void odomCallback(const nav_msgs::Odometry::ConstPtr& msg) { Eigen::Quaterniond q(msg->pose.pose.orientation.w, msg->pose.pose.orientation.x, msg->pose.pose.orientation.y, msg->pose.pose.orientation.z); Eigen::Vector3d t(msg->pose.pose.position.x, msg->pose.pose.position.y, msg->pose.pose.position.z); odom_buffer.push_back(std::make_pair(q, t)); }

同步策略建议:

  • 使用message_filters实现严格时间同步
  • 设置最大时间偏移阈值(建议≤0.01s)

经过三个月的实际项目验证,FAST-LIO2在室内结构化环境中能达到2cm的定位精度,而在室外开阔场景下,即使面对30%的特征缺失情况,仍能保持5cm以内的稳定输出。最令我惊喜的是其CPU占用率始终保持在单核30%以下,这为边缘计算设备上的部署提供了极大便利。

返回列表