ROS2与Livox Mid-360实战:3D点云建图从驱动到FAST-LIO全流程
发布时间:2026/10/7 18:38:32 锦皓数字建站

1. 为什么我最终选了Mid-360而不是机械式激光雷达先说结论如果你打算在ROS2里从零搭一套能用的3D点云地图Livox Mid-360是目前性价比最舒服的选择之一。我自己前前后后折腾过三套方案——机械式16线、固态补盲雷达、再到Mid-360最后稳定跑下来的就是Mid-360这套。这篇就把整个流程从硬件接线到ROS2驱动、再到建图调参和踩过的坑一次性讲透。Mid-360是Livox出的固态激光雷达非重复扫描视场角360度水平、-7到52度垂直最远探测70米左右。它和传统机械式雷达最大的区别在于扫描方式机械式是固定线束转圈点云是一圈一圈的Mid-360是非重复扫描光斑轨迹一直在变所以单帧点云看起来稀稀拉拉但多帧累积之后点云会越来越密。这个特性决定了它在ROS2里的使用逻辑和机械式雷达完全不同——你不能指望单帧就能看清环境必须靠累积。为什么选它而不是别的几个现实原因价格比同级别的机械式多线雷达便宜一大截个人玩家和小团队能承受。体积和重量非常小无人机、小型移动机器人、手持设备都能装。视场角360度水平垂直范围也够用装一个基本能覆盖周围环境。ROS2支持Livox官方提供了livox_ros_driver2专门适配ROS2不用自己写驱动。但要注意Mid-360不是万能的。它对近距离盲区、强光环境、高反射表面比如玻璃、镜面都比较敏感这些后面会专门讲怎么处理。提示如果你只是想学ROS2点云建图Mid-360完全够用但如果你要做高精度测绘或者自动驾驶级别的感知那得考虑更高线束的雷达Mid-360的定位是入门到中阶的3D建图。2. 环境准备Ubuntu、ROS2版本和驱动的版本匹配这一步是坑最多的地方我见过太多人卡在版本不匹配上驱动编译报错、节点起不来、点云话题收不到八成都是版本问题。2.1 Ubuntu和ROS2版本怎么选Mid-360的官方驱动livox_ros_driver2对ROS2版本有明确要求。目前最稳的组合是组件推荐版本说明Ubuntu22.04 LTS长期支持社区资料最多ROS2Humble Hawksbill官方驱动适配最完整Livox SDK2最新版驱动依赖必须先装livox_ros_driver2对应分支注意选对ROS2分支我试过Ubuntu 20.04 Foxy的组合也能跑但Foxy已经停止维护很多新包不兼容不建议新手碰。Ubuntu 22.04 Humble是目前最省心的。如果你用的是Ubuntu 24.04ROS2对应的是Jazzy理论上也能编译但Livox官方驱动对Jazzy的适配没那么及时可能会遇到CMake报错需要自己改。新手别折腾直接上22.04 Humble。2.2 安装ROS2 Humble的正确姿势网上教程一大堆但很多步骤是冗余的。我总结一套最简流程# 设置locale避免编码问题 sudo apt update sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8 # 添加ROS2源 sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install curl -y sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 安装ROS2 Humble桌面版 sudo apt update sudo apt install ros-humble-desktop -y sudo apt install ros-dev-tools -y # 配置环境变量 echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc装完之后验证一下ros2 run demo_nodes_cpp talker另开一个终端ros2 run demo_nodes_py listener能看到talker发消息、listener收消息说明ROS2基础环境没问题。注意如果你在国内raw.githubusercontent.com可能访问不稳定导致key下载失败。可以多试几次或者手动下载key文件放到对应位置。这一步失败的话后面apt install会直接报没有公钥。2.3 安装Livox SDK2livox_ros_driver2依赖Livox SDK2必须先装SDK再编译驱动顺序反了会报找不到库。git clone https://github.com/Livox-SDK/Livox-SDK2.git cd Livox-SDK2 mkdir build cd build cmake .. make -j$(nproc) sudo make install装完之后检查一下ls /usr/local/lib | grep livox应该能看到liblivox_sdk2.so之类的文件。如果没有说明安装没成功后面编译驱动一定报错。2.4 编译livox_ros_driver2mkdir -p ~/ws_livox/src cd ~/ws_livox/src git clone https://github.com/Livox-SDK/livox_ros_driver2.git cd livox_ros_driver2 # 注意要切换到ROS2对应的分支通常是master或ros2分支 git checkout master编译的时候有个关键点livox_ros_driver2的编译方式和普通ROS2包不太一样它需要先source ROS2环境然后用它自带的脚本编译source /opt/ros/humble/setup.bash ./build.sh humble这个build.sh脚本会自动处理一些依赖和路径问题比直接colcon build省心。如果你直接colcon build很可能会遇到找不到Livox SDK头文件的问题。编译完成后source install/setup.bash到这里环境基本就绪了。3. 硬件连接与网络配置雷达连不上电脑的排查链路硬件这块看着简单实际上是最容易卡住新手的环节。我把自己踩过的坑按排查顺序列出来你照着走一遍基本能解决90%的连不上问题。3.1 供电和网线连接Mid-360的接口是一个航空插头里面集成了电源和网口。官方会配一根转接线一头是航空头另一头是DC电源RJ45网口。供电Mid-360需要9-27V DC供电我用的是12V/2A的电源适配器稳定。注意电流要够供电不足会导致雷达反复重启或者根本起不来。网线雷达通过以太网和电脑通信网线接到电脑的网口上。提示有些人的电脑没有有线网口用USB转网口也行但要确保转接器质量过关劣质转接器会导致丢包点云断断续续。3.2 网络配置IP地址必须对上Mid-360的默认IP是192.168.1.1XXXX是序列号后两位电脑的网口IP必须和雷达在同一网段。比如雷达是192.168.1.150电脑就设成192.168.1.50。在Ubuntu里设置静态IP# 查看网口名称 ip link show # 假设网口是enp3s0设置静态IP sudo ip addr add 192.168.1.50/24 dev enp3s0 sudo ip link set enp3s0 up验证连通性ping 192.168.1.150能ping通说明网络没问题。ping不通的话按这个顺序排查网口是否upip link show看状态是不是UP。IP是否同网段雷达和电脑的前三段必须一样。网线是否插好换个网线试试有些网线是坏的。供电是否正常雷达指示灯亮不亮不亮就是供电问题。防火墙Ubuntu默认防火墙一般不影响但如果你装过ufw检查一下。3.3 配置文件雷达的IP和电脑的IP都要写对livox_ros_driver2有一个配置文件通常在src/livox_ros_driver2/config/目录下叫MID360_config.json。这个文件里要填雷达的IP和电脑的IP{ lidar_configs: [ { ip: 192.168.1.150, pcl_data_type: 1, pattern_mode: 0, extrinsic_parameter: { roll: 0.0, pitch: 0.0, yaw: 0.0, x: 0, y: 0, z: 0 } } ], host_net_info: { cmd_data_ip: 192.168.1.50, push_data_ip: 192.168.1.50, point_data_ip: 192.168.1.50, imu_data_ip: 192.168.1.50 } }这里lidar_configs里的ip是雷达的IPhost_net_info里的几个IP都是电脑的IP。填错了就连不上。注意这个配置文件改完之后要重新编译或者至少重新source一下确保驱动读到的是新配置。我见过有人改了配置但没重新编译一直连不上排查半天。3.4 启动驱动验证点云话题配置好之后启动驱动source ~/ws_livox/install/setup.bash ros2 launch livox_ros_driver2 rviz_MID360_launch.py这个launch文件会同时启动驱动和RViz2RViz2里应该能看到点云。如果RViz2里啥都没有先检查话题ros2 topic list应该能看到/livox/lidar和/livox/imu两个话题。然后看有没有数据ros2 topic hz /livox/lidar如果频率是0或者报错说明驱动没收到雷达数据回到网络配置那一步重新排查。4. 点云建图从原始点云到可用地图的完整流程驱动跑通、能看到点云之后下一步就是建图。这里我用的是point_lio或者fast_lio这类LIO激光惯性里程计算法配合Mid-360的IMU数据能实时建出3D点云地图。4.1 为什么需要LIO而不是直接用点云拼接很多人第一反应是我把每一帧点云叠加起来不就行了理论上可以但实际上不行。因为雷达在移动每帧点云的坐标系都不一样直接叠加会糊成一团。你需要知道雷达每一时刻的位姿位置姿态才能把点云变换到统一坐标系下。LIO就是干这个的它用激光点云做scan matching用IMU做运动预测两者融合估计出雷达的位姿然后把点云累积到全局地图里。Mid-360自带IMU数据通过/livox/imu话题发布正好给LIO用。4.2 编译和配置FAST-LIO2FAST-LIO2是目前比较成熟、对Mid-360支持也好的LIO方案。编译流程mkdir -p ~/ws_lio/src cd ~/ws_lio/src git clone https://github.com/hku-mars/FAST_LIO.git cd FAST_LIO git submodule update --init cd ../.. colcon build --symlink-install source install/setup.bash编译之前要确保装了依赖sudo apt install ros-humble-pcl-ros ros-humble-eigen3-cmake-module libeigen3-dev -y配置文件在FAST_LIO/config/目录下Mid-360对应的配置文件通常是mid360.yaml。关键参数参数说明推荐值lid_topic点云话题/livox/lidarimu_topicIMU话题/livox/imuscan_line扫描线数4Mid-360非重复扫描填4blind盲区距离0.5filter_size_surf面点降采样0.3filter_size_map地图降采样0.3cube_side_length地图立方体边长1000scan_line这个参数很多人填错。Mid-360不是传统的多线雷达它的点云不是按线组织的FAST-LIO里填4是官方推荐值填大了会出问题。4.3 启动建图并保存地图启动顺序很重要先起驱动再起LIO。# 终端1启动雷达驱动 source ~/ws_livox/install/setup.bash ros2 launch livox_ros_driver2 rviz_MID360_launch.py # 终端2启动FAST-LIO source ~/ws_lio/install/setup.bash ros2 launch fast_lio mapping_mid360.launch.py启动后在RViz2里应该能看到实时累积的点云地图。拿着雷达在环境里走一圈地图会逐渐建起来。保存地图ros2 service call /map_save std_srvs/srv/Trigger保存的文件通常是.pcd格式可以用CloudCompare或者PCL工具查看。4.4 建图质量调参几个影响很大的参数建图效果好不好参数调优很关键。我总结几个影响最大的filter_size_surf面点降采样大小。调小了地图细节多但计算量大调大了地图稀疏但流畅。室内0.2-0.3室外0.5左右。blind盲区。Mid-360近距离有盲区设0.5能过滤掉雷达正下方的噪点。max_iterationICP迭代次数。默认4环境复杂可以调到6-8但会更吃CPU。cube_side_length地图立方体边长决定了地图能覆盖多大范围。建大场景地图要调大比如2000。提示调参没有万能值跟你的场景、移动速度、环境特征都有关系。建议先用默认值跑一遍看哪里有问题再针对性调。5. 踩坑实录那些让我熬夜的报错和解决过程这部分是这篇的核心价值。我把实际踩过的坑按现象-排查-原因-解决的结构写出来你遇到类似问题可以直接对照。5.1 驱动编译报错找不到livox_sdk2现象./build.sh humble执行到一半报错提示Could not find livox_sdk2。排查先确认SDK装没装ls /usr/local/lib/liblivox_sdk2.so ls /usr/local/include/livox_sdk2/如果文件不存在说明SDK没装成功。原因Livox SDK2的make install有时候会因为权限问题没装到/usr/local或者装到了别的路径。解决重新装SDK确保sudo make install执行成功。如果还是找不到手动指定路径export CMAKE_PREFIX_PATH/usr/local:$CMAKE_PREFIX_PATH然后再编译驱动。5.2 雷达连不上ping通了但驱动收不到数据现象ping 192.168.1.150能通但启动驱动后ros2 topic hz /livox/lidar没数据。排查这种情况八成是配置文件里的IP写错了。检查MID360_config.jsonlidar_configs里的ip是不是雷达的实际IPhost_net_info里的几个IP是不是电脑的实际IP原因雷达的IP不是固定的不同批次的Mid-360默认IP可能不一样。有的是192.168.1.1XXXX是序列号后两位。你得先确认雷达的实际IP。解决用Livox Viewer或者抓包工具确认雷达IP然后改配置文件。改完重新编译驱动。5.3 点云在RViz2里显示但建图漂移严重现象驱动正常点云能看到但FAST-LIO建图时地图漂移走一圈回来地图对不上。排查检查IMU数据是否正常ros2 topic echo /livox/imu看数据有没有跳变。检查时间同步雷达和IMU的时间戳是否一致。检查scan_line参数是不是填错了。原因最常见的是IMU数据有问题或者雷达和IMU的外参没标定好。Mid-360的IMU和雷达是集成在一起的外参理论上固定但如果配置文件里的外参填错了也会漂移。解决确认MID360_config.json里的extrinsic_parameter是默认值全0。确认FAST-LIO的配置文件里imu_topic和lid_topic对上了。如果还漂移降低移动速度LIO对快速运动比较敏感。5.4 建图过程中点云突然消失或卡顿现象建图跑着跑着RViz2里点云突然没了或者卡顿严重。排查看CPU和内存占用htop原因通常是地图太大内存爆了或者降采样参数太小计算量太大。解决调大filter_size_map比如从0.3调到0.5。调大cube_side_length但注意别太大否则内存占用高。如果场景很大考虑分段建图建完一段保存一次然后重新开始。5.5 保存的PCD地图打不开或者显示异常现象/map_save服务调用成功但保存的PCD文件用CloudCompare打开是空的或者乱码。排查检查保存路径和文件大小。原因保存路径可能没权限或者保存的时候地图还没建完。解决确认保存路径有写权限。建图完成后等几秒再保存确保数据都写入了。用pcl_viewer或者CloudCompare打开如果还是不行检查PCD文件的头部信息是否完整。6. 让地图更好用的几个进阶技巧基础流程跑通之后这几个技巧能让你的地图质量上一个台阶。6.1 用八叉树做地图压缩和导航原始PCD地图文件很大直接用于导航不现实。可以用八叉树OctoMap把点云转成概率栅格地图既压缩了体积又方便做路径规划。ROS2里有octomap_server2或者octomap相关包可以把点云话题转成八叉树地图。转换之后地图体积能缩小一个数量级而且可以直接给Nav2用。6.2 多传感器融合加个IMU或者轮速计Mid-360自带的IMU精度一般如果对建图精度要求高可以外接一个更高精度的IMU或者用轮速计做辅助。FAST-LIO支持多传感器输入配置好外参就行。6.3 回环检测让大场景地图闭合FAST-LIO本身不带回环检测走大场景的时候会有累积误差。可以配合SC-PGO或者LIO-SAM这类带回环的方案走一圈回来地图能闭合精度提升明显。6.4 地图后处理滤波和着色建完的地图可以用PCL做后处理统计滤波去掉离群噪点。体素滤波进一步降采样。着色根据高度或者反射强度给点云上色可视化效果更好。# 用pcl_filter做统计滤波 pcl_filter input.pcd output.pcd -method statistical -mean_k 50 -std_dev 1.07. 一些实际使用中的体会这套方案我用了大半年从室内小场景到室外几百米的范围都跑过。Mid-360 ROS2 FAST-LIO的组合在入门级3D建图里算是很能打的了。但有几个点必须提醒第一Mid-360对玻璃和镜面基本没辙点云会穿过去或者产生虚假点。如果场景里有大面积玻璃要么贴膜要么后期手动处理。第二建图时的移动速度别太快尤其是转弯的时候。LIO再强也架不住你拿着雷达狂奔点云匹配跟不上就会漂。第三配置文件一定要备份。我改参数改崩过好几次最后都是靠备份的配置文件恢复的。第四RViz2很吃资源如果电脑配置一般建图的时候可以关掉RViz2用命令行看话题频率就行建完再打开看结果。最后说个我自己的习惯每次建图前先跑一遍小范围测试确认驱动、话题、参数都没问题再正式开始建大图。这样能省很多返工的时间。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。