☰
四足机器狗室外SLAM实战:MID-360与LIO-SAM配置指南
2026/10/9 8:47:59 网站建设 项目流程

每次做四足机器狗的室外 SLAM 调研,都会遇到同一个争论:用视觉方案还是激光方案?

视觉方案便宜、信息丰富,但一到阳光直射、树影斑驳、路面反光的环境,特征点就开始“罢工”。传统 16 线机械雷达倒是稳定,但装在四足狗这种低矮平台上,近距离盲区大、垂直视场角小,楼梯、路沿、矮灌木经常扫不到,建出来的地图总感觉“少了半层楼”。

于是越来越多团队把目光放到 Livox MID-360 和 LIO-SAM 这个组合上。MID-360 是非重复扫描的固态激光雷达,垂直视场角达到 59°,天然适合低视角平台;LIO-SAM 是紧耦合 LiDAR-Inertial 里程计,有回环检测,在室外场景表现稳定。两者搭配,已经成为很多四足机器人项目做室外建图的首选方案。

但这条路的坑也不少。网上资料大多是“单雷达跑通”的简单流程,真正把 MID-360 放到四足机器狗上、跑到室外环境里,会遇到驱动版本不匹配、LIO-SAM 参数不适配、IMU 时间戳不同步、点云畸变等一系列问题。这篇文章不做理论堆砌,直接把遇到的问题、改过的配置、验证过的方法整理出来,希望能帮你少走弯路。

1. 四足机器狗室外建图,到底难在哪

先看一个容易被忽略的事实:四足机器狗的传感器安装高度通常在 30 到 50 厘米之间,这决定了它与车载激光雷达的使用逻辑完全不同。

  1. 低视角带来遮挡问题。车辆雷达装在车顶,1.5 米以上高度,可以看到远处的路面和车辆。机器狗的高度接近地面,草丛、台阶、路沿、甚至一块石头都可能形成大面积遮挡。水平视角再大,如果垂直视场角不够,扫描到的有效环境信息会大打折扣。

  2. 运动模态复杂。四足狗的行走、小跑、跳跃会产生高频振动和姿态突变,尤其是 trot 步态下的周期性起伏。这种运动对纯 LiDAR 里程计是灾难性的,特征匹配很容易被“抖散”。

  3. 室外光照与动态物体。阳光直射会影响部分传感器的测量质量;行人、车辆、树叶摆动、水面反光等动态干扰会在地图上留下重影。

  4. 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 米级别;夜间或低光照条件下量程会更大。这个量程对四足狗常见的园区、校园、仓库场景是够用的。
  • 内置 IMU:MID-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. 系统组成与硬件连接

在写配置之前,先把我们要搭的系统讲清楚。四足机器狗上搭建这套建图系统,主要是下面几部分:

  1. 四足机器狗本体:提供运动底盘,常见的是宇树、小米铁蛋或者其他开源四足平台。这部分只影响机器狗运动控制,对 SLAM 来说,它只是一个运动的载体。
  2. MID-360 激光雷达:提供 3D 点云和内置 IMU 数据。
  3. 计算平台:一般用搭载 Ubuntu 系统的工控机或车载电脑。需要能跑 ROS,性能建议 x86 平台,能够在 10Hz 点云频率下实时跑 PCL、GTSAM 相关的优化。
  4. 传感器固定方式:雷达需要固定在机身上,不能产生相对机身的晃动。很多四足狗的头部或背部有安装支架,建议安装在背部偏前、高度适中的位置,避免被身体遮挡太多水平视野。
  5. 供电与通信:MID-360 通过以太网传输点云数据,供电一般通过专用线缆或 PoE 适配。注意电压电流要求,不要和电机驱动共用不稳定的电源。

整条消息链路可以简化成下面这种流向:

MID-360 ├─ 点云数据(以太网)─> livox_ros_driver2 ─> sensor_msgs/PointCloud2 ─> LIO-SAM └─ 内置 IMU(同一数据链路)─> livox_ros_driver2 ─> sensor_msgs/Imu ─> LIO-SAM

LIO-SAM 接收去畸变前的点云和 IMU 数据,在线输出:

  • /lio_sam/odom:里程计位姿;
  • /lio_sam/mapping/map_global:全局点云地图;
  • /lio_sam/mapping/path:运动轨迹。

运行结束后,可以把全局地图保存为 PCD 文件,用于后续导航或语义标注。

4. 环境搭建与驱动安装

4.1 推荐运行环境

环境版本在不同时期变化较快,这里给一个经过实践检验的组合方向,具体版本以你的工程和硬件为准:

  • Ubuntu 20.04 / 22.04;
  • ROS 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_driver2

Livox 官方维护的驱动是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-SAM

cd ~/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.yaml

LIO-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 内置 IMU,IMU 坐标系和雷达坐标系通常被认为是重合的,外参可以保持单位阵。但这种“重合”是理论上的,实际上安装支架、装配公差会引入偏移。在建图精度要求高的场景,建议做一次外参标定。标定方法包括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 name="robot_description" command="$(find xacro)/xacro $(find lio_sam)/urdf/robot.xacro" /> <node pkg="lio_sam" type="lio_sam_imageProjection" name="lio_sam_imageProjection" output="screen"> <remap from="/imu/data" to="/livox/imu" /> <remap from="/points_raw" to="/livox/lidar" /> </node> <node pkg="lio_sam" type="lio_sam_featureExtraction" name="lio_sam_featureExtraction" output="screen" /> <node pkg="lio_sam" type="lio_sam_mapOptimization" name="lio_sam_mapOptimization" output="screen"> <remap from="/imu/data" to="/livox/imu" /> <remap from="/points_raw" to="/livox/lidar" /> </node> <node pkg="lio_sam" type="lio_sam_imuPreintegration" name="lio_sam_imuPreintegration" output="screen" /> </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 真正落到自己的四足机器狗上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询