☰
Livox MID-360在ROS2 Humble下从驱动编译到点云可视化的完整配置指南
2026/10/17 13:59:28 网站建设 项目流程

如果你手头正好有一台Livox MID-360,又准备在Ubuntu 22.04上跑ROS2,那你大概率会经历这么一段:网线插上了,电源也亮了,驱动也编译了,但rostopic list里就是空空如也,或者rviz里半天不出一帧点云。说实话,我第一次配这台雷达的时候也在这个阶段卡了快一个下午,最后发现不是编译的问题,而是网络配置压根没做对。

这篇内容就是把我实际配置的过程完整复盘一遍,覆盖整条链路:从硬件接线、驱动源码编译、网卡IP设置,到launch启动、rviz可视化和常见问题排查。不管你是刚拿到MID-360准备做毕设或课题,还是已经在跑SLAM想换一台雷达,这套流程都值得从头到尾走一遍。目标只有一个:让你照着操作,能在半小时内看到实时点云。

1. 整体设计思路:MID-360在ROS2体系下到底扮演什么角色

1.1 先把雷达的身份搞清楚

Livox MID-360不是传统意义上的机械式激光雷达,它属于混合固态雷达,三个激光探头呈倒三角排列,靠内部棱镜旋转实现360度覆盖。这种设计带来的好处是体积小、重量轻、盲区小,所以这两年很多轮式底盘、四足机器人和无人机都拿它当主传感器。

但在软件层面,它有一个和传统雷达很不一样的地方:没有走ROS里那种通用的sensor驱动接口,而是通过Livox官方的SDK来获取数据。也就是说,你想要在ROS2里用上MID-360,核心工作就是两件事:

  • 把Livox的SDK和ROS2驱动装好、编译好;
  • 把雷达和主机之间的网络链路打通。

这两件事缺一不可。我见过不少人只盯着驱动编译,却没意识到MID-360本质上是一个以太网设备,点云数据是通过UDP包发到主机网卡的。网段的配置不对,驱动编译得再漂亮也白搭。

1.2 为什么版本组合这么关键

先说清楚一个容易踩坑的版本对应关系:Ubuntu 22.04对应的ROS2发行版是Humble Hawksbill。这个组合很常见,但网上搜到的大量教程还停留在Ubuntu 18.04配ROS1 Melodic、或者Ubuntu 20.04配ROS2 Foxy的时代,照搬过来大概率会出各种兼容性问题。

另外,Livox官方维护了两个ROS驱动版本:

  • livox_ros_driver:主要面向ROS1,用的是catkin编译;
  • livox_ros_driver2:支持ROS2,也用colcon。

在Humble环境下一定要用driver2。有的人看到老教程里写着clone livox_ros_driver,装完之后发现整个编译流程都是catkin的,在ROS2里根本没有办法正常工作,这种错误非常常见。

有人可能还会问:Ubuntu 22.04能不能装ROS2的Foxy版本?理论上有一些第三方预编译包,但不推荐。Humble和Foxy的底层通信机制、launch文件写法都有差异,Livox的driver2发布时也主要针对Humble做过适配。老老实实装Humble,后面会少很多莫名其妙的坑。

2. 开工前必看:硬件连接与环境准备清单

2.1 接线和供电的细节问题

MID-360的接线不算复杂,但有几个细节特别容易出问题。

第一,供电电压。MID-360支持9到27V直流输入,标配推荐12V。官方有一根电源线是接到航模电池或者稳压电源上的,千万不要试图用USB口给它供电,电流完全不够,雷达会一直处于半启动状态,指示灯闪烁但点云出不来。

第二,网线。雷达通过标准千兆以太网口传输数据,包装里配的是一根转接线的接头,需要自己准备网线。这里有一个容易被忽略的点:笔记本上如果没有网口,用USB转千兆网卡时,一定要确认转换芯片是千兆的,而且驱动在Ubuntu 22.04下能被正确识别。百兆的USB网卡就算能ping通,带宽也不够,点云会丢帧丢到怀疑人生。

第三,雷达和主机要直连。最稳妥的方式是中间不经过任何路由器或交换机,直接用网线把雷达接到主机网卡上。因为雷达出厂默认IP是192.168.1.100,属于固定IP模式,一旦经过路由器,很可能因为网段冲突或者路由器防火墙设置导致完全收不到数据。

2.2 软件环境确认

在开始编译驱动之前,先把基础环境确认一遍。打开终端,依次检查:

# 确认系统版本 lsb_release -a # 确认ROS2环境变量 echo $ROS_DISTRO

如果echo $ROS_DISTRO没有输出,说明ROS2环境没有source,需要先执行:

source /opt/ros/humble/setup.bash

为了让环境变量持久生效,建议写进~/.bashrc:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc

另外,编译工具colcon是必须的。Ubuntu 22.04默认不会安装,需要手动装:

sudo apt update sudo apt install python3-colcon-common-extensions

如果你在安装ROS2时选择的是ros-humble-desktop完整版,rviz2、tf2这些可视化必备组件都已经带上了,不需要额外安装。

这里多说一句:有的人习惯了ROS1的catkin工作流,在ROS2下还想着先去catkin_make一下,这个习惯要改掉。ROS2的构建系统是colcon,底层虽然还是CMake,但依赖关系处理、环境变量source机制都不一样。

3. 驱动源码获取与编译:核心操作全流程

3.1 克隆Livox驱动源码

驱动源码直接从GitHub获取,我使用的是master分支。执行以下命令:

mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src git clone -b master https://github.com/Livox-SDK/livox_ros_driver2.git

克隆完成后先别急着编译,我习惯先看一下目录结构:

cd livox_ros_driver2 ls -la

你会看到里面有config、launch、src、livox_ros_driver2、livox_interfaces等目录。这里有个重要信息:livox_interfaces是独立的接口包,定义了雷达的话题类型、消息格式,必须先编译好,后面的驱动包才能找到这些定义。

3.2 编译顺序的讲究

很多人拿到源码直接一个colcon build,结果编译到一半报错,提示找不到某个消息类型,其实就是因为接口包没有提前编译。正确的做法是分两步:

cd ~/ros2_ws colcon build --packages-select livox_interfaces source install/setup.bash

然后再编译驱动本体:

colcon build --packages-select livox_ros_driver2 source install/setup.bash

如果两次编译都没有报错,说明驱动源码本身没有问题。这时候可以顺手验证一下接口包是否安装成功:

ros2 interface package livox_interfaces

如果输出了消息列表,说明livox_interfaces已经被正确安装了。这一步虽然简单,但能提前排除很多后续排查中的干扰因素。

我个人的习惯是,在第一次编译前先把系统的编译依赖装齐,避免装到一半发现缺东西:

sudo apt install ros-humble-rosidl-default-generators ros-humble-rmw-cyclonedds-cpp

第一个是ROS2消息生成的必备依赖,第二个是DDS实现中的一个选择。Livox驱动默认用的还是Fast DDS,但装一个Cyclone DDS可以备用,遇到网络发现异常时可以切换试试。

3.3 编译阶段容易遇到的报错

编译过程中最常见的报错有两类。

一类是找不到消息头文件。报错信息大概长这样:

fatal error: livox_interfaces/msg/custom_msg.h: No such file or directory

这种问题百分之百是接口包没有编译或者没有被source。确认一下~/ros2_ws/install目录下有没有livox_interfaces文件夹,再跑一次source install/setup.bash。

另一类是和Python相关的错误。如果提示ModuleNotFoundError,比如找不到em或者catkin_pkg,执行:

sudo apt install python3-catkin-pkg python3-empy

这两个是ROS2构建过程中用到的Python依赖,Ubuntu 22.04默认环境有时候不会自动装上。

还有一个小坑:如果之前装过老版本的livox驱动或者ROS1环境,可能会出现环境变量混乱。我建议在干净的工作空间里编译,不要复用旧的ROS1工作目录。

4. 网络配置:雷达连不上时先检查网卡

4.1 MID-360默认IP和网段设计

MID-360在固定IP模式下,默认IP为192.168.1.100,子网掩码255.255.255.0。你的主机网卡必须和它处于同一个网段,比如设置成192.168.1.50,才能互相通信。

有人会问:为什么不能把雷达IP改成和电脑同一个网段?理论上可以,而且Livox Viewer 2也支持修改雷达IP,但我觉得在初次调试阶段,最稳的方式反而是在网卡上设置一个静态IP,保持雷达默认配置不变。这样万一后面把雷达配置弄乱了,还能随时恢复出厂设置。

还有一个细节:MID-360的三个探头各自有自己的IP吗?不是的,整台雷达只有一个IP,数据通过同一个UDP端口发出。驱动里面配置的lidar_configs里的ip字段,指的就是雷达的IP地址。

4.2 给有线网卡配静态IP

在Ubuntu 22.04下,推荐用netplan来配置网络。先查一下你的有线网卡名字:

ip link

通常有线网卡是eth0、enp3s0之类的名字,记下来备用。然后编辑netplan配置文件:

sudo nano /etc/netplan/01-netcfg.yaml

写入如下内容(把eth0替换成你自己的网卡名):

network: version: 2 ethernets: eth0: dhcp4: no addresses: - 192.168.1.50/24

保存退出后应用配置:

sudo netplan apply

这时再用ip a看一眼网卡状态,确认192.168.1.50这个地址已经生效。然后ping一下雷达的默认IP:

ping 192.168.1.100

如果ping通了,说明网络物理链路没问题,这是整个配置链路里最基础的验证步骤。ping不通的话,先不要急着查驱动,把网线、网卡驱动、网段配置排查到位再说。

这里有一个常见的网络配置坑:笔记本如果同时开了WiFi,而且WiFi网段也是192.168.1.x,那么路由表可能出问题,导致数据包发到了WiFi网卡而不是有线网卡。我建议调试时直接把WiFi关掉,或者用ip route检查默认路由走的是哪块网卡。

4.3 用Livox Viewer 2进行链路验证

如果你在安装ROS2驱动之前想先确认雷达本身是好的,强烈建议先用官方工具Livox Viewer 2做一次链路验证。这个工具有Windows和Linux版本,在官网下载解压就能用。

打开软件后先设置网卡IP为本机的192.168.1.50,软件会自动扫描网段内的Livox设备,一般几秒钟就能发现MID-360。如果这里能正常显示点云,说明雷达硬件、网线、网卡都是正常的,后续问题只可能出在ROS2驱动配置上。

为什么推荐先做这一步?因为我踩过这样一个坑:驱动编译完了,launch也启动了,但点云就是刷不出来,折腾了半小时才发现是那根网线是百兆的,在Livox Viewer 2里也只能看到断断续续的点云。先验证硬件,再排查软件,会省掉很多无用功。

5. 启动节点与可视化:看到点云才算真正跑通

5.1 launch文件的选择

Livox驱动编译完并source后,启动方式很简单。先进入工作空间:

cd ~/ros2_ws source install/setup.bash

这时候如果想直接启动mid360并以rviz可视化,使用这个命令:

ros2 launch livox_ros_driver2 rviz_MID360.launch.py

如果想先只启动驱动节点不做可视化:

ros2 launch livox_ros_driver2 msg_MID360.launch.py

我个人推荐直接用带rviz的launch,因为一次性就能验证完整链路。启动后终端会打印雷达的连接状态信息,重点关注有没有类似connect to lidar successfully这样的日志。如果一直卡在等待连接,还是先回去检查网络,不要继续往下走。

5.2 话题查看与rviz配置细节

启动完成后,新开一个终端查看话题列表:

ros2 topic list

正常情况下应该能看到这几个话题:

/livox/lidar /livox/imu /livox/pointcloud /parameter_events /rosout

其中/livox/lidar是点云数据话题,类型为sensor_msgs/PointCloud2;/livox/imu是IMU数据话题;/livox/pointcloud是自定义格式的原始点云。在实际做SLAM或者其他算法开发时,我一般优先订阅/livox/lidar,因为它直接是标准PointCloud2格式,不需要再做格式转换。

如果直接用rviz_MID360.launch.py启动,rviz已经自动打开了。但有一个配置细节值得注意:rviz左侧的Global Options里,Fixed Frame默认可能是livox_frame,这是驱动设置的雷达坐标系。如果点云显示不出来,先检查这个frame是否存在:

ros2 topic echo /tf --once

或者手动在rviz里把Fixed Frame改成livox_frame。还有一种情况是launch里已经设置了坐标系关系,但tf没有正常发布,这时候点云虽然订阅到了,但因为坐标系对不上也显示不了。最简单的验证方式是在rviz左侧Add面板里,通过By topic添加/livox/lidar的PointCloud2显示项。

5.3 验证点云数据的质量

能看到点云后,别急着高兴,建议再确认一下数据质量。

执行:

ros2 topic hz /livox/lidar

MID-360在默认的单回波模式下点云频率是10Hz左右。如果得到的结果只有1到2Hz,说明网络带宽或者点云配置有问题,最常见的原因是网卡协商到了百兆模式。

再查一下点云内容:

ros2 topic echo /livox/lidar --once

注意看data字段的长度,以及header.stamp是否有跳变。如果时间戳乱跳,说明主机和雷达的时间同步有问题,这个在SLAM场景下尤其致命,后面单独说。

可视化层面,rviz里正常显示应该是室内环境轮廓清晰、边缘锐利。如果点云里出现大量飘在外面的噪点,检查雷达是否有遮挡物或者供电电压不稳;MID-360对供电质量比较敏感,电压波动大时,点云边缘会出现明显的抖动。

6. 真正跑项目时才会遇到的坑:排查思路与经验扩充

6.1 从链路视角排查问题

接上一条,如果按部就班做完了还是没点云,我建议用分层的思路排查问题,而不是东一榔头西一棒子。通常的排查层次是:

  • 物理链路层:雷达指示灯是否正常、网线插头是否松动、网卡是否识别为千兆;
  • 网络层:ping是否通、网段是否一致、防火墙是否拦截UDP端口;
  • 驱动层:launch日志有没有异常、话题有没有发布、节点状态是否正常;
  • 数据层:话题有数据但rviz不显示,大概率是frame配置或消息类型解析问题。

我做一个简单的速查表:

现象可能原因排查动作
ping不通雷达网段不对、网线坏、网卡没配好检查ip a和网线
ping通但无话题驱动没正常启动、launch文件没source查看launch日志、重跑source
有话题但无点云frame配置错误、网络丢包严重改Fixed Frame、检查网卡速率
点云帧率极低百兆网卡、WiFi占用、供电不足更换千兆网卡、断开WiFi
点云出现断条供电波动、网线接触不良换电源、换网线

这套排查思路看起来繁琐,其实是最省时间的。我后来带新人时,每次都让他们先按这个顺序走一遍,基本十分钟内就能定位到问题。

6.2 时间同步问题不能忽视

如果你只是开rviz看看点云,时间同步没那么重要。但到了跑SLAM、做多传感器融合的时候,IMU和雷达之间的时间戳不一致,位姿估计会直接飘掉。

MID-360自身是支持PTP时间同步的,但默认情况下驱动只是把所有消息的时间戳打为主机接收时刻。这个带来的问题是:如果主机处理有延迟,IMU消息和点云消息的时间戳差会明显抖动。

我目前在项目中用的是硬件触发方案:把雷达的同步线接入主控的PTP时钟网络,让雷达和IMU共享同一个时钟源。但如果只是简单跑跑算法,一个折中的办法是订阅/livox/lidar时,把点云的时间戳统一用header.stamp,并且保证主机CPU负载不过高,丢失的大时间跳变就不会太严重。

6.3 接入SLAM与外参标定的建议

MID-360这个雷达在SLAM里用得比较多,尤其是基于Fast-LIO、LIO-SAM这类框架的项目。接入前有几个点值得提前规划。

第一,坐标关系。雷达输出的点云默认在livox_frame坐标系下,为了让雷达数据和IMU、相机数据统一,需要发布雷达到主体(base_link)的静态坐标变换。最简单的验证方式:

ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link livox_frame

第二,外参标定。雷达和IMU之间的外参,包括位置偏移和三轴旋转角,对融合算法效果影响极大。手量的初值足以让程序跑起来,但如果发现建图效果始终不理想,建议做一个完整的外参标定。目前有一些开源工具包可以完成lidar到IMU、lidar到相机的标定,流程一般是采集静态数据、然后利用标定板或场景特征解算位姿。我的习惯是拿到一台新雷达先花半天时间把外参标定做了,后面省心很多。

第三,多雷达扩展。如果项目里需要同时使用多台MID-360,修改配置文件中lidar_configs数组,为每台雷达指定不同的IP和id即可。注意每一台雷达都要单独供网,并且主机的多个网卡要分别配置对应网段的静态IP。

收尾前想再分享两个习惯

最后分享两个我踩坑之后养成的习惯。

第一个习惯:拿到不熟悉的传感器,先在官方工具里验证一遍硬件,再接ROS2。这个事情看起来多了一道工序,但实际上能帮你把“传感器坏了”和“软件配置错了”这两个可能分开。Livox Viewer 2用起来很简单,连接成功就能看到点云,一旦有数据,硬件大概率是好的,后面就可以安心排查软件了。

第二个习惯:每次配置新驱动之前,先把~/.bashrc里的source语句检查一遍,确保ROS2环境干净。我遇到过好几次问题,最后发现是之前某次测试时把ROS1的环境变量写进了bashrc,导致ROS2命令看起来正常但实际解析到了错误的库。清理掉之后,一切就都顺畅了。

配置MID-360这条路说难不算难,说简单也绝没有“装上就能用”那么轻松。只要把驱动编译和网络配置两件事抓准了,整个流程就会顺很多。希望这篇实战记录能帮你少走一些弯路,半夜跑数据时不用再对着空荡荡的rviz发呆。

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

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

立即咨询