Livox MID-70从零到一:ROS环境下的数据采集与可视化实战 1. Livox MID-70初识与环境准备第一次拿到Livox MID-70这款固态激光雷达时说实话有点懵。这个看起来像个小盒子的设备居然能实现360°全向扫描后来实测发现它的确能在100米范围内实现厘米级精度而且点云密度比传统机械雷达高得多。不过要想让它跑起来得先搞定三件事硬件连接、网络配置和ROS环境搭建。先说说硬件连接。MID-70标配千兆网口包装盒里会附送一根带锁扣的六类网线。这里有个坑要注意一定要用原装网线我有次随手拿了根普通网线结果点云数据断断续续排查半天才发现是线材问题。连接时记得把雷达的电源适配器也接上12V/2A的规格用普通路由器电源可能会供电不足。网络配置是第一个难关。MID-70出厂默认IP是192.168.1.1XXXX是设备序列号末两位我们需要把电脑配置到同网段。在Ubuntu 20.04上配置静态IP的方法和18.04略有不同建议用netplansudo nano /etc/netplan/01-network-manager-all.yaml写入以下配置以192.168.1.50为例network: version: 2 renderer: NetworkManager ethernets: enp3s0: dhcp4: no addresses: [192.168.1.50/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114]保存后执行sudo netplan apply。测试连通性可以ping雷达IP如果出现Destination Host Unreachable八成是网卡名没写对用ip addr命令确认。ROS环境推荐安装Noetic版本虽然官方文档说兼容Melodic但我实测Noetic的驱动更稳定。安装时记得换国内源sudo sh -c . /etc/lsb-release echo deb http://mirrors.ustc.edu.cn/ros/ubuntu/ lsb_release -cs main /etc/apt/sources.list.d/ros-latest.list2. 驱动安装与编译踩坑实录驱动安装看似简单实则暗藏玄机。官方提供了SDK和ROS驱动两个部分建议按这个顺序安装首先是Livox SDK这里容易遇到OpenSSL版本冲突。如果系统已有其他版本的OpenSSL建议用源码编译wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -zxvf openssl-1.1.1w.tar.gz cd openssl-1.1.1w ./config --prefix/usr/local/openssl --openssldir/usr/local/openssl make -j$(nproc) sudo make install然后设置环境变量export LD_LIBRARY_PATH/usr/local/openssl/lib:$LD_LIBRARY_PATH接下来编译SDK时如果遇到CMake报错找不到OpenSSL需要手动指定路径cd Livox-SDK/build cmake .. -DOPENSSL_ROOT_DIR/usr/local/openssl make sudo make installROS驱动部分更考验耐心。官方仓库的master分支可能不稳定建议切换到对应版本tag。比如MID-70最好用v2.6.0git clone https://github.com/Livox-SDK/livox_ros_driver.git cd livox_ros_driver git checkout v2.6.0编译前有个关键步骤修改CMakeLists.txt中的Boost版本。ROS Noetic默认用Boost 1.71但驱动可能要求更低版本find_package(Boost 1.65.1 REQUIRED COMPONENTS system filesystem)全部搞定后用catkin_make -j1单线程编译更稳妥多线程容易出奇怪错误。编译完成后别忘记source devel/setup.bash。3. 实时点云可视化实战技巧驱动装好后终于到了最激动人心的可视化环节。这里推荐三种方式各有优劣方案一livox_viewer官方工具优点是开箱即用不需要ROS环境。启动后界面右侧会显示设备列表点击连接就能看到实时点云。但有两个痛点点云颜色固定难以区分距离无法叠加其他ROS话题数据方案二rviz基础配置先用launch文件启动驱动roslaunch livox_ros_driver livox_lidar_rviz.launch bd_list:你的设备SN然后在rviz中按这个流程配置添加PointCloud2显示类型将Fixed Frame设为livox_frameTopic选择/livox/lidar将Size设为0.05MID-70的最佳可视尺寸方案三自定义rviz配置分享我的独家配置技巧在PointCloud2的Color Transformer选Intensity然后调整Color Map为Rainbow。这样不同强度的点会显示不同颜色场景立体感瞬间提升。还可以添加一个Camera显示把话题设为/livox/imu这样就能同步查看雷达姿态。遇到点云显示不全的情况先检查rviz的Fixed Frame是否匹配。有时候点云只在特定角度可见可能是雷达坐标系设置问题可以尝试修改launch文件中的xfer_format参数为1使用笛卡尔坐标系。4. 数据采集与回放全流程数据采集是项目中最关键的环节这里详细介绍三种采集方式及其适用场景方法一livox_viewer直接录制操作最简单点击界面上的摄像机图标即可录制lvx格式文件。但有两个局限无法同步录制其他传感器数据时间戳精度只有毫秒级方法二ROS bag录制我的标准操作流程roslaunch livox_ros_driver livox_lidar.launch rosbag record -O mid70_data /livox/lidar /livox/imu这样会生成一个包含点云和IMU数据的bag文件。建议录制前用rostopic hz /livox/lidar检查帧率正常应该在10-15Hz之间。方法三SDK级录制适合需要原始数据的场景cd Livox-SDK/build/sample/lidar_lvx_file ./lidar_lvx_sample -c 设备SN -t 600 -s 1参数说明-t 持续时间秒-s 是否保存IMU数据1为保存数据回放时有个实用技巧用rosbag play -r 0.5放慢播放速度方便观察细节。对于lvx文件可以用官方转换工具转成bagroslaunch livox_ros_driver lvx_to_rosbag.launch lvx_file_path:你的lvx文件路径5. 性能优化与故障排查经过几个月实战我总结出这些性能优化经验网络优化使用ifconfig检查网卡是否跑在千兆模式禁用IPv6sudo sysctl -w net.ipv6.conf.all.disable_ipv61调整MTU值sudo ifconfig enp3s0 mtu 1500ROS参数调优在livox_lidar.launch中修改这些参数param namepublish_freq typedouble value10.0/ param namemulti_topic typeint value0/ param namexfer_format typeint value1/常见故障处理点云闪烁大概率是网络延迟尝试更换网线或交换机数据断流检查dmesg | grep eth是否有网卡错误rviz无显示先用rostopic echo /livox/lidar --noarr确认是否有数据驱动崩溃尝试关闭雷达电源等待30秒后重启最后分享一个监控脚本可以实时查看雷达状态#!/bin/bash watch -n 1 rostopic hz /livox/lidar rostopic bw /livox/lidar6. 进阶应用点云处理入门当数据采集稳定后可以尝试些基础处理。这里分享两个实用案例案例一地面分割用PCL的SACSegmentation实现import pcl cloud pcl.load(pointcloud.pcd) seg cloud.make_segmenter() seg.set_model_type(pcl.SACMODEL_PLANE) seg.set_method_type(pcl.SAC_RANSAC) indices, model seg.segment()案例二目标聚类使用欧式聚类提取障碍物tree cloud.make_kdtree() ec cloud.make_EuclideanClusterExtraction() ec.set_ClusterTolerance(0.02) ec.set_MinClusterSize(100) ec.set_MaxClusterSize(25000) cluster_indices ec.Extract()对于想要可视化处理结果的可以安装CloudComparesudo snap install cloudcompare然后用这个命令打开带编辑功能的界面cloudcompare.CloudCompare记得处理前先做降采样MID-70的数据量太大原始点云直接处理容易卡死。我常用的是体素网格滤波格