
1. 项目背景与核心需求拆解宇树Go2这台四足机器狗出厂自带的感知方案基本够用但一旦你想做点正经的SLAM研究或者二次开发原厂那套闭源的东西就不太够看了。我接手这个项目的出发点很直接把Go2变成一个开放的SLAM实验平台用Livox Mid360和Velodyne VLP16两种激光雷达分别跑通点云数据采集和建图流程最终服务于自主导航和算法验证。为什么选这两种雷达Mid360是非重复扫描的代表性价比高、体积小、重量轻特别适合Go2这种对负载敏感的移动平台VLP16则是机械旋转式雷达的经典款16线、360度水平视场点云规整、驱动成熟是很多SLAM算法的默认输入格式。把这两种雷达都在Go2上跑通等于同时覆盖了非重复扫描和机械旋转两大技术路线后续换算法、换场景都不至于被硬件卡脖子。这个项目适合谁如果你手里有Go2想用它做激光SLAM建图、自主导航、多传感器融合或者单纯想把点云数据接出来自己玩那这篇内容就是给你写的。不需要你是SLAM专家但至少得懂Linux基础操作、ROS的基本概念知道什么是话题、什么是TF变换。完全零基础的话建议先补一下ROS入门不然中间很多步骤会卡住。核心需求其实就三个第一把雷达物理固定到Go2上保证供电和数据传输稳定第二在ROS环境下把雷达驱动跑起来拿到干净的点云数据第三验证点云质量确保后续SLAM算法能正常吃进去。这三个需求看起来简单但每一步都有坑下面我按实际操作的顺序把整个流程拆开讲。2. 硬件选型与安装方案设计2.1 两种雷达的特性对比与适用场景Mid360和VLP16虽然都是激光雷达但工作原理和输出特性差别很大选哪个取决于你的具体任务。Mid360采用非重复扫描方式视场角水平360度、垂直-7度到52度等效线数会随着积分时间增加而提升近距离点云密度非常高但远距离点云会稀疏一些。VLP16是传统的16线机械旋转雷达水平360度、垂直-15度到15度每帧固定16线点云分布均匀远距离表现更稳定。对比项Livox Mid360Velodyne VLP16扫描方式非重复扫描机械旋转水平视场360度360度垂直视场-7度到52度-15度到15度点云特性近密远疏随积分时间变化均匀16线每帧固定重量约265克约830克供电9-27V9-18V数据接口以太网以太网适用场景近距离建图、避障、室内远距离建图、室外、自动驾驶从Go2的负载能力来看Mid360明显更友好265克的重量几乎不影响机器狗的运动性能。VLP16加上支架和线缆接近1公斤装在Go2背上会让重心偏高快速行走或上下坡时稳定性会打折扣。但VLP16的点云格式是很多开源SLAM算法比如LeGO-LOAM、LIO-SAM的默认输入省去了格式转换的麻烦。我的建议是如果你主要做室内建图和避障优先用Mid360如果要做室外大场景建图或者想直接跑现成的SLAM方案VLP16更省事。当然两个都上也不是不行但Go2的算力和供电需要提前评估。2.2 机械安装与供电方案安装位置直接影响到点云质量和机器狗的运动平衡。Mid360我建议装在Go2背部靠近头部的位置用3D打印的支架固定高度尽量低减少对机器狗重心的影响。VLP16因为体积大只能装在背部中央但要注意线缆的走线避免机器狗运动时拉扯接口。供电是第一个大坑。Go2自带的电池输出是24V左右Mid360支持9-27V输入可以直接从Go2的电源接口取电但需要做一个降压模块把24V降到12V左右因为Mid360虽然标称支持27V但长期跑在24V以上发热会比较明显。VLP16的输入范围是9-18V必须降压到12V直接接24V会烧掉。我用的是一款宽压输入、12V/5A输出的DC-DC降压模块体积小、效率高固定在支架下方。注意Go2的电源接口定义和普通无人机不太一样动手前务必用万用表确认正负极和电压接反了雷达直接报废。我第一次做的时候没确认差点把Mid360烧了后来养成了先量电压再接线的习惯。数据线方面两种雷达都是以太网接口但Go2内部没有多余的网口需要把网线从雷达引到Go2的算力模块上。我用的是超六类屏蔽网线自己压的水晶头长度控制在30厘米以内减少信号衰减。如果走线太长建议用工业级网线或者加一个网络交换机。2.3 算力平台与软件环境规划Go2自带的算力模块性能有限跑SLAM算法比较吃力。我的方案是外挂一台NUC或者Jetson Orin NX通过网线连接雷达USB或者串口连接Go2的运动控制接口。这样雷达驱动和SLAM算法都跑在外挂算力上Go2只负责运动分工明确。软件环境统一用Ubuntu 20.04 ROS Noetic这是目前最稳定的组合两种雷达的驱动都有现成的ROS包。如果你用Ubuntu 22.04 ROS2 Humble驱动也能跑但很多SLAM算法还是ROS1的生态更成熟新手建议从ROS1开始。网络配置是第二个大坑。Mid360和VLP16的默认IP地址不一样Mid360是192.168.1.1xx网段VLP16是192.168.1.201。外挂算力的网卡需要配置成同一网段的静态IP否则雷达和电脑根本通信不了。我建议给雷达单独配一个USB网卡专门用于雷达通信不要和Go2的控制网络混在一起避免IP冲突。3. 雷达驱动配置与点云数据获取3.1 Livox Mid360驱动安装与配置Mid360的驱动安装相对简单Livox官方提供了ROS版本的SDK。首先从Livox的GitHub仓库下载livox_ros_driver2注意要选对分支ROS1用master分支ROS2用ros2分支。下载后放到工作空间的src目录下用catkin_make编译。编译之前需要修改配置文件主要是雷达的IP地址和主机IP地址。在livox_ros_driver2/config目录下找到MID360_config.json把lidar_configs里的ip改成雷达的实际IPhost_net_info里的host_ip改成外挂算力网卡的IP。这一步如果填错驱动启动后会一直报“no data”错误。# 编译livox_ros_driver2 cd ~/catkin_ws catkin_make source devel/setup.bash # 启动Mid360驱动 roslaunch livox_ros_driver2 msg_MID360.launch启动成功后用rostopic list应该能看到/livox/lidar和/livox/imu两个话题。点云数据在/livox/lidar上格式是livox_ros_driver2/CustomMsg不是标准的sensor_msgs/PointCloud2。如果要给SLAM算法用需要写一个转换节点把CustomMsg转成PointCloud2。Livox官方提供了一个转换脚本但我觉得自己写一个更灵活可以顺便做点云滤波和降采样。实操心得Mid360的点云数据量很大一帧可能有几万个点直接转PointCloud2会占用大量带宽。我一般会在转换节点里加一个体素滤波把点云降采样到0.1米的分辨率数据量减少70%以上SLAM算法跑起来更流畅。3.2 Velodyne VLP16驱动安装与配置VLP16的驱动更成熟ROS包是velodyne_pointcloud直接apt安装或者源码编译都行。我习惯用源码编译方便改参数。安装完成后需要修改launch文件里的雷达IP和端口号。VLP16默认IP是192.168.1.201数据端口是2368位置端口是8308。# 安装velodyne驱动 sudo apt-get install ros-noetic-velodyne # 启动VLP16驱动 roslaunch velodyne_pointcloud VLP16_points.launch启动后/velodyne_points话题上就是标准的sensor_msgs/PointCloud2格式直接就能给SLAM算法用。VLP16的点云比较规整每帧大约3万个点数据量比Mid360小但远距离点云更稳定。VLP16有一个需要注意的地方雷达的转速会影响点云密度。默认转速是600RPM也就是每秒10帧每帧360度。如果降到300RPM每秒5帧但每帧的点云密度翻倍。做建图的时候我一般用600RPM保证帧率做精细扫描的时候降到300RPM提高点云质量。3.3 点云数据可视化与质量检查驱动跑起来之后第一件事是用RViz看點云。Mid360的点云在RViz里需要把Fixed Frame设成livox_frameVLP16设成velodyne。如果点云显示不出来先检查TF变换有没有发出来再用rostopic hz看一下话题有没有数据。点云质量检查主要看三个方面一是点云有没有明显的缺失或者畸变二是点云的密度是否均匀三是远距离点云是否稳定。Mid360在近距离5米以内点云非常密但10米以外会明显稀疏VLP16在20米以内点云都比较均匀但垂直分辨率只有16线地面和天空的点云会有分层。我一般会用pcl_ros的工具做点云统计比如计算点云的平均密度、最大距离、噪声点比例。如果噪声点太多可以在驱动里加一个距离滤波把太近和太远的点去掉。Mid360的最小探测距离是0.1米VLP16是0.5米太近的点往往是噪声直接滤掉。注意RViz显示点云非常吃显卡如果点云卡顿可以把Decay Time调小或者用PointCloud2的降采样显示。我刚开始用RViz的时候点云一卡就以为驱动有问题后来发现是显卡跟不上换了个带独显的NUC就流畅了。4. 点云数据后处理与SLAM建图验证4.1 点云格式转换与预处理Mid360的CustomMsg格式虽然包含了更多信息比如每个点的反射率、标签但大多数SLAM算法只认PointCloud2。转换的时候要注意CustomMsg的时间戳是每个点独立的转成PointCloud2后要保留这个信息否则运动畸变校正会出问题。我写了一个转换节点核心逻辑是遍历CustomMsg的每个点把x、y、z、intensity填到PointCloud2里同时把每个点的时间偏移存到单独的通道里。这样SLAM算法在做去畸变的时候可以根据每个点的时间戳做插值精度比统一时间戳高很多。预处理还包括降采样和滤波。降采样用体素滤波分辨率设0.1米既能保留细节又能减少数据量。滤波用直通滤波把z轴方向太高和太低的点去掉比如Go2身高0.4米雷达装在0.5米高度那z轴小于-0.5米和大于1米的点基本是地面反射或者天花板直接滤掉。4.2 基于LIO-SAM的建图实测LIO-SAM是目前最流行的激光惯性SLAM算法之一支持Mid360和VLP16。它的核心思想是用激光雷达做特征匹配用IMU做运动先验两者紧耦合建图精度很高。我用Go2 Mid360跑LIO-SAM在室内走廊里建了一圈回环检测很准地图没有明显的重影。配置LIO-SAM的时候需要改params.yaml里的几个关键参数。雷达话题改成转换后的PointCloud2话题IMU话题改成/livox/imu点云降采样分辨率设0.2米特征提取的曲率阈值设0.1。这些参数需要根据实际场景调室内场景点云密分辨率可以设小一点室外场景点云稀分辨率要设大一点。VLP16跑LIO-SAM更简单因为点云格式直接兼容只需要改话题名和IMU话题。但VLP16没有内置IMU需要外接一个我用的是Go2自带的IMU通过串口读出来发布成sensor_msgs/Imu话题。Go2的IMU频率是200Hz比雷达的10Hz高很多正好可以做运动先验。实操心得LIO-SAM对IMU的噪声很敏感如果IMU数据抖动大建图会漂移。我建议先对IMU做校准把零偏和噪声方差标定出来填到params.yaml里。Go2的IMU出厂校准一般我重新标定后建图精度提升很明显。4.3 建图效果对比与参数调优Mid360和VLP16在同一个场景下建图效果差异挺明显的。Mid360在近距离10米以内的建图细节更丰富墙角、门框这些特征都能清晰还原VLP16在远距离20米以上的建图更稳定走廊尽头不会出现点云稀疏导致的断裂。对比项Mid360建图效果VLP16建图效果近距离细节丰富特征清晰一般有分层远距离稳定性一般点云稀疏稳定点云均匀回环检测准确但依赖近距离特征准确远距离特征也能用建图帧率10Hz数据量大10Hz数据量适中适用场景室内、近距离室内外、远距离参数调优方面Mid360的积分时间很关键。默认积分时间是100ms点云密度和帧率平衡得比较好。如果场景运动快可以降到50ms减少运动畸变如果场景静止可以升到200ms提高点云密度。VLP16的转速和帧率是绑定的调转速就是调帧率建图一般用600RPM。5. 常见问题排查与避坑指南5.1 驱动启动失败与网络配置问题驱动启动失败最常见的原因是网络配置不对。Mid360和VLP16都要求电脑和雷达在同一网段如果电脑有多个网卡要确保雷达连接的那个网卡IP是静态的而且和雷达同网段。我遇到过电脑同时连WiFi和网线结果雷达数据发到了WiFi网卡上驱动一直收不到数据。解决办法是禁用WiFi或者用route命令指定路由。另一个常见问题是防火墙。Ubuntu默认的ufw防火墙会拦截雷达的UDP数据包导致驱动收不到数据。我一般直接关掉防火墙或者加一条规则允许雷达端口的UDP流量。Mid360用的是UDP 55000端口VLP16用的是UDP 2368和8308端口。# 关闭防火墙 sudo ufw disable # 或者允许特定端口 sudo ufw allow 55000/udp sudo ufw allow 2368/udp sudo ufw allow 8308/udp5.2 点云数据异常与排查思路点云异常主要有几种表现点云缺失、点云畸变、点云噪声大。点云缺失一般是数据丢包检查网线质量和网络带宽Mid360的数据量大约20MbpsVLP16大约10Mbps百兆网卡够用但如果是USB网卡要注意USB带宽是否足够。点云畸变一般是时间戳不对Mid360的每个点都有独立时间戳如果转换的时候丢了运动畸变校正就会出错。VLP16的每帧点云有一个统一时间戳但雷达旋转过程中机器狗在运动也会产生畸变需要用IMU数据做去畸变。点云噪声大一般是环境干扰比如阳光直射、玻璃反射、雨雪天气。Mid360对阳光比较敏感室外强光下噪声会明显增加VLP16对雨雪敏感雨滴会被当成点云。这些场景下要么加滤波要么换雷达。5.3 建图漂移与回环检测失败建图漂移是SLAM最常见的问题原因很多IMU噪声大、点云特征少、运动过快、回环检测失败。我的排查顺序是先看IMU数据是否正常再看点云特征是否足够最后看回环检测有没有触发。IMU噪声大的话重新标定把零偏和噪声方差填到配置文件里。点云特征少的话换场景或者加人工标记比如在走廊里放几个纸箱增加特征点。运动过快的话降低机器狗的速度或者提高雷达帧率。回环检测失败的话调回环检测的参数比如降低回环检测的最小距离或者提高回环检测的搜索半径。避坑技巧建图的时候尽量让机器狗走“8”字形或者回环路线这样回环检测更容易触发。我一开始走直线建图漂移很严重后来走“8”字形回环检测一触发地图就闭合了精度提升非常明显。5.4 常见问题速查表问题现象可能原因排查方法解决方案驱动启动后无数据网络配置错误检查IP和网段配置静态IP禁用其他网卡点云缺失数据丢包检查网线和带宽换屏蔽网线减少线缆长度点云畸变时间戳丢失检查转换节点保留每个点的时间戳点云噪声大环境干扰检查场景加滤波或换雷达建图漂移IMU噪声大检查IMU数据重新标定IMU回环检测失败特征少或参数不对检查点云特征调参数走回环路线6. 个人实操体会与后续扩展方向这套方案我前前后后调了大概两周中间踩了不少坑也积累了一些文档里不会写的经验。Mid360的驱动虽然官方支持ROS但配置文件里的IP地址一定要反复确认我因为IP填错折腾了一整天。VLP16的驱动更成熟但转速和帧率的权衡需要根据场景调不是默认值就最好。点云数据拿到之后不要急着跑SLAM先用RViz仔细看一遍确认点云质量没问题。我见过很多人驱动跑通了就直接上SLAM结果建图效果差回头排查发现是点云本身就有问题。点云质量检查这一步花十分钟能省后面十个小时的调试时间。后续扩展的话可以往多雷达融合方向走。Mid360和VLP16的点云特性互补一个近密远疏一个均匀分布融合之后建图效果会更好。融合的方法可以用简单的点云拼接也可以用卡尔曼滤波做状态估计。另外Go2的运动控制接口是开放的可以把SLAM建图的结果直接喂给导航模块实现自主导航这才是这套方案的最终目标。最后分享一个小技巧Go2的电池续航大概2小时但雷达和算力模块加起来功耗不小实际续航会降到1.5小时左右。如果要做长时间建图建议外挂一块移动电源给雷达和算力单独供电这样Go2的电池只负责运动续航能恢复到接近2小时。这个技巧是我在一次室外建图时发现的当时建到一半Go2没电了地图只建了一半后来加了移动电源再也没出现过中途断电的情况。