Skip to content

教程livox_ros_driver214 天前

Livox Mid-360 + FAST-LIO2 + ROS 2 Nav2 室内点云建图与自主导航全流程 ​

本指南假设你已有一块与机器人固连的 Mid-360,且 base_link 已在 URDF 或 SDK 中定义。整体流水线分四段:驱动出点云、LIO 建图、投影或体素化、Nav2 规划。任何一段 TF 断了都会在 RViz 里表现为点云整体漂移或代价地图空白,因此建议先用 ros2 run tf2_tools view_frames 导出 PDF 核对树结构。

依赖与工作空间 ​

bash
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver2.git
git clone https://github.com/hku-mars/FAST_LIO.git
cd .. && rosdep install --from-paths src -y
colcon build --symlink-install
source install/setup.bash

ROS 2 发行版与驱动 README 对齐(Humble/Jazzy 二选一,勿混装)。Mid-360 是非重复扫描雷达,点云密度随时间累积,建图时务必低速移动,否则 FAST-LIO 的前端会因运动畸变发散。工控机网卡与雷达配置在同一二层网段即可,具体 IP 以 Livox Viewer 读到的出厂地址为准,不要硬抄旧教程里的数字。

启动雷达与静态外参 ​

编辑 MID360_config.json 中的 host 网段,使雷达与工控机同子网(勿把密钥写进仓库)。Launch:

bash
ros2 launch livox_ros_driver2 msg_MID360_launch.py

发布静态 TF(示例数值请换成标定结果):

bash
ros2 run tf2_ros static_transform_publisher 0 0 0.15 0 0 0 base_link livox_frame

FAST-LIO2 建图 ​

bash
ros2 launch fast_lio mapping.launch.py config_file:=mid360.yaml

手推或遥控慢速覆盖房间,RViz 看点云闭合。第一圈先走外轮廓,第二圈补中间,墙面应呈单层厚度。若出现双层墙,多半是外参 roll/pitch 偏了 1° 量级,回到标定步骤微调。IMU 与雷达时间同步误差大于 5ms 时,FAST-LIO 会在转弯处拉花,可用 ros2 bag info 检查消息时间戳单调性。保存 PCD 按包内说明执行,同时记录 map → odom 是否稳定。

点云转 Nav2 可消费格式 ​

Nav2 默认消费二维激光或代价地图层。Mid-360 三维点云需投影:常见做法是用 pointcloud_to_laserscan 截取机器人高度带(例如地面以上 0.1–0.6m),输出 /scan;或在 nav2_costmap_2d 里启用 voxel layer 直接吃 PointCloud2。四足或人形平台要把自遮挡考虑进去,leg 扫过的扇区可在 costmap 里标记为未知而非自由,避免 planner 贴腿根规划。全局定位若仍用 AMCL,需要一份与 FAST-LIO 尺度一致的二维栅格;更稳妥的是整条链路都在 LIO 的 map 帧下做局部规划,仅把目标点变换到同一帧。

将点云投影为 sensor_msgs/LaserScan 或 elevation layer,启动:

bash
ros2 launch nav2_bringup navigation_launch.py use_sim_time:=false

发目标:

bash
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{pose: {header: {frame_id: map}, pose: {position: {x: 2.0, y: 1.0, z: 0.0}, orientation: {w: 1.0}}}}"

四足底盘请把 max_vel_theta 调低,并加长 controller_server 的失败容忍时间。Spot/Go2 一类平台实际 yaw 速率低于 diff-drive 标称值,可在 velocity smoother 再加一层上限。动态障碍测试时,把 obstacle_layer 的 observation_persistence 调到 0.5s 以上,防止行人拖影。若 action 超时,先看 local_costmap 是否在机器人脚下误标障碍,通常是 TF 高度或 footprint 半径过大。整条链路联调完成后,用 ros2 lifecycle 确认 Nav2 节点均处于 active,再开始长距离任务。

录包与回归 ​

联调通过后录一段包含建图与导航的 rosbag,便于回归。回放时先起 LIO 再起 Nav2,顺序反了会出现 map 帧跳变。生产环境建议把 Mid-360 固件与驱动版本 pin 住,Livox 偶发固件升级会改点云字段布局。室内玻璃与长走廊会让激光认为可通行,需在 costmap 加 keep-out 或融合其他传感器。最后把 footprint、外参、最大速度三项写进版本化 yaml,换机器人时只改参数不改代码。若团队同时维护仿真与真机,可在 Gazebo 里用相同样机位验证 Nav2 参数,再迁移到实机,能显著减少首日联调时间。遇到「地图重影」时,优先检查雷达与 IMU 是否在同一时钟域,其次才是算法参数。

来源

本页事实对应的公开页面,以原文为准。

  1. livox_ros_driver2访问 2026-10-14
  2. FAST_LIO ROS2访问 2026-10-14