ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

3D激光雷达MID360:从驱动配置到bag包录制回放指南

2026/9/8 8:42:37 拓冰建站 浏览量
3D激光雷达MID360:从驱动配置到bag包录制回放指南 搞3D激光雷达的朋友应该都有过这种体验费了半天劲把雷达驱动跑起来点云在Rviz里也刷得飞起结果真要拿去跑SLAM或者导航的时候才发现手头没有一份能用的数据包。要么是现场环境太乱没法录要么就是录的时候话题没选对回头一看包里全是空话题。我最早折腾MID360的时候就吃过这个亏所以今天这篇东西我就把从驱动配置到录制bag包再到回放验证的完整流程一次性说清楚。这篇内容更适合准备做nav2导航、3D SLAM建图或者想用MID360做算法验证的朋友参考。不管你是刚把雷达拿到手还是已经被驱动折磨了一晚上按照下面这套流程走基本能少踩一半的坑。1. MID360这块雷达到底特殊在哪1.1 为什么导航方案开始偏向3D雷达很多做机器人的朋友一开始用的是单线激光雷达也就是2D雷达。2D雷达便宜、驱动成熟、建图算法也稳定但问题在于它只能看到一个平面。地面稍微有点坡、车身稍微有点颠簸或者货架底部有个悬空的横梁2D雷达就“瞎”了。这两年机器人从室内往室外、从平地往复杂地形走3D雷达的需求一下子就上来了。3D雷达能提供几十万个空间点能把障碍物的轮廓、高度、悬空物体这些信息全都带出来配合上相应的SLAM算法建出来的地图是带高度信息的导航决策自然会聪明很多。而且现在的3D雷达价格也降了不少已经不是动辄几十万的“贵族传感器”了。1.2 MID360的硬件特点和核心参数MID360是Livox览沃推出的一款非重复扫描式的3D激光雷达它的结构设计很有意思没有传统的机械旋转外壳靠的是内部棱镜的摆动加旋转来改变激光的出射方向。这种设计的优势是体积小、重量轻而且抗震性能好用在移动机器人上很合适。几个关键参数我直接列出来测距范围40米在10%反射率的物体上对于室内导航和大部分园区场景来说完全够用。视场角水平360度垂直方向59度其中上仰52度、下俯7度。这个垂直视场角比很多同类产品要大能更好地感知高处和近处地面。盲区约0.1米几乎可以忽略不计贴在雷达正下方的物体也能扫到。点频20万点/秒点云密度在非重复扫描雷达里算不错的。内置IMU这个是亮点雷达自带一个IMU可以输出高频的角速度和加速度数据做LIO类的SLAM算法时不需要再额外挂一个IMU省了不少事。需要特别说明的是MID360是非重复扫描方式它的扫描轨迹不会像机械雷达那样固定。0.1秒内它能把整个视场扫一遍但点云分布是随时间累积变化的时间越长覆盖越密。这就意味着录制bag包时话题的时间戳和点云本身的完整性非常重要这些细节我后面会展开讲。2. 录制bag包前的软硬件准备2.1 硬件连接和IP规划先说连接方式。MID360的默认接口是百兆以太网口需要一根网线直连工控机或者通过交换机接入局域网。它默认的IP是192.168.1.160子网掩码255.255.255.0工控机的网卡IP需要手动配成192.168.1.x网段比如192.168.1.5。这里有个容易出问题的地方如果你只有一根网线直连工控机这个网口的IP必须手动配不能依赖DHCP自动获取否则根本找不到雷达。而且这个网口因为要跑点云数据尽量不要同时承担上网功能带宽和路由上都有干扰实测下来很容易掉线。供电方面也要注意MID360支持宽压输入但建议使用稳定供电不要用那种输出纹波很大的开关电源点云数据出现跳变往往就是供电不稳定造成的。我开始用笔记本USB口转出来的5V供电试过点云偶尔会丢帧后来换了个12V稳压模块问题就消失了。2.2 ROS环境安装新手建议直接用一键脚本MID360的SDK和驱动封装在ROS里所以得先有一个能用的ROS环境。很多人卡在ROS安装这一步尤其是Ubuntu版本和ROS版本对应关系搞不清楚。我的建议是新装系统的话直接选Ubuntu 20.04配ROS Noetic这是目前资料最多、坑最少的组合。Ubuntu 18.04配Melodic也完全可以但部分新版本的驱动和第三方SLAM包已经不再支持Melodic了没必要逆着生态走。ROS安装这件事在中文社区里“鱼香ROS”一键安装脚本用得很多。它在服务器选择、软件源替换、rosdep初始化这些环节做了自动化处理对新手来说确实能省不少时间。脚本拉下来之后按提示选择对应版本和桌面版或基础版整个安装过程大概十几分钟。对于已经装好ROS的朋友这部分直接跳过就行。装了ROS之后记得先跑一下rosdep update再验证一下roscore能不能正常启动。如果roscore起不来最常见的原因是环境变量没生效或者另一个ROS进程占用着端口终端里先执行一下source /opt/ros/noetic/setup.bash看看。2.3 驱动版本怎么选Livox官方的ROS驱动有livox_ros_driver和livox_ros_driver2两个系列。老版本的livox_ros_driver对MID360的支持不完整强烈建议直接用livox_ros_driver2。这个驱动同时支持ROS1和ROS2而且代码结构更清晰MID360的相关参数也都做了适配。驱动获取方式我推荐从GitHub上Livox-SDK/livox_ros_driver2仓库拉取然后按官方说明编译。编译依赖的livox_sdk2是作为子模块一起拉取的所以克隆的时候记得加上--recursive参数。编译出现缺包的错误基本都是缺ros-noetic-catkin、ros-noetic-roscpp这类依赖缺什么装什么就行。3. 驱动配置与雷达联调3.1 编译并配置livox_ros_driver2驱动编译其实很简单但有一个关键点就是你得知道你后面要用的SLAM框架或者导航框架它们是基于ROS1还是ROS2。如果暂时不确定先用ROS1 Noetic跑通就行后面再换ROS2也不冲突。编译命令我以ROS1为例mkdir -p ~/mid360_ws/src cd ~/mid360_ws/src git clone --recursive https://github.com/Livox-SDK/livox_ros_driver2.git cd ~/mid360_ws catkin_make source devel/setup.bash编译过程中如果报错找不到livox_sdk2百分百是因为克隆时没加--recursive子模块没拉下来。这时候可以在livox_ros_driver2目录下手动执行git submodule update --init --recursive然后再重新编译。驱动编译后在config/目录下有一个mid360_config.json文件这是MID360的配置文件核心配置项是host_ip和pcl_data_type。host_ip要填工控机网卡的IP地址也就是刚才配的那个192.168.1.5。pcl_data_type建议填1表示输出PointCloud2格式这样在Rviz里可以直接显示后续做点云转激光数据也方便。3.2 启动雷达在Rviz里看到点云配置完成后启动驱动roslaunch livox_ros_driver2 msg_MID360.launch正常启动后终端会打印雷达的SN、固件版本和点云输出状态。如果卡在Waiting for UDP data...说明雷达和主机之间的网络没通先ping一下192.168.1.160不通就回到网卡IP配置去排查。点云数据的话题名是/livox/lidarIMU数据的话题名是/livox/imu。在Rviz里添加PointCloud2显示Fixed Frame改成livox_frame这时应该就能看到雷达周围环境的三维点云了。转动雷达或者摆动雷达点云会跟着变说明联调成功。这里有个经验要分享如果你是在室内录制建议把雷达放在一个相对空旷的位置四周2米内不要有太多反光物体。MID360对黑色物体和镜面物体的探测能力很弱黑色吸光、镜面镜面反射都会造成点云空洞。这不是雷达坏了是物理特性决定的录制数据时尽量考虑进去。3.3 IMU数据要不要录MID360内置IMU输出的/livox/imu话题频率在200Hz左右做LIO-SAM、FAST-LIO这类算法时IMU数据是必须的。即便你暂时只打算跑LOAM或者复现点云配准我也建议把IMU话题一并录进去。bag包比实时数据多了IMU将来算法的选择空间就大很多而且IMU这种传感器数据录制的时候也不会额外占用多少空间。需要说明的是MID360的IMU和雷达的时钟是同步的时间戳做的很好这也算是它内置IMU的一个优势。做算法的人都知道外置IMU和雷达之间如果时间没对齐跑LIO类算法一定会飘MID360天然就没有这个问题。4. 录制bag包的完整流程4.1 录制前的三个检查录制之前我一般会做三个检查全部通过才开始正式录。第一重新确认雷达稳定运行了至少3分钟。刚上电的时候雷达内部的器件需要一个热稳定过程前几分钟的点云可能会有轻微漂移如果这个阶段录了数据后面做标定会有麻烦。第二在Rviz里反复查看点云是否连续、地面是否平整有没有大量跳变点。第三确认所有需要用的话题都已经稳定发布用下面命令查看一下rostopic list rostopic hz /livox/lidar rostopic hz /livox/imu/livox/lidar的频率应该稳定在10Hz附近/livox/imu的频率应该在200Hz左右。如果hz值大幅度波动说明网络传输不稳定优先排查网线和供电。4.2 执行rosbag record录制命令我这样写mkdir -p ~/bag_files cd ~/bag_files rosbag record /livox/lidar /livox/imu -O mid360_test.bag-O参数的意思是把bag包命名为mid360_test.bag这样比默认生成的带时间戳文件名更好认。录制过程中终端会实时显示每条话题的消息数、包大小和总时长。如果消息数长时间不变大概率是话题没对上。如果你后续想基于这个bag做nav2导航仿真也可以顺便把TF相关的topic录进去。比如你有一个简单的雷达基座到雷达的坐标变换tf_static话题建议一起录。不过如果是纯数据采集后面回放时再发布TF也来得及不一定非要在录制阶段就带上。关于录制时长我的建议是每次录制至少连续跑5分钟。太短的数据包没有统计意义点云分布也未必完整太长的话bag包体积会非常大MID360每秒的点云数据量在3MB左右加上IMU数据10分钟大概2GB后期处理时会有点压力。5到10分钟是一个比较合理的区间。4.3 回放验证bag包录完以后我习惯第一时间回放查看而不是直接拷走。回放的好处是能发现录制过程中没察觉的问题比如丢帧、时间戳跳变、点云断层。回放命令如下rosbag info mid360_test.bag rosbag play mid360_test.bag --clockrosbag info会打印bag包的话题、时长、消息数。这个阶段看一下消息数是否与录制时长匹配。比如录制600秒/livox/lidar话题应该大约有6000帧消息误差不能太大。回放的同时另开一个终端打开Rviz用完全相同的方式显示PointCloud2点云。回放的点云应该和实时点云表现一致。如果回放时发现点云断断续续但实时显示正常通常说明录制时雷达掉过线或者系统负载过高导致丢帧。这种bag包建议直接删除重新录不是靠后期能修回来的。还有一个小技巧回放的时候可以加--clock参数让ROS系统时间跟着bag包的时间走。这样如果你后面要用rosbag play 外接其他节点的方式做联合测试各节点之间的时间基准是统一的不会出现时间戳乱掉的问题。5. 录完bag之后坐标、频率和后续用法5.1 坐标系设置MID360驱动默认发布的点云坐标是定义在livox_frame下的。这个坐标系的原点在雷达的几何中心X轴指向雷达前方对应雷达外壳上的箭头方向Y轴向左Z轴向上符合右手坐标系。如果你需要把点云转到机器人的base_link坐标系就要额外发布一个livox_frame到base_link的静态坐标变换也就是TF。这里要特别谨慎很多人录数据的时候没有固定好雷达安装位置和姿态或者安装角度是歪的又没有记录后面做算法时坐标系怎么都对不上。我的建议是在录制前就把雷达安装固定好测量好相对车体中心的位置和角度直接用静态TF发布不要指望靠算法自动标定来解决安装偏差。5.2 bag包如何用于SLAM建图和导航有了bag包后续处理基本上有两类路径。一类是复现纯建图算法比如LIO-SAM、FAST-LIO、Point-LIO。这些算法接收/livox/lidar和/livox/imu两个话题正好对应我们录制的话题。回放bag包同时启动算法节点就能离线重建出三维点云地图和机器人的运动轨迹。这种离线复现的好处是可控性好参数调整可以一版一版地迭代不会因为现场数据不再而无法验证。另一类是用在nav2导航上。nav2本身吃的是2D激光数据所以需要用pointcloud_to_laserscan这类工具把3D点云投影成2D激光再喂给nav2的代价地图。MID360的垂直视场角大投影出来的2D激光范围比单线雷达宽但也要注意投影高度区间的选择。如果投影区间取得太高会把货架顶层也判定为障碍物导致机器人不敢靠近货架取得太低又会漏掉地面上的小障碍物。这个高度区间需要根据自己的机器人底盘和通过性去实验没有一劳永逸的参数。5.3 录制数据的预处理录完的bag如果需要长期保存建议先做一个轻量级预处理把IMU话题的异常数据过滤掉把点云的离群点做一次滤波。其实这一步在算法里面通常会做但如果数据集是给别人用的提前处理好能省去对方很多麻烦。工具上可以直接用ROS自带的PCL滤波器节点也可以用Livox提供的livox_point_cloud_process工具操作起来都不复杂。不过我必须提醒一句预处理只改点云的“质量”不能改点云的“原始坐标”。一旦做了滤波、降采样、去畸变这类操作点云数据就不能再当作原始传感器数据用于所有算法了。所以最原始的bag包一定要备份一份后续所有处理都在副本上进行这是底线。6. 实操中高频出现的坑汇总排查6.1 雷达找不到ping不通设备IP这个问题的比重最高。先检查网线是否插紧再检查工控机网口IP是否为静态IP并且和雷达IP在同一个网段。很多工控机有多个网口容易搞混。我用ifconfig查当前活动网口的IP地址确认是192.168.1.5之后就排除了这个问题。还有一个细节有些交换机端口是关闭自动协商的如果你用了交换机连接而不是直连可以换一个端口试试。6.2 点云有大量跳变噪点先观察噪点出现的位置。如果只是在某些角度固定出现大概率是被旁边反射物体干扰如果是随机跳变优先怀疑供电。我遇到过一台工控机的USB口供电不稳雷达离得又远网线太长信号衰减点云噪点非常多。后来把供电改为独立12V2A电源问题就解决了。另外网线质量也很重要不建议用超过10米的普通网线最好使用带屏蔽的工业网线。6.3 rosbag play时TF确实发布时间不对如果回放bag包时发现点云显示位置不对或者Rviz里坐标系报错多半是bag包里的TF话题和当前环境的TF冲突了。处理办法是在回放时把/tf和/tf_static话题过滤掉只在bag里播放雷达和IMU数据然后用一个专门的节点发布静态TF。这个习惯建议从一开始就养成特别是做多传感器融合测试的时候。6.4 录制和回放常用命令速查我整理了一张表把录包过程中最高频用到的命令放在一起方便你现场参考。用途命令查看当前活跃话题列表rostopic list查看点云话题发布频率rostopic hz /livox/lidar查看IMU话题发布频率rostopic hz /livox/imu启动MID360驱动roslaunch livox_ros_driver2 msg_MID360.launch查看网络端口与IPifconfig查看雷达设备IP连通性ping 192.168.1.160录制bag包rosbag record /livox/lidar /livox/imu -O xxx.bag查看bag包信息rosbag info xxx.bag回放bag包rosbag play --clock xxx.bag仅回放指定话题rosbag play xxx.bag --topic /livox/lidar这张表省去你临时翻文档的时间建议直接存下来。7. 录包之外的一点心得说到最后我特别想强调一个观念。很多人觉得录制bag包嘛一句rosbag record就完了。但真正做过几轮SLAM和导航算法验证的人都明白数据包的质量决定了算法调试的效率。一份时间戳平稳、坐标清晰、无丢帧的数据包能让你在同一个数据集上快速对比好几套参数这种迭代速度是现场实测给不了的。我自己的习惯是拿到的每一批bag包会在第一时间用rosbag info拉出基本信息然后回放一遍把回放过程中Rviz的截图存档。这些元信息虽然不起眼但等三个月后再回头找数据你会发现当初花两分钟做的记录能帮你省下两个小时找数据。后续如果想把这套数据接入nav2导航最顺的路径是先把点云投影成2D激光再跑一下Nav2的事先配置看看代价地图能否正确感知地面和悬空物。如果测试中发现雷达的安装高度、俯仰角对投影结果影响明显不要怕反复调整MID360小巧轻便拆装非常方便这个优势在实际调试中会被不断放大。