
1. 项目概述当Livox Mid-360遇上FAST_LIO最近在折腾Livox Mid-360这款固态激光雷达想把它和FAST_LIO这套目前挺火的激光惯性里程计LIO算法跑起来环境是大家最熟悉的Ubuntu 20.04。这其实是一个挺典型的机器人感知与定位开发场景无论是做移动机器人、自动驾驶还是无人机把新硬件和新算法快速打通验证其性能都是第一步。Livox Mid-360是非重复扫描式固态雷达数据特性与传统机械雷达不同而FAST_LIO以其计算效率和鲁棒性著称这两者结合对于想探索高性能、低成本SLAM方案的朋友来说吸引力不小。这篇内容我就把从环境准备、驱动安装、算法编译到实际测试踩过的坑和总结的经验完整地梳理一遍目标是让你拿到设备后能最快速度在Ubuntu 20.04上把FAST_LIO跑起来并理解其中的关键环节。2. 环境准备与系统配置2.1 Ubuntu 20.04基础环境搭建首先需要一个干净的Ubuntu 20.04 LTS系统。我推荐直接从官网下载镜像进行安装避免使用某些修改版可能带来的依赖库冲突。安装时建议勾选“安装Ubuntu时下载更新”和“安装第三方软件……”这样能省去后续手动安装一些基础驱动和编码器的麻烦。系统安装完成后第一件事就是更新软件源和升级现有包sudo apt update sudo apt upgrade -y接下来是安装一些编译和开发所必需的底层工具链。ROSRobot Operating System和很多机器人相关的库都依赖这些工具。sudo apt install -y build-essential cmake git wget curl sudo apt install -y libeigen3-dev libboost-all-dev libflann-dev libvtk7-dev libpcl-dev这里重点提一下libpcl-dev即Point Cloud Library的开发包。FAST_LIO严重依赖PCL进行点云处理而Ubuntu 20.04官方源里的PCL版本是1.10这个版本对于FAST_LIO来说是够用的。确保它被正确安装后续能避免很多链接错误。2.2 ROS Noetic的安装与配置FAST_LIO主要支持ROS我们选择与Ubuntu 20.04对应的ROS发行版——ROS Noetic。安装过程采用官方推荐的ros-noetic-desktop-full版本它包含了ROS核心、RQT、RViz、机器人通用库等几乎所有你会用到的工具。sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install -y ros-noetic-desktop-full安装完成后必须初始化rosdep这是ROS用来安装系统依赖的工具至关重要。sudo rosdep init rosdep update然后将ROS环境变量添加到你的bashrc中这样每次打开终端ROS命令都会生效。echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc为了后续创建工作空间和编译包还需要安装一些ROS构建工具。sudo apt install -y python3-rosinstall python3-rosinstall-generator python3-wstool python3-catkin-tools注意rosdep init和update步骤可能会因网络问题失败。如果遇到timeout或连接错误可以尝试更换网络环境或者搜索国内镜像源的配置方法例如修改/etc/hosts文件或使用代理。这是ROS安装中最常见的“拦路虎”。3. Livox Mid-360驱动与SDK部署3.1 Livox SDK的编译与安装Livox雷达需要通过官方的Livox SDK进行通信和数据解析。我们不能直接使用ROS的ros-kinetic-livox这种可能陈旧的包而应该从Livox的GitHub仓库获取最新的SDK源码进行编译。首先找一个合适的位置比如你的家目录克隆SDK仓库cd ~ git clone https://github.com/Livox-SDK/Livox-SDK.git cd Livox-SDKLivox SDK使用CMake进行构建。建议新建一个build目录来存放编译产物保持源码目录的整洁。mkdir build cd build cmake .. make sudo make installsudo make install这一步会将编译生成的库文件如liblivox_sdk.so和头文件安装到系统目录通常是/usr/local/lib和/usr/local/include。安装完成后需要更新系统的动态链接库缓存让系统能找到这个新安装的库。sudo ldconfig为了验证SDK是否安装成功可以运行SDK自带的示例程序。回到SDK根目录运行cd ~/Livox-SDK/sample/lidar ./lidar_sample如果程序能正常启动可能会等待雷达连接说明SDK基础功能是正常的。3.2 Livox ROS Driver的安装与配置SDK提供了底层通信能力但要在ROS中使用雷达数据我们需要livox_ros_driver这个包。它作为ROS的一个功能包package负责将SDK接收到的原始数据转换成ROS的标准消息类型如sensor_msgs/PointCloud2。同样我们从GitHub克隆官方驱动仓库。建议将其克隆到你的ROS工作空间中。我们先创建并初始化一个catkin工作空间。mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver.git现在回到工作空间根目录进行编译。由于这个驱动包依赖于我们刚才系统全局安装的Livox SDK所以编译指令需要指明SDK的路径。使用catkin_make并传入参数cd ~/catkin_ws catkin_make -DCMAKE_BUILD_TYPERelease编译过程可能会持续几分钟。如果一切顺利在编译输出的最后你应该能看到类似[100%] Built target livox_ros_driver_node的信息。实操心得编译livox_ros_driver时最常见的错误是找不到Livox SDK。错误信息通常包含Could not find a package configuration file provided by “LivoxSDK”。如果遇到请务必确认你是否成功运行了sudo make install安装SDK。是否运行了sudo ldconfig。可以尝试手动指定SDK路径catkin_make -DCMAKE_BUILD_TYPERelease -DLivoxSDK_DIR~/Livox-SDK/build将路径替换为你的SDK实际编译目录。编译成功后别忘了source一下工作空间的setup文件让ROS能找到这个新编译的包。source ~/catkin_ws/devel/setup.bash # 同样建议将这一行也加入~/.bashrc方便以后使用 echo source ~/catkin_ws/devel/setup.bash ~/.bashrc3.3 连接雷达与驱动测试在启动驱动之前先用USB-C数据线将Livox Mid-360连接到电脑。通过lsusb命令可以检查系统是否识别到了设备。Livox雷达的USB设备通常会有特定的Vendor ID。lsusb | grep -i livox如果能看到类似ID 2ca9:0001的输出说明硬件连接正常。接下来我们需要配置驱动以匹配Mid-360。驱动包的配置文件位于~/catkin_ws/src/livox_ros_driver/config目录下。对于Mid-360我们需要修改MID360_config.json文件。cd ~/catkin_ws/src/livox_ros_driver nano config/MID360_config.json关键配置项如下lidar_configs: 这里定义了雷达列表。确保其中的ip地址与你的雷达匹配通常保持默认的192.168.1.12即可Mid-360是静态IP。publish_freq: 点云发布频率单位Hz。可以根据你的需求调整10.0或20.0是常用值。imu_rate: IMU数据发布频率。Mid-360内置IMU这个值可以设为200或400。保存配置文件后就可以启动驱动节点了。打开一个新的终端source环境后运行source ~/.bashrc roslaunch livox_ros_driver rviz_MID360.launch这个launch文件会同时启动驱动节点和RViz可视化工具。如果一切配置正确你应该能在RViz中看到由Mid-360发布的点云数据。在RViz中添加一个PointCloud2显示类型并将Topic设置为/livox/lidar就能看到动态的点云了。注意事项首次连接时雷达可能需要几秒钟进行自检和初始化点云数据会稍晚一些出现。如果RViz中没有点云请依次检查1. USB连接是否稳固2. 雷达电源指示灯是否正常3. 在终端中rostopic echo /livox/lidar是否有数据输出4. 雷达的IP地址配置是否正确可通过Livox Viewer工具查看和修改。4. FAST_LIO算法部署与编译4.1 获取FAST_LIO源码FAST_LIO的源码托管在GitHub上。我们将它克隆到之前创建的ROS工作空间的src目录下。cd ~/catkin_ws/src git clone https://github.com/hku-mars/FAST_LIO.git克隆完成后你会发现FAST_LIO目录下包含了算法核心代码以及一些依赖项。其代码结构相对清晰核心算法在FAST_LIO/src中而一些必要的第三方库如ikd-Tree一种高效的增量式k-d树已经作为子模块包含在内。4.2 解决依赖与编译FAST_LIO除了依赖ROS和PCL还需要一个重要的库livox_ros_driver我们已安装和正确的Eigen版本。Ubuntu 20.04默认的Eigen3通常是3.3.7这个版本是兼容的。但为了确保万无一失可以检查一下pkg-config --modversion eigen3现在进入工作空间进行编译。由于FAST_LIO对计算性能要求较高建议使用Release模式编译。cd ~/catkin_ws catkin_make -DCMAKE_BUILD_TYPERelease编译过程可能会遇到一些问题以下是两个最常见的坑及其解决方案找不到livox_ros_driver相关的消息类型 错误信息可能类似于fatal error: livox_ros_driver/CustomMsg.h: No such file or directory。这是因为FAST_LIO需要引用livox_ros_driver包中自定义的消息类型。解决方法是在编译FAST_LIO之前确保livox_ros_driver已经在你当前工作空间中被成功编译并且环境已被source。我们的步骤已经保证了这一点。如果还报错尝试先单独编译驱动包catkin_make --pkg livox_ros_driver然后再整体编译。PCL库版本冲突或找不到 错误信息可能关于pcl::PointCloud或PCL_VERSION。请确认你安装的是libpcl-dev并且版本是1.10。可以通过apt show libpcl-dev查看。FAST_LIO的CMakeLists.txt中通常设置了寻找PCL 1.10如果系统中有多个PCL版本例如通过源码安装了更高版本可能会导致混乱。坚持使用系统自带的1.10版本是最稳妥的选择。编译成功后同样需要source环境如果已加入bashrc则新终端自动生效。4.3 FAST_LIO配置解析FAST_LIO的行为通过一个YAML配置文件进行控制这个文件通常位于FAST_LIO/config目录下例如mid360_config.yaml。在运行前理解并调整关键参数对性能至关重要。# 常见关键参数释义 common: lid_topic: “/livox/lidar“ # 订阅的激光雷达点云话题必须与livox驱动发布的话题一致 imu_topic: “/livox/imu“ # 订阅的IMU话题 time_sync_en: false # 是否启用硬件时间同步。如果雷达和IMU时间戳已同步可设为true time_offset_lidar_to_imu: 0.0 # 雷达与IMU间的时间偏移补偿秒 preprocess: lidar_type: 4 # 雷达类型。4代表Livox MID-360 blind: 0.5 # 盲区过滤忽略距离雷达中心0.5米内的点减少噪点 point_filter_num: 1 # 点云降采样频率每N个点取1个。1表示不降采样 mapping: acc_cov: 0.1 # 加速度计测量噪声协方差影响滤波器对IMU的信任程度 gyr_cov: 0.1 # 陀螺仪测量噪声协方差 b_acc_cov: 0.0001 # 加速度计零偏随机游走噪声协方差 b_gyr_cov: 0.0001 # 陀螺仪零偏随机游走噪声协方差 max_radius: 100.0 # 建图时考虑的最大点云范围米参数调优心得blind盲区参数对于Livox雷达尤其重要。因为固态雷达近处可能存在大量无效反射或镜头畸变设置一个合理的盲区如0.3-0.5米可以显著提升建图质量。point_filter_num在数据量极大时用于控制计算负载但对于Mid-360初始测试可以设为1先保证精度再根据实时性决定是否降采样。acc_cov和gyr_cov是调参的重点如果发现轨迹抖动厉害可以适当增大这些值如从0.1调到0.5表示滤波器认为IMU噪声更大会更依赖雷达观测反之如果运动剧烈时容易跟丢可以适当减小。5. 运行测试与数据录制5.1 启动FAST_LIO进行实时测试确保三个核心组件已就绪Livox Mid-360硬件已连接并上电。livox_ros_driver驱动已成功运行并发布点云话题。FAST_LIO已编译完成。现在我们需要启动三个终端或使用tmux等终端复用工具终端1启动雷达驱动source ~/.bashrc roslaunch livox_ros_driver rviz_MID360.launch # 或者如果你不需要RViz可以只启动驱动节点 # roslaunch livox_ros_driver livox_lidar.launch终端2启动FAST_LIO算法source ~/.bashrc cd ~/catkin_ws source devel/setup.bash roslaunch fast_lio mapping_mid360.launch这里mapping_mid360.launch是作者可能提供的针对Mid-360的launch文件或者你需要修改run.launch中指向正确的配置文件config/mid360_config.yaml。终端3启动RViz用于可视化结果source ~/.bashrc roslaunch fast_lio rviz.launchFAST_LIO包中通常自带一个配置好的RViz启动文件它会自动订阅并显示实时构建的地图(/cloud_registered话题)和估计的机器人轨迹(/path话题)。此时如果你移动Livox Mid-360雷达应该能在RViz中看到实时更新的点云地图和一条逐渐增长的轨迹线。5.2 使用ROS Bag录制与回放数据在真实场景中测试算法录制数据包ROS Bag进行事后分析和反复调试是标准流程。这能让你在完全相同的输入数据上对比不同参数的效果。录制数据包在一个新的终端中使用rosbag record命令录制驱动发布的关键话题。cd ~/bagfiles # 选择一个目录存放bag文件 rosbag record -O mid360_test /livox/lidar /livox/imu-O mid360_test指定输出文件名为mid360_test.bag。录制的话题必须包含FAST_LIO配置文件中订阅的lid_topic和imu_topic通常是/livox/lidar和/livox/imu。录制完成后按CtrlC停止。回放数据包测试FAST_LIO回放时我们不需要启动真实的雷达驱动而是用bag文件模拟数据发布。首先在终端中启动FAST_LIO节点同终端2的指令。然后在另一个终端中回放bag文件并设置暂停-p以便控制节奏同时只播放必要的话题。cd ~/bagfiles rosbag play mid360_test.bag --clock -r 0.5--clock发布模拟的ROS时间这对于依赖时间戳的SLAM算法至关重要。-r 0.5以0.5倍速播放方便观察。第一次测试可以用-r 0.20.2倍速慢速播放确保算法每一步都能跟上。如果话题名称不匹配可以使用/livox/lidar:/your_lidar_topic这样的语法进行重映射。通过回放你可以稳定、重复地测试算法并配合RViz观察建图过程是否平滑、有无明显的漂移或跳变。6. 结果分析与性能评估6.1 可视化结果解读在RViz中观察FAST_LIO的输出主要关注以下几点/cloud_registered已配准点云这是算法将当前帧点云匹配到全局地图后的结果也是最终构建的地图。观察其是否清晰、连贯。在静态场景下地图应该稳定无重影在缓慢移动场景下新增的点云应该能无缝拼接。/path估计轨迹这是算法估计的雷达中心运动路径。观察其是否平滑。如果出现剧烈的锯齿或突然的跳变可能意味着前端匹配失败或后端优化出了问题。/odometry里程计信息可以通过rostopic echo /odometry查看具体的位姿位置和姿态输出检查其数值变化是否合理。一个运行良好的FAST_LIO其轨迹应该平滑且构建的地图在回环闭合前累积误差应该较小。对于Mid-360这种FOV视场角极大的雷达建图的范围会非常广你可以尝试在房间内缓慢旋转和平移雷达观察是否能构建出完整的房间结构。6.2 常见问题与排查技巧实录在实际测试中你几乎一定会遇到一些问题。下面是一个快速排查清单问题现象可能原因排查步骤与解决方案RViz中无任何点云显示1. 话题未订阅正确。2. 驱动未成功发布数据。3. 雷达未连接或未上电。1. 在RViz的Add面板中确保添加了PointCloud2类型并将Topic设置为/cloud_registeredFAST_LIO输出或/livox/lidar驱动原始输出。2. 终端运行rostopic list检查/livox/lidar和/livox/imu话题是否存在。运行rostopic hz /livox/lidar查看数据频率。3. 检查USB连接运行lsusb重启雷达。FAST_LIO启动后立即崩溃或报错1. 配置文件路径错误。2. 依赖库链接错误。3. 参数设置不合理如雷达类型错误。1. 检查launch文件中config_file参数指向的YAML文件路径是否正确。2. 重新编译整个工作空间catkin_make clean catkin_make -DCMAKE_BUILD_TYPERelease注意观察编译错误信息。3. 确认YAML文件中lidar_type参数是否设置为4对应Mid-360。地图出现严重重影或拖尾1. 运动过快点云匹配失败。2. IMU噪声参数设置不当。3. 雷达与IMU外参不准。1. 尝试缓慢、匀速运动进行测试。2. 调整YAML中的acc_cov和gyr_cov参数适当增大如从0.1调到0.5。3. FAST_LIO假设雷达和IMU是刚性连接且坐标系已知。检查配置文件中extrinsic_T和extrinsic_R外参平移和旋转是否正确。对于Mid-360通常使用默认值或厂家标定值。轨迹估计漂移严重1. 纯LIO的固有漂移。2. IMU零偏估计不准。3. 点云特征不足如长走廊。1. LIO在长时间、大范围运行后必然有漂移这是正常的。可考虑引入闭环检测或GPS等绝对观测。2. 确保系统在启动后有数秒的静止初始化时间让算法估计IMU零偏。3. 在特征丰富的场景下测试。对于长廊环境可尝试调低filter_size_surf面特征滤波参数以保留更多平面点。CPU占用率异常高1. 点云未降采样数据量过大。2.ikd-Tree参数设置过于激进。1. 在YAML配置文件中增大preprocess下的point_filter_num例如设为2每2个点取1个。2. 检查mapping下的max_radius如果场景不大可以适当减小如从100.0改为50.0减少需要维护的点云数量。独家避坑技巧“静止初始化”是关键。FAST_LIO在启动时需要几秒钟的静止数据来初始化IMU的零偏和重力方向。最好的做法是启动所有节点后将雷达静止放置至少3-5秒然后再开始移动。你会发现在初始静止阶段轨迹可能有些抖动一旦开始运动轨迹会立刻变得平滑。如果一开始就运动零偏估计不准会导致整个轨迹发飘。7. 进阶调试与性能优化7.1 使用rqt工具进行动态调参ROS提供了强大的rqt_reconfigure图形化工具可以动态调整节点参数而无需重启。FAST_LIO的某些版本编译时支持了动态参数配置。首先确保你的FAST_LIO在CMakeLists.txt中启用了dynamic_reconfigure支持通常默认是开启的。然后在算法运行的同时在终端输入rosrun rqt_reconfigure rqt_reconfigure在弹出的GUI中你应该能找到fast_lio节点。展开后可以看到一列可调整的参数例如acc_cov,gyr_cov,point_filter_num等。你可以一边在RViz中观察地图和轨迹一边滑动这些参数的滑块实时感受参数变化对算法性能的影响。这是理解每个参数作用的绝佳方式。7.2 轨迹精度评估简易方法在没有高精度真值系统如运动捕捉的情况下我们可以采用“闭环误差”来粗略评估轨迹精度。方法如下控制雷达在一个闭合路径上运动例如绕着一张桌子走一圈最后回到起点。在RViz中观察/path话题生成的轨迹。理想情况下轨迹的起点和终点应该重合。测量轨迹图上起点和终点之间的欧氏距离这个距离就是闭合误差。误差越小说明里程计的精度越高、漂移越小。对于FAST_LIO配合Mid-360在室内几十平米的范围内绕行一周闭合误差能控制在1%-2%以内通常就算是一个很不错的结果了。你可以通过调整IMU噪声参数、点云降采样率等观察它们对闭合误差的影响从而找到一组更优的参数。7.3 系统资源监控长时间运行SLAM需要关注系统的计算资源。可以使用htop或system monitor来监控CPU和内存使用情况。CPUFAST_LIO的核心计算线程会占用一个CPU核心的近100%使用率这是正常的。如果point_filter_num设得很小且max_radius很大ikd-Tree的维护开销可能导致额外CPU占用。内存内存占用主要与地图中保存的点数量有关。max_radius和点云密度是主要因素。如果内存持续增长且不释放可能需要检查算法是否在持续添加新点而没有有效的滑动窗口或降采样机制FAST_LIO本身有基于ikd-Tree的地图管理通常内存是稳定的。对于资源受限的平台如Jetson系列务必使用point_filter_num进行降采样并合理设置max_radius以在精度和实时性之间取得平衡。整个流程走下来从驱动安装到算法调优其实就是一个标准的机器人感知算法集成流水线。Livox Mid-360提供了高性价比的3D感知数据FAST_LIO则提供了一个高效稳定的前端里程计解决方案。两者的成功联调为你后续进行更复杂的SLAM建图、导航避障等任务打下了坚实的基础。最关键的是通过亲手解决其中遇到的各种编译、配置、参数问题你对整个系统的理解会深刻得多下次再集成其他传感器或算法时就会更加得心应手。