尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

四足机器狗室外SLAM实战:MID-360与LIO-SAM配置指南

四足机器狗室外SLAM实战:MID-360与LIO-SAM配置指南 每次做四足机器狗的室外 SLAM 调研都会遇到同一个争论用视觉方案还是激光方案视觉方案便宜、信息丰富但一到阳光直射、树影斑驳、路面反光的环境特征点就开始“罢工”。传统 16 线机械雷达倒是稳定但装在四足狗这种低矮平台上近距离盲区大、垂直视场角小楼梯、路沿、矮灌木经常扫不到建出来的地图总感觉“少了半层楼”。于是越来越多团队把目光放到 Livox MID-360 和 LIO-SAM 这个组合上。MID-360 是非重复扫描的固态激光雷达垂直视场角达到 59°天然适合低视角平台LIO-SAM 是紧耦合 LiDAR-Inertial 里程计有回环检测在室外场景表现稳定。两者搭配已经成为很多四足机器人项目做室外建图的首选方案。但这条路的坑也不少。网上资料大多是“单雷达跑通”的简单流程真正把 MID-360 放到四足机器狗上、跑到室外环境里会遇到驱动版本不匹配、LIO-SAM 参数不适配、IMU 时间戳不同步、点云畸变等一系列问题。这篇文章不做理论堆砌直接把遇到的问题、改过的配置、验证过的方法整理出来希望能帮你少走弯路。1. 四足机器狗室外建图到底难在哪先看一个容易被忽略的事实四足机器狗的传感器安装高度通常在 30 到 50 厘米之间这决定了它与车载激光雷达的使用逻辑完全不同。低视角带来遮挡问题。车辆雷达装在车顶1.5 米以上高度可以看到远处的路面和车辆。机器狗的高度接近地面草丛、台阶、路沿、甚至一块石头都可能形成大面积遮挡。水平视角再大如果垂直视场角不够扫描到的有效环境信息会大打折扣。运动模态复杂。四足狗的行走、小跑、跳跃会产生高频振动和姿态突变尤其是 trot 步态下的周期性起伏。这种运动对纯 LiDAR 里程计是灾难性的特征匹配很容易被“抖散”。室外光照与动态物体。阳光直射会影响部分传感器的测量质量行人、车辆、树叶摆动、水面反光等动态干扰会在地图上留下重影。GPS 并不是处处可用。校园、园区、建筑周边经常有遮挡GPS 信号弱甚至完全丢失定位只能靠 LiDAR IMU 融合。这些约束叠加起来结论其实很明确想用四足机器狗在室外稳定建图传感器必须同时具备大垂直视场、对近距离环境敏感、自带惯性测量单元并且算法的鲁棒性要够强。MID-360 LIO-SAM 恰好是符合这些条件、性价比又比较高的组合。2. MID-360 和 LIO-SAM为什么是这个组合2.1 MID-360 的核心特点MID-360 是 Livox 推出的混合固态激光雷达和传统机械雷达最大的区别是扫描方式。非重复扫描Non-Repetitive Scan随着时间推移激光点会逐渐填满整个视场而不是像机械雷达那样每帧都扫描固定的线束。这样在静止或低速运动时点云密度会越来越高近距离感知能力很强。视场角水平 360° 全覆盖垂直视场约 59°-7° 到 52°。这个垂直视场非常关键装在低矮的四足狗上既能扫到脚底附近的地面也能看到一定高度的障碍物。量程在户外日光环境下有效量程大致在 40 米级别夜间或低光照条件下量程会更大。这个量程对四足狗常见的园区、校园、仓库场景是够用的。内置 IMUMID-360 内部集成了一颗 6 轴 IMU数据输出频率较高。这意味着可以不额外安装 IMU简化了系统集成。点频单回波模式下约 20 万点每秒双回波模式约 40 万点每秒。实际使用中需要根据算力选择回波模式。一句话总结MID-360 适合对近距离感知要求高、平台高度低、算力有限、但又需要覆盖 360° 水平视场的机器人平台。2.2 LIO-SAM 在做什么LIO-SAM 的全称是 LiDAR-Inertial Odometry and Mapping是 Tixiao Shan 在 IROS 2020 提出的开源方案。它在运行上分为几个模块imageProjection把激光点云投影到距离图像上做地面分割和点云去畸变。featureExtraction从点云中提取角点特征和平面特征。imuPreintegration对 IMU 做预积分提供帧间运动的初始估计。mapOptimization基于因子图优化维护局部地图执行扫描匹配同时处理回环检测和 GPS 因子。LIO-SAM 的核心设计是紧耦合 因子图。LiDAR 做帧间匹配IMU 通过预积分提供运动先验两者互相约束在快速旋转、剧烈颠簸时依然能保持相对稳定的位姿估计。回环检测因子则用来修正长时间运行后的累计漂移。2.3 为什么不是 FAST-LIO很多人会提到 FAST-LIO 或者 FAST-LIO 2它们也是 Livox 雷达常用方案。确实FAST-LIO 系列在计算效率和实现简洁度上有优势和 MID-360 配合也很成熟。但在四足机器狗室外建图这个场景LIO-SAM 有一个不可替代的优势它有显式的回环检测和位姿图优化适合构建全局一致的地图。四足狗经常需要在同一个园区做大范围探索会回到起点附近这时回环检测能明显改善地图的闭合误差。FAST-LIO 更擅长的是低延迟里程计输出在建图完整性上通常要另外叠加回环模块。所以更合理的组合是LIO-SAM 负责建图和全局一致地图FAST-LIO 类算法用于实时里程计输出或在线定位。两者不是替代关系而是分工关系。维度MID-360 LIO-SAMMID-360 FAST-LIO定位能力强弱强有回环检测强但无完整回环闭环大范围建图更合适容易累积漂移实时里程计输出可以但更侧重地图更轻量快速工程复杂度相对高较低四足狗室外场景推荐做最终地图推荐做实时导航3. 系统组成与硬件连接在写配置之前先把我们要搭的系统讲清楚。四足机器狗上搭建这套建图系统主要是下面几部分四足机器狗本体提供运动底盘常见的是宇树、小米铁蛋或者其他开源四足平台。这部分只影响机器狗运动控制对 SLAM 来说它只是一个运动的载体。MID-360 激光雷达提供 3D 点云和内置 IMU 数据。计算平台一般用搭载 Ubuntu 系统的工控机或车载电脑。需要能跑 ROS性能建议 x86 平台能够在 10Hz 点云频率下实时跑 PCL、GTSAM 相关的优化。传感器固定方式雷达需要固定在机身上不能产生相对机身的晃动。很多四足狗的头部或背部有安装支架建议安装在背部偏前、高度适中的位置避免被身体遮挡太多水平视野。供电与通信MID-360 通过以太网传输点云数据供电一般通过专用线缆或 PoE 适配。注意电压电流要求不要和电机驱动共用不稳定的电源。整条消息链路可以简化成下面这种流向MID-360 ├─ 点云数据以太网─ livox_ros_driver2 ─ sensor_msgs/PointCloud2 ─ LIO-SAM └─ 内置 IMU同一数据链路─ livox_ros_driver2 ─ sensor_msgs/Imu ─ LIO-SAMLIO-SAM 接收去畸变前的点云和 IMU 数据在线输出/lio_sam/odom里程计位姿/lio_sam/mapping/map_global全局点云地图/lio_sam/mapping/path运动轨迹。运行结束后可以把全局地图保存为 PCD 文件用于后续导航或语义标注。4. 环境搭建与驱动安装4.1 推荐运行环境环境版本在不同时期变化较快这里给一个经过实践检验的组合方向具体版本以你的工程和硬件为准Ubuntu 20.04 / 22.04ROS Noetic / ROS2 均可。LIO-SAM 和 livox_ros_driver2 都有对应分支建议先把整体环境定在 ROS Noetic 老牌驱动链路上遇到问题好排查依赖库PCL、OpenCV、GTSAM以及 Eigen、Boost 等编译工具catkin_make 或 catkin build。LIO-SAM 在 ROS1 框架下总体是稳定的。如果你用的是 ROS2需要关注仓库分支是否完整适配不建议在首次搭建时混用 ROS1/ROS2 节点。4.2 安装依赖LIO-SAM 官方仓库提供了依赖清单。sudo apt-get install -y \ ros-${ROS_DISTRO}-pcl-ros \ ros-${ROS_DISTRO}-cv-bridge \ ros-${ROS_DISTRO}-image-transport \ ros-${ROS_DISTRO}-tf2-geometry-msgs \ libgtsam-dev \ libopencv-dev \ libeigen3-dev其中 GTSAM 是 LIO-SAM 位姿图优化的核心依赖。如果系统仓库里的 GTSAM 版本太旧可能编译不过可以从源码编译新版但注意源码编译耗时较长。4.3 编译 livox_ros_driver2Livox 官方维护的驱动是livox_ros_driver2它同时支持 ROS1 和 ROS2。这里以 ROS1 为例。cd ~/catkin_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver2.git cd .. catkin_make source devel/setup.bash编译完之后需要根据雷达型号配置驱动的 launch 文件。MID-360 的配置一般在驱动目录下的config/中launch 文件常名为roslaunch livox_ros_driver2 rviz_mid360.launch这条命令会启动 MID-360 驱动并发布点云话题。建议先跑驱动确认点云能正常显示再继续 LIO-SAM 的适配。4.4 编译 LIO-SAMcd ~/catkin_ws/src git clone https://github.com/TixiaoShan/LIO-SAM.git cd .. catkin_make source devel/setup.bash到这里只是编译通过LIO-SAM 默认配置并不是给 MID-360 用的直接跑多半会出问题。下一步是核心工作配置适配。5. LIO-SAM 适配 MID-360核心配置修改很多人在这里卡住。LIO-SAM 原生支持的传感器主要是 Velodyne 和 Ouster 这类机械雷达它们的点云组织方式和 MID-360 差异很大。我们要做的不是改算法而是改参数和话题输入。5.1 点云话题转换mid360 的数据通常以自定义消息或者 PointCloud2 形式发布。LIO-SAM 识别的是标准的sensor_msgs/PointCloud2。一种最稳妥的方案是在驱动端就把点云发布成 PointCloud2或者通过 republish / topic remap 把它转成/points_raw。如果你希望直接使用 livox_ros_driver2 发布的点云可以把 LIO-SAM 的points_raw话题 remap 到驱动发布的点云话题。5.2 修改 params.yamlLIO-SAM 的参数文件位于config/params.yaml这个文件决定了算法对传感器模型的理解。下面说明几个关键项。# 文件路径src/LIO-SAM/config/params.yaml lio_sam: # 传感器类型需要和你的雷达匹配 sensor: mid360 # 垂直方向扫描线数 # mid360是非重复扫描没有严格线数这里需要根据点云分布选取 N_SCAN: 6 # 水平方向扫描点数 Horizon_SCAN: 3600 # 降采样倍数1表示不降采样数值越大每帧点云越稀疏 downsampleRate: 1 # 每帧点云时间 lidarMinRange: 0.5 lidarMaxRange: 40.0注意几个容易踩坑的点N_SCAN不是随意设置的。它会被 imageProjection 用来把点云划分成距离图像。MID-360 的垂直视场角和传统雷达不同划分不当会直接导致特征提取失败。实践中建议从小到大试先试 4 或 6再根据可视化结果调整。Horizon_SCAN表示水平一圈被分成多少列。3600 表示水平分辨率 0.1°比较适合中低速机器人。lidarMinRange和lidarMaxRange要跟 MID-360 的实际量程匹配。四足狗平台上近距离杂物多最小距离可以设 0.5 米左右太小的值会把机体自身点云也算进去。5.3 外参设置params.yaml里的外参指的是IMU 坐标系到 LiDAR 坐标系的变换不是雷达在世界系里的位姿。# 文件路径src/LIO-SAM/config/params.yaml lio_sam: # 外参旋转imu to lidar extrinsicRot: - 1.0 - 0.0 - 0.0 - 0.0 - 1.0 - 0.0 - 0.0 - 0.0 - 1.0 # 外参平移imu to lidar单位米 extrinsicTrans: - 0.0 - 0.0 - 0.0如果使用 MID-360 内置 IMUIMU 坐标系和雷达坐标系通常被认为是重合的外参可以保持单位阵。但这种“重合”是理论上的实际上安装支架、装配公差会引入偏移。在建图精度要求高的场景建议做一次外参标定。标定方法包括lidar_align、direct_visual_lidar_calibration等工具也可以在 LIO-SAM 跑完后观察地图有没有重影再反推误差。注意单位这里的平移单位是米不是厘米很多人会把 0.1 米写成 1导致点位完全错乱。5.4 IMU 话题LIO-SAM 默认接收/imu/data。如果使用 MID-360 内置 IMU需要把它发布的话题 remap 成/imu/data。还需要确认 IMU 的加速度计、陀螺仪坐标系约定是否和 LIO-SAM 预期一致不一致时会出现严重的初始化失败或位姿发散。5.5 launch 文件修改修改完 params.yaml 后还要在 launch 文件里确认话题重映射。!-- 文件路径src/LIO-SAM/launch/run.launch片段 -- launch param namerobot_description command$(find xacro)/xacro $(find lio_sam)/urdf/robot.xacro / node pkglio_sam typelio_sam_imageProjection namelio_sam_imageProjection outputscreen remap from/imu/data to/livox/imu / remap from/points_raw to/livox/lidar / /node node pkglio_sam typelio_sam_featureExtraction namelio_sam_featureExtraction outputscreen / node pkglio_sam typelio_sam_mapOptimization namelio_sam_mapOptimization outputscreen remap from/imu/data to/livox/imu / remap from/points_raw to/livox/lidar / /node node pkglio_sam typelio_sam_imuPreintegration namelio_sam_imuPreintegration outputscreen / /launch这里把 LIO-SAM 内部的/points_raw和/imu/data都 remap 到了 livox 驱动输出的话题上。话题名会根据 livox_ros_driver2 的配置不同而不同请先rostopic list再确认。6. 四足机器狗室外建图实机运行流程配置改完之后建议先在手持或者固定支架上跑通再装到四足狗上否则一次叠加多个变量出问题很难定位。第一步启动雷达驱动。roslaunch livox_ros_driver2 rviz_mid360.launch第二步确认点云和 IMU 话题。rostopic list rostopic hz /livox/lidar rostopic hz /livox/imu正常情况下点云话题频率在 10Hz 左右IMU 话题频率在 100Hz 或更高。如果 IMU 频率过低先检查驱动配置。第三步启动 LIO-SAM。roslaunch lio_sam run.launch启动之后在 Rviz 中先查看/lio_sam/mapping/map_global。如果雷达保持静止地图应该是一个稳定的小范围点团不是发散出去的线。第四步让机器狗慢速行走。建议以 0.3 到 0.5 m/s 的速度先走直线再走一个带转弯的闭合路径。整个过程持续两三分钟观察轨迹是否平滑地图是否出现错位。第五步回到起点构建闭环。四足狗室外建图最容易暴露问题的就是回环。走完一圈回到起点附近如果地图闭合良好说明系统整体工作正常如果起点附近出现错位优先检查回环检测是否触发再检查里程计累计漂移。第六步保存地图。LIO-SAM 没有内置一键保存地图通常用 PCL 工具或者维护一个监听节点来保存全局地图。常见做法是订阅/lio_sam/mapping/map_global利用pcl_ros把 PointCloud2 转成 PCD 文件。rosrun pcl_ros pointcloud_to_pcd input:/lio_sam/mapping/map_global这个命令会把持续接收到的点云每隔一段时间保存一份。更推荐的做法是在浏览完地图后手动结束并在保存节点中根据到达的时间戳挑一份完整的。7. 室外建图效果实拍与分析从实际工程运行效果看这套组合在中等规模的室外园区中表现出了以下特征可以给还没上车的团队参考。地面和近距离障碍物比较完整。得益于 MID-360 的垂直视场角机器狗行进方向前方的地面、台阶、路沿都能进入视野不会出现传统 16 线雷达那样“地面信息稀疏、远处障碍物断裂”的情况。在铺装路面和草地上地图中的地面层清晰可辨道路边界可以用于后续路径规划。建筑立面形成闭环后比较稳定。在没有太多重复纹理的场景里LIO-SAM 的角点和平面特征匹配效果不错。走完一个 200 米级别的闭合路径后建筑转角、墙面轮廓能稳定对齐地图错位不明显。这里强调“建筑立面”是因为这类场景提供了丰富的几何约束墙角、门框、柱子都是好特征。动态物体容易留下轻微拖影。这是需要接受的现实。行人、自行车、车辆在雷达视野内移动时会在地图上留下少量拖影。LIO-SAM 本身没有做动态物体滤除如果建图环境中动态干扰很多需要在上游加一层动态点云过滤或在最终地图发布前做一次清洁。树荫下和稀疏植被中出现过短时退化。稀疏的树木、灌木丛产生的点云噪声相对较多特征质量下降明显。由于 MID-360 量程有限当视野里大部分是开阔草地、远方又有强光时点云有效范围被压缩LIO-SAM 容易出现短时漂移。补救思路是让机器狗在退化区域附近多走几个来回利用局部重复观测修正轨迹。低矮路沿和减速带建图效果远比车载雷达理想。这应该是四足狗 MID-360 组合最有说服力的地方。车辆雷达装得高路沿经常被车身侧面遮挡而四足狗沿路行走时雷达正好能看到路沿的截面地图里能保留明显的线性结构这对后续导航中的“沿边行驶”很有价值。综合来看这套组合的建图效果定位很清晰在 50 米半径范围内的户外园区、校道、建筑物周边它能够输出结构清晰、边界完整、适合后续导航使用的点云地图。但在空旷退化场景、大量动态物体干扰的街道上仍需要辅助手段比如 GPS 因子、额外磁力计或视觉信息。8. 常见问题与排查思路这里把适配与实机运行中最常遇到的几类问题整理成排查表。问题现象可能原因排查方式解决方案LIO-SAM 编译失败GTSAM、PCL 版本不匹配查看 cmake 错误日志确认依赖版本升级 GTSAM 到官方推荐版本或降级 PCL启动后没有任何位姿输出话题名不匹配雷达数据未进入rostopic echo /lio_sam/odom检查是否有数据核对 launch 文件中的 remap确认点云话题频率IMU 数据频率极低livox 驱动 IMU 输出配置错误rostopic hz /livox/imu检查驱动 launch 中的 imu 参数确认输出频率满足要求点云出现严重重影外参不准或运动畸变静止时观察地图是否清晰重新标定外参静止几秒建立初始地图机器狗行走时地图发散初始化未完成、运动过快、IMU 方向错误记录话题数据回放分析检查初始化时刻保持原地静止 5 秒以上再运动检查 IMU 坐标系大范围闭合误差大回环检测未触发或退化场景较多检查回环话题频率查看轨迹是否闭合增加 GPS 因子规划路径时多经过建筑物立面附近地图中地面起伏不平低视角导致近地处点云噪声大查看原始点云确认是否包含地面杂物调整lidarMinRange对最终地图做地面滤波CPU 占用率过高point cloud 处理量过大htop查看节点 CPU调大downsampleRate减少雷达回波模式排查顺序建议是“先话题、后参数、再外参”。绝大多数问题不是算法原理上的而是数据根本没有按预期进入到 LIO-SAM 的节点里。9. 最佳实践与工程建议基于这段工程经验给出几条对四足机器狗 MID-360 LIO-SAM 项目最实用的建议。9.1 关于传感器安装雷达尽量安装在机身背部的几何中心附近而不是偏向一侧。偏置过大会引入额外的杠杆效应机器狗转身时点云畸变更明显。安装高度不要太低否则雷达下方视场完全被腿部运动遮挡。建议离地 30 厘米以上同时避免被电池包或结构件遮挡水平视场。固定要刚性不能用橡胶减震垫悬空安装。雷达与机体之间任何柔性连接都会变成外参的“随机漂移”。9.2 关于标定不要默认 MID-360 内置 IMU 与雷达外参是严格重合的。装配公差在小范围建图时可能不明显但在大范围回环中会变成系统性误差。每次拆装雷达后都需要重新确认外参。建议把安装位置做成定位销结构减少人工安装误差。9.3 关于建图路径建图时尽量让机器狗沿建筑立面走不要长时间在空旷场地中央行驶。空旷区域退化明显容易让里程计累积误差。规划路径时要有意识地制造回环。哪怕只是走一半折返回来也比长时间单向行驶好得多。9.4 关于后期地图处理LIO-SAM 输出的全局地图直接用于导航往往需要后处理。建议先用 PCL 或 CloudCompare 做离群点去除、地面高度截断和降采样。对于动态物体残留的拖影可以在地图保存后手工清理也可以在建图前开启动态点云过滤节点。9.5 关于系统备份启动前记录一份rostopic hz的状态便于现场快速对比排查。对每次建图实验保存 rosbag包含雷达点云、IMU 和里程计输出。这样即使现场没跑好也能离线调参复现不用反复上真机。10. 总结回到最初的问题用 MID-360 跑 LIO-SAM在四足机器狗上做室外建图到底靠不靠谱从工程实践的角度看这套组合在园区、校园、建筑周边这类中等规模户外场景中表现出了很强的实用性。MID-360 的大垂直视场解决了低视角平台的感知盲区问题LIO-SAM 的回环检测和位姿图优化保证了最终地图的全局一致性。它的门槛不在于硬件成本而在于驱动配置、参数适配、外参标定这些需要实际经验才能做好的细节。建议准备入手的团队按这个顺序推进先手持雷达跑通驱动再在固定支架上跑通 LIO-SAM然后装到机器狗上低速行走最后才做完整园区建图。每一步验证通过后再进入下一步几乎可以把大部分时间浪费节省在问题排查上。下一步值得深入研究的方向有三个一是外参自动标定解决雷达和机身 IMU 之间的偏差二是动态物体过滤提高地图的长期可用性三是与 FAST-LIO 等实时里程计方案做输出融合让建图和导航各取所长。希望这篇文章能帮你把 MID-360 和 LIO-SAM 真正落到自己的四足机器狗上。
返回列表