ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

四足机器狗室外3D建图实战:mid360+LIO-SAM完整配置指南

四足机器狗室外3D建图实战:mid360+LIO-SAM完整配置指南 之前给四足机器狗做室外自主导航时建图环节卡了很久。轮式机器人上常用的 2D 激光建图方案在室外草地、坡道、碎石路面上几乎不可用机身一颠簸轮式里程计直接失真栅格地图很快糊成一片。后来把方案切换到 mid360 LIO-SAM才终于把室外建图从“能出图”推进到“能用于定位导航”。这篇文章就是基于这套组合整理的系统化实操记录内容包括原理拆解、驱动适配、参数配置、跑图命令、效果观察以及四足平台上比较典型的踩坑点。如果你手里也有一台带激光雷达挂载位的四足机器狗或者想在室外场景做 3D 建图这篇内容可以直接作为参考。文章以 mid360 和 LIO-SAM 为主线涉及的具体节点名、参数名会尽量写得清楚但不同分支、不同硬件平台的差异也很大阅读时还是要结合你自己的实际环境来调整。1. 为什么四足机器狗室外建图要选 mid360 LIO-SAM1.1 四足机器狗建图和轮式机器人建图的差异轮式机器人的经典方案是 2D 激光雷达 轮式里程计有些场景再加一个 IMU 做辅助。这个组合在室内平整地面、结构化走廊里效果很好因为机器人基本在同一个平面内运动激光扫描平面可以近似认为不变。四足机器狗完全不是这个运动模型。它行走时躯干有持续的俯仰、横滚和垂向起伏小跑时冲击更大偶尔还会出现足端打滑。这种情况下2D 平面假设不再成立轮式里程计也没有可用的轮速计只能依赖激光雷达和 IMU 做状态估计。也就是说四足平台天然需要 3D 建图方案。3D 方案里纯激光里程计在快速旋转、特征退化、地面空旷等场景下容易漂移发散而四足机器狗的姿态变化又比轮式剧烈很多所以最好使用“激光 IMU 紧耦合”的方案。IMU 在高频姿态变化中提供短时预测激光雷达在低频中修正累积漂移两者互补正好覆盖四足机器狗的运动特点。1.2 mid360 是什么适合什么场景mid360 是 Livox 推出的一款固态激光雷达和传统机械式多线激光雷达不同它采用非重复扫描方式。非重复扫描的意思是随着时间推移点云会逐渐覆盖视场中的更多区域而不是像机械雷达那样每帧都按照固定线束扫描。这样做的直接好处是在短时间内可以获得更高的点云覆盖率同时体积可以做得比较小重量也很轻非常适合挂在机器狗、无人机这类对载荷有敏感要求的平台上。在室外建图场景中mid360 的视场覆盖也比较有优势。它的水平视场可以达到 360 度垂直方向也有较大的范围这样机器狗在爬坡、上下台阶时仍然能观察到四周环境不容易像部分前向雷达那样丢失侧面信息。另外mid360 内部集成了 IMU这对 LIO-SAM 这类依赖 IMU 预积分的算法非常友好不需要额外再找一块 IMU 来组装。不过要注意mid360 的具体标称参数要以官方手册为准。实际使用时有效测距会受目标反射率、天气、光照等因素影响室外建图时建议让机器狗保持在有效测距范围内活动不要过度依赖雷达还能看到很远的目标。1.3 LIO-SAM 和 FAST-LIO 怎么选在 mid360 的使用圈子里FAST-LIO 和 LIO-SAM 是两套最常见的开源方案。两者都能和 mid360 配合建图但设计思路不太一样。FAST-LIO 直接在原始点云层面做配准把点云与 IMU 进行紧耦合滤波计算量相对较小代码更精简适合计算资源有限、对实时性要求较高、地图精度要求不是极致严格的场景。很多用 mid360 做快速建图、低成本导航的项目会选它。LIO-SAM 则采用了特征提取加因子图优化的框架。它会先从点云中提取角点和平面点然后通过因子图把激光里程计因子、IMU 预积分因子、回环因子统一管理。回环检测是 LIO-SAM 的一个重要优势在室外大规模场景中走一圈回来如果能把首尾误差修正掉地图质量会明显好于没有回环的方案。从四足机器狗室外建图这个需求来看我更倾向使用 LIO-SAM。因为四足走路的速度不快回环比较容易触发而室外场景又往往是大面积开阔区域因子图优化带来的全局一致性优势很值得付出一点计算开销。如果你后续还打算加入 GPS 因子LIO-SAM 也预留了对应的接口。2. 核心原理LIO-SAM 如何让“激光 IMU”协同工作2.1 系统框架拆解在配置 LIO-SAM 之前先理解它的内部流程后面遇到参数问题才不会两眼一抹黑。LIO-SAM 的整体结构可以拆成四个部分第一部分是特征提取。激光点云进来之后会根据曲率把点分类为角点和平滑点。角点通常来自建筑物的边缘、树干、电线杆等位置平面点则来自地面、墙面、路面等平面结构。分类后的点会作为后续匹配的输入。第二部分是 IMU 预积分。IMU 频率通常远高于激光雷达LIO-SAM 会在两帧激光点云之间对 IMU 数据进行预积分得到机器人的相对运动估计。这个估计一方面用于对激光点云做运动畸变补偿另一方面作为因子图中相邻位姿之间的约束。第三部分是因子图优化。因子图里有几种因子IMU 预积分因子约束两个关键帧之间的相对位姿激光里程计因子约束当前帧与局部地图之间的匹配关系回环因子约束当前帧与历史关键帧之间的匹配关系。如果接了 GPS还可以加入 GPS 因子帮助约束全局漂移。第四部分是回环检测。当机器人回到曾经到过的区域时LIO-SAM 会通过当前点云与历史关键帧做匹配如果能匹配上就产生一个回环约束修正累积误差。2.2 mid360 点云的特殊性mid360 的点云格式和传统机械式雷达差别很大。传统 Velodyne 类型的雷达每帧点云由固定的扫描线组成LIO-SAM 可以通过线的编号来计算每个点的俯仰角。mid360 是非重复扫描没有固定线束如果直接把 mid360 的点云按 Velodyne 方式解析imageProjection 阶段的点云投影就会出现问题这是很多初学开发者接 mid360 时遇到的第一个坎。另外mid360 驱动默认发布的消息类型不是标准的 PointCloud2而是 Livox 自定义的 CustomMsg。这种消息里包含了每个点的时间偏移、回波信息等字段。LIO-SAM 默认接收的是 PointCloud2所以接入时需要做一步转换或者直接修改 LIO-SAM 的代码去订阅 CustomMsg。还有一点是运动畸变。机器狗行走过程中雷达本身也在运动一帧点云的起点和终点对应的雷达位姿并不相同。如果不做去畸变补偿点云会拖影尤其是快速转向的时候。LIO-SAM 利用 IMU 预积分结果来补偿这个畸变这也是 IMU 外参不能乱填的原因。2.3 为什么紧耦合方案更适合四足平台四足机器狗的足端和地面接触时会产生周期性的冲击躯干姿态高频抖动纯激光里程计在这种运动下很容易出现帧间匹配失败。LIO-SAM 中 IMU 预积分负责在激光帧之间提供平滑的高频运动预测让激光匹配有一个更准确的初始值两者是紧耦合关系。这意味着即使某一段时间点云匹配不理想只要 IMU 数据质量还行系统也能勉强维持状态估计。反过来如果 IMU 外参标定错误、IMU 数据跳变严重激光匹配也会被带偏。所以调试时先确认 IMU 数据正确再谈点云参数这个顺序很重要。3. 环境准备与驱动适配3.1 基础环境版本说明本文示例以 Ubuntu ROS1 环境为主因为很多四足平台上现有的导航框架仍然基于 ROS1。如果你的环境是 ROS2方案逻辑不变但驱动分支、工作空间编译方式需要对应调整。需要安装的核心组件包括Ubuntu 18.04 或 20.04ROS1 Melodic 或 NoeticPCL 点云库GTSAM 因子图库livox_ros_driver2 驱动版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。3.2 安装 livox_ros_driver2mid360 不能直接用老版本的 livox_ros_driver需要用 livox_ros_driver2。在 catkin 工作空间中克隆并编译cd ~/catkin_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver2.git cd ~/catkin_ws catkin_make source devel/setup.bash这里有几个容易踩的坑。第一livox_ros_driver2 的 ROS1 和 ROS2 分支不同拉取代码后要确认当前分支是否匹配你的 ROS 版本如果不对就切换到对应分支。第二mid360 默认通过网口通信需要先配置好雷达的 IP 地址把电脑和雷达接到同一个网段里否则驱动会一直找不到设备。第三编译前先确认电脑上是否装了依赖库比如 ROS 的 pcl_conversions、tf2 等缺依赖时编译报错会非常迷惑。驱动编译完成后可以用下面的命令启动 mid360roslaunch livox_ros_driver2 msg_MID360.launch启动后不要急着跑 LIO-SAM先确认点云和 IMU 数据都能正常输出。可以使用 rostopic list 查看话题列表确认雷达点云话题和 IMU 话题名称再用 rviz 订阅点云观察点云是否正常。3.3 编译 LIO-SAM 并准备 mid360 适配分支LIO-SAM 的原始仓库默认是为 Velodyne、Ouster 这类机械雷达设计的直接拿来接 mid360 会有很多不适配的地方。好在开源社区已经有多个 mid360 适配分支做法大同小异。你可以直接搜索 “LIO-SAM mid360” 相关的 fork选择一个维护活跃、star 数较高的分支来使用。编译命令如下cd ~/catkin_ws/src git clone https://github.com/TixiaoShan/LIO-SAM.git cd ~/catkin_ws catkin_make如果你的分支是纯原版又想自己改造成 mid360需要改动的地方比较多主要是 imageProjection 里的点云投影逻辑、点云类型定义、以及话题订阅名称。建议直接用现成适配分支把精力放在参数调优上而不是重复造轮子。4. mid360 跑 LIO-SAM 的关键配置4.1 话题名与 frame_id 对齐LIO-SAM 启动后第一件事是检查它是否收到了点云和 IMU 数据。不同分支默认订阅的话题名可能不一样常见配置中点云话题是/livox/lidarIMU 话题是/livox/imu。如果你的驱动发布的话题名不同可以通过 launch 文件或 params.yaml 修改。# params.yaml 中的话题配置示例 lio_sam: pointCloudTopic: /livox/lidar imuTopic: /livox/imuframe_id 也需要统一。mid360 驱动发布的话题 frame_id 通常是livox_frameIMU 的 frame_id 是livox_imu。LIO-SAM 内部会通过 TF 树来关联各个坐标系如果 frame_id 对不上系统会一直等待 TF 或直接报错。启动前建议先运行rqt_tf_tree看一遍 TF 树是否完整。4.2 点云接入方式mid360 驱动默认发的是 CustomMsg而 LIO-SAM 一般接收 PointCloud2所以有两类接入方式。第一类是修改驱动配置让 livox_ros_driver2 在发布 CustomMsg 的同时也发布一个 PointCloud2 话题。这种方式不用改 LIO-SAM 代码但需要注意转换后的点云时间戳、去畸变信息是否完整对建图精度有一定影响。第二类是直接修改 LIO-SAM让它订阅 CustomMsg并自定义点云解析函数。这种方式更接近“原汁原味”因为可以保留 mid360 每个点的时间偏移信息便于做精确去畸变但改动量稍大。如果你用的是社区适配分支大概率已经在代码里处理了这两类问题。我们需要做的只是在 params.yaml 中把点云话题名改成实际使用的那一个并且确认对应代码里解析点云的字段和驱动输出一致。4.3 IMU 外参与噪声参数IMU 外参是四足平台上最容易出问题的地方。mid360 内置 IMU 的情况下雷达坐标系到 IMU 坐标系之间的变换理论上是一个非常小的固定值很多适配分支直接填单位阵。# 外参示例单位阵表示雷达坐标系与 IMU 坐标系重合 lio_sam: extrinsicTrans: [0.0, 0.0, 0.0] extrinsicRot: [1, 0, 0, 0, 1, 0, 0, 0, 1]但是如果你的 mid360 是安装在机器狗上方的支架上雷达本身相对机体有一个安装姿态角那个角度需要在更上层的 TF 里表达。也就是说雷达与 IMU 之间的外参是雷达内部的事而安装角度是机体的事不要混在一起。IMU 噪声参数也很关键。四足机器狗的小腿摆动带来了周期性加速度如果噪声参数设得过小系统会过度信任 IMU 短期积分长期下来反而容易漂移。如果设得过大激光匹配的主导性太强在退化场景里又容易发散。具体参数需要在实测中来回调没有一组通吃所有机型的参数。4.4 建图参数与滤波参数params.yaml 中还有几个参数会明显影响建图效果。第一个是传感器有效距离 sensorRange室外空旷场景可以适当加大让远距离点云参与建图但也会带来更多噪点需要配合体素滤波参数。第二个是降采样相关参数。点云数量太多时实时性会变差点云数量太少时匹配精度又不足。四足机器狗的运动速度不快可以适当降低降采样频率换取更完整的点云覆盖。第三个是保存地图时的分辨率。LIO-SAM 保存地图通常通过服务调用完成分辨率越大地图文件越小但细节越少。可以先保存默认分辨率后续用 PCL 工具离线处理不必一开始就把所有参数调到极致。5. 四足机器狗室外建图实战与效果观察5.1 数据采集准备室外建图不是启动 LIO-SAM 就行数据采集阶段的运动策略直接影响建图质量。四足机器狗在室外跑图时建议采用“慢速行走 规则绕圈”的策略。先在一个起点附近小范围绕几圈让系统完成初始化然后沿着场地边界走一个大环线最后回到起点附近再绕几圈触发回环。避免长时间原地旋转。四足机器狗原地旋转时雷达水平视场虽然能看到 360 度但激光匹配在纯旋转运动下约束较弱IMU 预积分又容易累积误差这段时间最容易导致地图“甩飞”。如果必须转向尽量一边走一边转让小范围平移提供更多约束。采集数据时可以把 mid360 的点云和 IMU 话题录制到 rosbag 中rosbag record /livox/lidar /livox/imu录制好 rosbag 后可以先离线反复测试参数避免每次都在户外推着机器狗来回跑。发布 rosbag 时注意使用--clock参数让 LIO-SAM 获得一致的时间戳rosbag play --clock your_bag.bag5.2 启动建图驱动和 LIO-SAM 的启动顺序通常是这样先启动 mid360 驱动确认话题有数据再启动 LIO-SAMroslaunch lio_sam run.launch如果你的适配分支改了 launch 文件名以你实际分支里的文件为准。启动后在 rviz 中观察点云和轨迹确认没有明显漂移后再开始正式跑图。跑完一圈后可以呼叫保存地图服务rosservice call /lio_sam/save_map resolution: 0.2 destination: /home/your_name/map.pcd服务名以你实际 launch 里节点名称为准常见的是/lio_sam/save_map。保存下来的 pcd 地图可以用 CloudCompare 或 pcl_viewer 打开查看。5.3 室外建图效果观察与分析把四足机器狗在室外场地跑完一圈打开保存的 pcd 地图可以从几个维度评估建图效果。第一看地面层。四足机器狗行走时机身有周期性起伏如果地图中的地面点云出现明显的上下分层、厚度很大说明点云去畸变补偿或者 IMU 预积分参数还没有调准。理想情况是地面点云集中在一个清晰的薄层中即使有起伏也是连续的曲面而不是断裂的多层。第二看墙面和栅栏。室外建筑墙面、围墙这类平面结构应该呈现清晰的平面如果出现“双墙”、边缘重影说明快速转弯或机身颠簸时点云畸变没有被完全补偿。出现这种情况优先检查 IMU 外参和噪声参数再检查驱动是否输出了正确的时间戳。第三看树木和灌木丛。树叶边缘点云稀疏、有少量毛刺属于正常现象叶子随风摆动、雷达扫描角度变化都会造成边缘不齐。如果整个树冠都变成了一个大团噪点说明降采样参数或者滤波半径过小点云没有充分去噪。第四看回环闭合。走完一圈回到起点附近重点观察起点处的墙、柱子、树干是否和地图起始部分对齐。如果偏移在半米以内可以通过增加回环迭代、调大匹配搜索范围进一步收紧。如果偏移很大通常说明中途某个转弯处出现了位姿跳变需要回到 rosbag 中定位问题帧。需要强调的是室外建图效果和场地环境强相关。空旷大草坪、建筑物密集的小路、有坡度的山地、雨后湿滑路面这些场景下的效果差异会非常大。同一套参数在 A 场地效果很好到 B 场地可能就会飘所以实跑复测是不可避免的。6. 常见问题与排查思路在四足机器狗上跑 mid360 LIO-SAM比较常见的几个问题整理如下问题现象常见原因解决思路启动后 rviz 看不到点云驱动未启动、话题名不匹配、网口 IP 不通先单独启动驱动用 rostopic list 和 rviz 确认点云LIO-SAM 一直等消息frame_id 不匹配或话题名错误检查 params.yaml 和 TF 树地图突然发散IMU 外参错误、快速原地旋转、IMU 数据异常停止运动检查 IMU 输出标定外参点云有拖影、重影去畸变补偿不足、IMU 噪声参数不合适加大 IMU 预积分权重检查时间戳一致性回环触发不了场景特征少、搜索范围太小、运动过快放慢速度增加重复走过的路径保存地图调用失败服务名不对或节点未启动rostopic list 查看服务名确认节点运行正常排查时有一个顺序建议先确认驱动话题有数据再确认 LIO-SAM 参数里的话题名和 frame_id 正确然后检查 IMU 数据和 TF 树最后才去调滤波降采样和建图参数。很多新手一上来就调算法参数结果根因只是话题名拼写错误会浪费大量时间。如果你怀疑是 IMU 问题可以在 rviz 中单独订阅 IMU 话题观察三轴加速度和角速度是否随机器狗姿态变化正常变化。如果 IMU 数据出现长时间不变、突变、反向等情况优先解决硬件接线和驱动问题。7. 四足机器狗室外建图的最佳实践与工程建议7.1 传感器安装与标定mid360 的安装位置尽量选择机器狗背部上方避开足端、电机等运动部件。安装支架要足够稳固避免行走时雷达发生相对机体的微小振动。如果雷达支架松动建图精度会大打折扣而且这种误差很难通过算法参数补偿。IMU 与雷达的外参建议在实际设备上做一次标定不要长期信任“内置 IMU 就一定是单位阵”这个假设。即使雷达模块内部对齐良好抬升支架的形变、装配误差也可能引入少量偏移。标定工作可以在室内特征丰富的环境中完成标定完成后记录下参数再放到室外使用。7.2 行走策略与建图质量四足机器狗跑图时尽量保持稳定的运动速度避免频繁急停和急加速。急停瞬间 IMU 会出现很大的加速度尖峰预积分结果容易产生跳变。建图过程中优先走“小圈 大圈 回起点”的路径让回环检测能够发挥作用。如果场地太大一次走不完可以分段采集但每段最好从上一段结束位置附近开始并且保持部分路径重叠。不要尝试一次建一张几万平方米的大图地图文件会越来越大后端优化耗时也会明显上升。7.3 回环与退化场景处理室外场地如果过于空旷比如大草坪、停车场LIO-SAM 会面临特征退化的问题。此时即使有 IMU 辅助长时间直线行走后仍然可能出现横向漂移。应对策略包括在场地中放置一些临时标志物比如锥桶、纸箱增加激光特征行走时避免长时间笔直走适当走 S 形或者后续在 LIO-SAM 中加入 GPS 因子利用全局约束抑制漂移。回环触发方面不要指望系统会自动识别“绕了一大圈回来”。回环需要当前帧和历史关键帧在空间上距离够近、特征匹配够好。所以建图时重复走过关键区域对优化非常有帮助。7.4 工程质量与数据管理把建图从实验室 demo 推向实际项目还需要注意一些工程层面的问题。第一是时间同步激光雷达和 IMU 的时间戳对齐很重要如果驱动输出时间戳不是同一时钟源建图漂移会很难排查。第二是日志记录建议在跑图时同步录制 rosbag记录下 LIO-SAM 的日志输出回家后可以离线复现问题。第三是地图文件管理每次跑图后及时保存 pcd、记录参数文件和场地说明方便回溯是哪一组参数产生了哪一张地图。四足机器狗的续航有限户外测试成本高所以每次跑图前都在室内做完参数初步验证再带到室外。这样能把宝贵的外场时间用在真正需要调整的问题上。8. 可以继续深入的方向如果你已经用 mid360 成功在四足机器狗上跑通了 LIO-SAM下一步有几个方向值得继续探索。一是把 mid360 换成 FAST-LIO 对比一次建图效果。两者在相同 bag 上的表现差异可以帮助你更直观理解特征提取、因子图优化和直接配准的区别。二是尝试在 LIO-SAM 中接入 GPS 因子。四足机器狗在更大范围、更空旷的室外场地作业时GPS 的全局约束能显著改善长距离漂移问题。要注意 GPS 与雷达坐标系之间的时延和外参处理这部分需要单独调试。三是把建图结果用到后续导航中。LIO-SAM 生成的点云地图可以转换为二维栅格地图也可以结合地形分析做可通行区域提取甚至生成高程地图用于四足机器狗的足端规划。四是对 IMU 噪声参数和外参做完整的自动化标定。很多四足团队都有自己的标定流程标定精度直接决定建图上限。四足机器狗室外建图并不是一个“装好驱动就能跑”的简单任务但 mid360 和 LIO-SAM 的组合已经把这个门槛降到了个人开发者可以完整体验的地步。从驱动适配到参数调优再到回环闭合和地图评估每一步都值得亲手试一遍。动手跑一次比看十篇教程都更有用。
返回列表