☰
Mid-360激光雷达ROS2驱动与FAST-LIO2建图全链路实战
2026/9/30 1:21:40 网站建设 项目流程

简介:这份资源是面向机器人、自动驾驶与无人机方向研究人员和工程师的集成教程,聚焦在Ubuntu 18.04环境下完成mid360激光雷达、Livox SDK2、Livox ROS Driver2与FAST-LIO2的部署与联调,帮助读者打通从传感器驱动到LiDAR-惯性里程计定位的完整链路。压缩包内共1个文件,为单个html文档,体积约21KB,内容以图文步骤形式组织,便于按章节查阅与对照操作。目前已有951人学习,说明该集成方案在相关开发者群体中具有一定参考价值。教程覆盖SDK安装、ROS驱动配置、点云与IMU数据融合调试等关键环节,并给出FAST-LIO2运行验证思路,读者可据此搭建可复现的定位导航实验环境,减少驱动版本不匹配、话题配置错误等常见问题带来的试错成本,适合具备一定ROS基础、希望快速上手Livox mid360与FAST-LIO2组合的中高级开发者参考。

1. 从一台刚上电的 Mid-360 说起:这套驱动链路到底解决什么问题

刚拿到 Livox Mid-360 的人,十有八九会卡在同一个地方:雷达通电、网线插好,但ros2 topic list里空空如也,或者能看到点云却进不了 FAST-LIO2。问题往往不在雷达本身,而在 Livox-SDK2、livox_ros_driver2、FAST-LIO2 这三层之间的版本匹配和话题对接。Mid-360 是 Livox 面向机器人场景的固态激光雷达,非重复扫描、大视场角,配合 FAST-LIO2 做建图定位是当前很常见的组合。这套教程要解决的就是从零把 SDK2 编译好、驱动跑起来、点云喂进 FAST-LIO2 并看到地图的完整链路。适合刚接触 Mid-360 的机器人开发者、做 Gazebo 仿真建图定位验证的同学,以及从 ROS1 迁到 ROS2 想跑通 FAST-LIO2 的从业者。下面按我实际部署的顺序拆,每一步都给出可抄的命令和参数。

2. 环境与依赖:SDK2、驱动、FAST-LIO2 的版本怎么对齐

2.1 三层结构先理清,别一上来就 clone

Livox 的软件栈是分层的:最底层是 Livox-SDK2,负责和雷达硬件通信,提供 C++ 接口;中间层是 livox_ros_driver2,把 SDK2 的数据封装成 ROS2 话题;最上层才是 FAST-LIO2 这类 SLAM 算法,订阅点云话题做里程计和建图。很多人翻车是因为把 livox_ros_driver(ROS1 版)和 livox_ros_driver2(ROS2 版)搞混,或者 SDK2 装成了老版 SDK1。Mid-360 必须用 SDK2,SDK1 不支持这个型号。常见做法是先确认系统是 Ubuntu 20.04 或 22.04,ROS2 用 Foxy 或 Humble,然后按 SDK2 → driver2 → FAST-LIO2 的顺序编译,顺序反了会出现找不到库的情况。

2.2 依赖安装与工作空间准备

先装基础依赖,这些在编译 SDK2 和 driver2 时都会用到:

sudo apt update sudo apt install -y cmake g++ git libpcl-dev libeigen3-dev \ libboost-all-dev libyaml-cpp-dev python3-colcon-common-extensions

逻辑说明:libpcl-dev和libeigen3-dev是 FAST-LIO2 编译必需的,libyaml-cpp-dev给 driver2 解析配置文件用,colcon是 ROS2 的构建工具。参数上没有需要改的,直接装即可。装完确认cmake --version不低于 3.16,低于这个版本 SDK2 编译会报 C++17 相关的错。

工作空间建议单独建,不要和已有的 ROS2 包混在一起:

mkdir -p ~/mid360_ws/src cd ~/mid360_ws/src

后面 SDK2 装在系统目录,driver2 和 FAST-LIO2 都放这个 src 下,方便统一 colcon build。

2.3 SDK2 编译与安装路径

SDK2 从官方仓库拉下来后编译安装:

cd ~ git clone https://github.com/Livox-SDK/Livox-SDK2.git cd Livox-SDK2 mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local make -j$(nproc) sudo make install

逻辑说明:CMAKE_INSTALL_PREFIX指定安装到/usr/local,这样 driver2 编译时能通过默认搜索路径找到livox_lidar_sdk库。make -j$(nproc)用满 CPU 核数加速。装完可以ls /usr/local/lib | grep livox确认有liblivox_lidar_sdk_static.a和liblivox_lidar_sdk_shared.so。如果这里没装成功,driver2 编译一定会报livox_lidar_sdk.h: No such file,所以这一步别跳过验证。

3. livox_ros_driver2 编译与 Mid-360 网络配置

3.1 驱动编译与 ROS2 版本选择

driver2 支持 ROS2 的 Foxy 和 Humble,编译前要指定版本:

cd ~/mid360_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver2.git cd livox_ros_driver2 source /opt/ros/humble/setup.bash ./build.sh humble

逻辑说明:build.sh是 driver2 自带的构建脚本,参数humble告诉它按 Humble 的接口编译,如果你用的是 Foxy 就换成foxy。这个脚本内部会调用 colcon,并处理 ROS2 版本差异。常见坑是直接colcon build而不走build.sh,结果编译出来的包缺少版本宏,运行时报undefined symbol。编译完成后source install/setup.bash让环境生效。

3.2 Mid-360 的 IP 与网络参数

Mid-360 出厂默认 IP 是192.168.1.1xx段,主机需要配同网段静态 IP。用ip addr看网卡名,假设是enp3s0:

sudo ip addr add 192.168.1.50/24 dev enp3s0 sudo ip link set enp3s0 up ping 192.168.1.1xx

逻辑说明:192.168.1.50是主机地址,要和雷达同网段但不冲突;1xx换成你雷达标签上的实际地址。能 ping 通说明物理链路和 IP 配置没问题。如果 ping 不通,先查网线是不是插在雷达的以太网口而不是同步口,再查主机防火墙有没有拦 ICMP。这一步是后面所有话题能出来的前提,ping 不通就别往下走。

3.3 配置文件里改什么

driver2 的配置在livox_ros_driver2/config/MID360_config.json,关键字段:

{ "lidar_configs": [ { "ip": "192.168.1.1xx", "publish_freq": 10.0, "output_data_type": "xyzrtl" } ], "host_net_info": { "cmd_data_ip": "192.168.1.50", "push_msg_ip": "192.168.1.50", "point_data_ip": "192.168.1.50" } }

逻辑说明:ip填雷达实际地址,publish_freq是点云发布频率,Mid-360 常用 10Hz;output_data_type选xyzrtl表示输出含时间戳和反射率的点,FAST-LIO2 需要这个格式。host_net_info里三个 IP 都填主机地址,这是 SDK2 和雷达通信用的。改完保存,启动 launch 时驱动会读这个文件。参数改错最典型的表现是话题有但没数据,或者数据频率不对。

3.4 启动驱动并验证话题

source ~/mid360_ws/install/setup.bash ros2 launch livox_ros_driver2 rviz_MID360_launch.py

逻辑说明:这个 launch 会同时起驱动和 RViz,方便直接看点云。另开终端ros2 topic list应该能看到/livox/lidar和/livox/imu。ros2 topic hz /livox/lidar看频率是否接近配置的 10Hz。如果只有 IMU 没有点云,多半是output_data_type或网络配置问题;如果频率远低于 10Hz,检查网卡是不是千兆、有没有丢包。

4. FAST-LIO2 接入:话题映射与外参初值

4.1 FAST-LIO2 编译

FAST-LIO2 依赖 PCL、Eigen 和 livox_ros_driver2 的消息类型:

cd ~/mid360_ws/src git clone https://github.com/hku-mars/FAST_LIO.git cd FAST_LIO git checkout ROS2 cd ~/mid360_ws colcon build --symlink-install

逻辑说明:FAST-LIO2 主分支是 ROS1,ROS2 要切到ROS2分支。--symlink-install方便改配置不用重编。编译时如果报找不到livox_ros_driver2的消息,说明 driver2 没 source 或者没编译成功,先回去确认 driver2 的 install 目录存在。

4.2 话题重映射与配置

FAST-LIO2 默认订阅的话题名和 driver2 发布的不完全一致,需要在 launch 或配置里映射。常见做法是改config/mid360.yaml:

common: lid_topic: "/livox/lidar" imu_topic: "/livox/imu" time_sync_en: false preprocess: lidar_type: 1 scan_line: 4 blind: 0.5

逻辑说明:lid_topic和imu_topic要和 driver2 实际发布的一致;lidar_type: 1对应 Livox 类型;scan_line对 Mid-360 填 4;blind是盲区过滤,0.5 米内的点丢掉,避免近处噪声影响。time_sync_en没有硬件同步时保持 false。这些参数直接决定 FAST-LIO2 能不能正常初始化,填错会一直卡在等待点云。

4.3 外参初值与常见调整

Mid-360 和 IMU 的外参在config里的extrinsic_R和extrinsic_T。如果雷达和 IMU 是刚性连接且 IMU 在雷达附近,初值可以用单位阵和零平移:

extrinsic_R: [1, 0, 0, 0, 1, 0, 0, 0, 1] extrinsic_T: [0, 0, 0]

逻辑说明:这两个参数是雷达坐标系到 IMU 坐标系的旋转和平移。初值不准时,建图会出现墙面弯曲或回环对不上。常见做法是先跑一段直走廊,看地图有没有明显扭曲,再微调。Mid-360 外参调整是个细活,没有标定板的情况下,靠观察地图质量迭代是常用手段。如果 IMU 和雷达朝向差异大,extrinsic_R要按实际安装角度填,不能偷懒用单位阵。

4.4 启动建图并看结果

source ~/mid360_ws/install/setup.bash ros2 launch fast_lio mapping_mid360.launch.py

逻辑说明:启动后 RViz 里应该能看到累积的点云地图和当前帧。手持或推车缓慢移动,地图会逐渐成形。如果地图漂移严重,先查 IMU 数据是否正常(ros2 topic echo /livox/imu看有没有角速度和加速度),再查外参。FAST-LIO2 对 IMU 质量敏感,IMU 噪声大或频率不稳会直接导致发散。

5. 避坑与排查:这几处我踩过不止一次

5.1 现象:编译 driver2 报找不到 livox_lidar_sdk

原因:SDK2 没装或装到了非默认路径,driver2 的 CMake 找不到库。解决:确认/usr/local/lib下有liblivox_lidar_sdk_shared.so,没有就回 SDK2 目录重新sudo make install;如果装在自定义路径,编译 driver2 时加-DCMAKE_PREFIX_PATH=你的路径。

5.2 现象:话题有但点云是空的

原因:MID360_config.json里host_net_info的 IP 填错,或者雷达 IP 和配置不一致。解决:用ping确认雷达地址,把配置里三处 IP 都改成主机实际地址,雷达 IP 改成标签上的地址,重启驱动。

5.3 现象:FAST-LIO2 一直不初始化,RViz 没地图

原因:话题名不匹配或lidar_type填错。解决:ros2 topic list确认实际话题名,改mid360.yaml里的lid_topic;lidar_type对 Livox 必须是 1,填 0 会当成其他雷达解析失败。

5.4 现象:建图漂移、墙面弯曲

原因:外参初值不准或 IMU 数据异常。解决:先ros2 topic hz /livox/imu看频率是否稳定,再检查extrinsic_R/T。手持设备走动时尽量平稳,急转急停会让 FAST-LIO2 短时发散。

5.5 现象:Gazebo 仿真里 Mid-360 不出点云

原因:仿真插件的话题名和驱动不一致,或者仿真雷达配置没加载。解决:确认仿真 launch 里雷达插件发布的话题,把它映射到 FAST-LIO2 订阅的话题;仿真环境下 IMU 噪声参数也要和真实接近,否则建图效果参考价值有限。

6. 进阶:用 Gazebo 仿真验证链路,再上真机

真机调试前,我习惯先在 Gazebo 里把整条链路跑一遍,这样能把驱动和算法的问题分开。Gazebo 仿真 Mid-360 建图定位的关键是让仿真雷达发布和真机一致的话题格式。常见做法是用 livox 的仿真插件或自己写一个发布PointCloud2的节点,话题名对齐/livox/lidar,然后直接启动 FAST-LIO2 的 launch。仿真里没有网络配置问题,能快速验证 FAST-LIO2 的参数和外参是否合理。等仿真里地图正常了,再上真机,此时如果出问题,基本就锁定在网络或硬件层,排查范围小很多。

验证方法上,我一般会看三个指标:点云频率是否稳定在配置值、IMU 频率是否够高(通常 200Hz 左右)、地图闭合后回到起点误差是否可接受。这三个都过了,这套 Mid-360 + SDK2 + driver2 + FAST-LIO2 的链路才算真正跑通。外参调整没有捷径,仿真里调好初值,真机上再微调,比一上来就硬调真机省时间。从那以后我每次部署新雷达,都强制先走一遍仿真验证,再动真机。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询