站内搜索

输入标题、简介或关键词开始搜索

← 返回项目列表

ROS2 + Nav2 自主导航与建图仿真

基于 URDF、Gazebo、slam_toolbox 和 Nav2 搭建移动机器人自主建图、定位、单点/路点导航与避障仿真。

周期
2025/09 - 2026/03
角色
机器人模型与传感器建模、slam_toolbox 接入、Nav2 参数调试、导航任务验证
ROS2Nav2slam_toolboxURDFGazeboRVizTF

速览

这个项目用于搭建移动机器人自主导航与建图仿真链路。系统基于 URDF 和 Gazebo 建模机器人底盘、激光雷达、里程计和 TF,接入 slam_toolbox 完成建图与定位,再通过 Nav2 验证单点导航、路点导航和动态避障。

项目重点是把 ROS2 导航栈从模型、传感器、TF 到 planner/controller/costmap 串通,形成后续真实机器人导航调参和插件开发的基础环境。

架构

  1. 01

    URDF 描述移动底盘、轮系、雷达、惯性传感器和坐标系结构。

  2. 02

    Gazebo 提供仿真世界、传感器数据和机器人运动反馈。

  3. 03

    slam_toolbox 订阅激光和 odom,输出 map 与定位结果。

  4. 04

    Nav2 planner、controller 和 costmap 根据目标点生成全局路径和局部速度命令。

  5. 05

    RViz 用于地图、TF、costmap、路径和导航状态可视化。

流程

模型搭建

完成 URDF、传感器插件和 Gazebo 仿真世界配置。

建图定位

接入 slam_toolbox,验证 map、odom、base_link 和 laser 等 TF 链路。

导航调参

配置 Nav2 planner、controller、global/local costmap 和恢复行为。

任务验证

在 RViz 中执行单点导航、路点导航和动态障碍物避让测试。

插件探索

尝试自定义 planner/controller 或 behavior 插件,为后续真实机器人场景预留扩展。

难点

导航栈调试最容易被 TF 和时间戳问题阻塞。map -> odom -> base_link -> laser 链路必须连续且方向正确,否则 slam_toolbox 和 Nav2 会在不同坐标系中解释同一帧数据,表现为地图漂移、路径跳变或 costmap 障碍错位。

Nav2 参数也需要按机器人尺寸和速度能力调整。膨胀半径过小会让局部规划贴近障碍物,过大则会在窄通道中失败;controller 的速度、加速度和角速度限制需要与 Gazebo 机器人动力学匹配。

调试

局部 costmap 障碍物错位

现象
RViz 中激光点云位置正确,但局部 costmap 的障碍层相对机器人偏移,导致局部路径绕行异常。
排查
检查 TF tree 和消息时间戳后发现,laser frame 的静态变换方向配置反了,同时仿真时间没有在所有节点中统一启用。
结论
修正静态 TF 的 parent/child 关系,并统一使用 simulation time;随后 costmap、激光和 base_link 在 RViz 中对齐。

成果

项目完成了 ROS2 + Nav2 仿真导航闭环:机器人和传感器建模、slam_toolbox 建图定位、Nav2 单点/路点导航、动态障碍物避让,以及自定义插件探索。这个页面作为较轻量的案例记录,重点呈现完整导航栈的打通过程。

相关博客