开源移动机器人规划框架:ROS Noetic + Gazebo SLAM导航、多算法规划与 Go2W Bonus
从课程设计到开源移动机器人规划框架ROS Noetic Gazebo SLAM导航、多算法规划与 Go2W Bonus本文介绍一个面向移动机器人仿真、SLAM、定位导航、传统路径规划、覆盖路径规划和实验性学习规划的 ROS Noetic 开源仓库mobile-robot-planning。项目最初来源于 **MEE5115 Autonomous Robotic Systems自主机器人系统**课程设计随后在课程基线之上进行了结构整理、功能扩展和文档补充逐步形成了一个适合学习、课程实践、算法验证与二次开发的移动机器人工作区。一、项目地址与演示视频GitHub 仓库https://github.com/Mingyang-Sheep/mobile-robot-planningB 站演示视频《MEE5115自主机器人系统课设Gazebo SLAM导航、规划与Go2W Bonus》项目包含较完整的中英文 README、模块说明、启动参数、故障排查文档以及多组运行 GIF。本文中的演示素材均可以在仓库的docs/assets/目录中找到。二、为什么要整理这个仓库很多 ROS 移动机器人项目能够完成某一个单独功能例如在 Gazebo 中加载机器人使用 gmapping 建图使用 AMCL 定位通过 move_base 完成导航单独运行 A* 或 Dijkstra 算法在 RViz 中显示路径。但对于刚接触自主移动机器人的同学来说真正困难的往往不是“找到一个算法文件”而是把下面这些环节完整串联起来机器人模型 ↓ Gazebo 仿真与传感器 ↓ /scan、/odom 与 TF ↓ SLAM 或地图服务器 ↓ AMCL 定位 ↓ 全局路径规划 ↓ 局部规划与避障 ↓ 速度指令 /cmd_vel ↓ 机器人执行因此这个仓库的目标并不是只展示某一个算法而是尽量保留一条完整、可观察、可替换的移动机器人导航链路。在此基础上仓库进一步加入了多种移动机器人模型多种全局路径规划算法路径平滑模块覆盖路径规划基础 DQN 学习演示Go2W 轮足机器人导航 Bonus中英文文档与统一启动入口。项目整体效果如下三、技术栈与运行环境项目主分支面向以下环境项目版本或说明操作系统Ubuntu 20.04ROSROS Noetic仿真器Gazebo 11可视化RViz构建方式Catkin /catkin_make主要语言C、Python、Shell、CMake定位导航map_server、AMCL、move_base局部规划DWAPlannerROSSLAMgmapping、hector全局规划Navfn、A*、Dijkstra、D*、D* Lite、Theta*、RRT*覆盖规划BCD、STC学习模块基础 DQN 实验BonusGo2W RL-SAR ROS Navigation从工程组织上看C 主要承担 ROS 插件接入、nav_core::BaseGlobalPlanner适配和导航主执行链路Python 更适合用于算法教学、快速验证、调试可视化以及实验性学习模块。四、仓库整体架构仓库中的核心 ROS 包按照功能进行划分mobile-robot-planning/ ├── README.md ├── README_zh.md ├── docs/ │ ├── index.md │ ├── zh/ │ └── assets/ ├── src/ │ ├── mr_description/ │ ├── mr_gazebo/ │ ├── mr_maps/ │ ├── mr_slam/ │ ├── mr_navigation/ │ ├── mr_traditional_planner/ │ ├── mr_learning/ │ └── mr_msgs/ ├── tools/ └── refer/各模块的主要作用如下。1.mr_description用于管理机器人模型、URDF/Xacro、传感器位置以及机器人外形描述。2.mr_gazebo用于管理 Gazebo 世界、机器人生成、仿真插件以及激光、里程计、IMU、相机等传感器接口。3.mr_maps用于统一管理地图文件及对应的 YAML 配置。4.mr_slam提供 gmapping 和 hector 的统一启动接口主要用于基础 SLAM 建图课程实验验证/scan、/odom、TF 等 ROS 数据链路学习。5.mr_navigation负责整合map_serverAMCLmove_base全局与局部代价地图全局规划器DWAPlannerROS不同机器人和不同场景的导航参数。6.mr_traditional_planner包含多种传统路径规划算法以及 ROS 导航适配接口是仓库中算法扩展最集中的模块。7.mr_learning包含一个基础 DQN 训练与 Gazebo 交互示例用于展示学习型规划的基本流程。8.mr_msgs用于存放仓库内部需要的自定义消息定义。仓库还给出了一张整体系统结构图用于说明机器人、感知、地图、规划、执行和可视化之间的关系五、SLAM 建图从激光数据到二维地图仓库在mr_slam中提供了 gmapping 和 hector 的统一入口。典型启动方式如下roslaunch mr_slam slam.launch slam_method:gmapping或者roslaunch mr_slam slam.launch slam_method:hector在仿真环境中也可以使用roslaunch mr_slam slam_sim.launch slam_method:gmapping这一部分的重点不仅是“生成一张地图”更重要的是理解 ROS SLAM 中几个关键数据之间的关系激光雷达 /scan 里程计 /odom 机器人 TF ↓ SLAM 节点 ↓ /map 与 map 坐标系对于移动机器人入门来说能够真正理解map、odom、base_footprint、base_link和激光雷达坐标系之间的关系比单纯运行一个 launch 文件更加重要。需要说明的是当前仓库中的 SLAM 模块主要用于基础教学、课程验证和导航链路搭建并不是一个复杂的多传感器融合 SLAM 框架。六、定位与自主导航AMCL move_base DWA完成建图后机器人需要在已有地图中完成定位和自主导航。仓库中的基本导航链路为Gazebo ├── /scan ├── /odom └── TF ↓ map_server 发布 /map ↓ AMCL 估计机器人位姿 ↓ move_base ├── 全局代价地图 ├── 局部代价地图 ├── 全局规划器 └── DWAPlannerROS ↓ /cmd_vel ↓ 机器人底盘其中map_server负责加载并发布已有地图AMCL 负责估计机器人在地图中的位置全局规划器负责从起点到目标点生成参考路径DWA 负责在局部范围内选择可执行速度并完成避障和路径跟踪/cmd_vel最终传递给仿真机器人。默认导航入口为roslaunch mr_navigation navigation_sim.launch启动后可以在 RViz 中使用2D Pose Estimate设置或修正初始位姿2D Nav Goal发送导航目标。下面是仓库中的 DWA 基线导航效果七、多种传统全局路径规划算法除了 ROS 默认的 Navfn 规划器仓库还接入了多种常见路径规划算法。当前支持的全局规划器包括算法主要特点当前定位NavfnROS Navigation 默认基线之一基线A*使用启发函数加速搜索可用Dijkstra经典最短路径搜索可用D*面向路径修正思想当前为静态代价地图适配D* Lite增量式路径重规划已接入动态障碍效果仍需继续评估Theta*允许视线连接路径通常更平滑可用RRT*基于采样并具有渐近最优性可用Cubic Spline对已有路径进行平滑路径平滑器不是独立全局规划器1. Dijkstra DWADijkstra 在全局代价地图上计算路径DWA 负责局部轨迹选择和运动控制。2. D* DWAD* 相关算法常用于讨论环境变化下的路径修正问题。当前仓库中的 D* 更适合作为静态代价地图上的适配与教学实现不应直接等同于完整的动态障碍在线重规划系统。3. RRT* DWARRT* 通过随机采样逐步扩展搜索树适合用于学习采样规划的基本思想。仓库中将其接入全局规划链路再由 DWA 执行局部运动。4. 规划器统一接入不同规划算法不仅可以单独显示调试路径也可以通过 CGlobalPlannerAdapter接入move_base。例如roslaunch mr_navigation navigation_sim.launch\global_planner:theta_star\path_smoother:cubic_spline这种结构使得算法研究与 ROS 工程链路能够结合自定义全局规划算法 ↓ GlobalPlannerAdapter ↓ move_base ↓ DWAPlannerROS ↓ 机器人执行仓库同时区分了“实际参与控制的路径”和“仅用于可视化调试的路径”避免在 RViz 中看到多条路径时无法判断机器人究竟跟踪哪一条。八、覆盖路径规划从“到达目标”到“遍历区域”普通点到点导航解决的是如何从当前位置安全到达目标点覆盖路径规划解决的则是如何尽可能完整地遍历一个指定区域这类功能可以用于扫地机器人巡检机器人消毒机器人农业作业机器人仓储盘点区域搜索。仓库当前接入了 BCD 和 STC 两类覆盖规划器。1. BCD 覆盖规划BCD即 Boustrophedon Cellular Decomposition可以先将自由空间分解为若干单元再按照往复式方式生成覆盖路径。2. STC / Spiral-STC 覆盖规划演示STC 基于生成树思想组织覆盖路径适合用于栅格化环境中的完整遍历。覆盖模式下规划器会订阅地图与触发目标发布覆盖路径并通过/move_baseaction 将路径点依次交给导航系统执行。地图 /map ↓ 覆盖规划器 ↓ 覆盖路径 ↓ move_base 路径点 ↓ DWA ↓ 机器人执行启动示例roslaunch mr_navigation navigation_sim.launch\planning_mode:coverage\coverage_planner:stc需要注意的是在覆盖模式中RViz 的2D Nav Goal更接近“启动覆盖任务的触发器”点击位置并不一定代表覆盖路径的最终终点。九、实验性 DQN 学习规划除了传统算法仓库还提供了一个基础 DQN 学习模块。当前模块包含DQN 网络经验回放缓冲区目标网络更新epsilon-greedy 探索.pth模型保存.json训练状态记录Gazebo 环境重置激光与里程计观测/cmd_vel控制输出。该模块更适合用于理解环境观测 ↓ 策略网络 ↓ 动作输出 ↓ Gazebo 执行 ↓ 奖励与下一状态 ↓ 经验回放与网络更新目前它仍然属于阶段 1 的实验性演示并不是成熟的强化学习导航平台。仓库暂未完整覆盖复杂动态障碍、标准化评估、多阶段训练、严格的训练/测试分离以及 Navigation 插件化部署。这种明确标注能力边界的方式也是我在整理仓库时比较重视的一点展示已经完成的内容同时避免将实验模块包装成完整解决方案。十、多机器人模型支持主分支目前支持多种移动机器人模型机器人GazeboSLAMNavigation说明TurtleBot3 Burger✅✅✅默认快速上手模型TurtleBot3 Waffle✅✅✅较大尺寸差速底盘TurtleBot3 Waffle Pi✅✅✅保留相机话题导航主要依赖激光WPB Home✅✅✅官方模型加仿真适配层WPB Home Mani✅✅✅当前按移动底盘使用WPB Home 的迁移不仅是复制 URDF还补充了Gazebo 差速驱动激光雷达RGB/深度相机接口IMUfootprint代价地图参数DWA 参数仿真适配层。需要说明的是WPB Home Mani 当前只作为移动底盘参与导航仓库尚未实现机械臂 MoveIt 规划、抓取和移动操作任务。模型切换示例roslaunch mr_navigation navigation_sim.launch\model:waffle\robot_model:waffle或者roslaunch mr_navigation navigation_sim.launch\model:wpb_home\robot_model:wpb_home十一、课程 BonusGo2W 轮足机器人自主导航本项目中比较有特点的一部分是将课程中的 ROS 导航链路进一步迁移到 Go2W 轮足机器人仿真中。Go2W Bonus 并不直接放在主分支而是保留在go2w-navigation分支中。分支地址https://github.com/Mingyang-Sheep/mobile-robot-planning/tree/go2w-navigation这一分支将以下模块串联起来Go2W 仿真模型Gazebo激光雷达里程计与 TFmap_serverAMCLmove_baseNavfnROSDWAPlannerROS速度指令滤波RL-SAR 运动控制TorchScript 策略关节控制器RViz 目标点输入。演示效果如下Go2W 导航的数据流RViz 2D Nav Goal ↓ map_server AMCL ↓ NavfnROS ↓ DWAPlannerROS ↓ /move_base_cmd_vel ↓ cmd_vel_filter.py ↓ /cmd_vel ↓ RL-SAR / rl_sim ↓ policy.pt ↓ robot_joint_controller ↓ Gazebo Go2W传统差速机器人通常可以直接将/cmd_vel发送给底盘插件。但对于 Go2W 这类轮足机器人导航系统输出的速度指令不能直接等价为各关节控制量。因此该分支增加了一个中间层导航速度指令 ↓ 速度限制与平滑 ↓ RL-SAR 运动策略 ↓ 轮足关节动作这部分展示了一个比较重要的系统集成思路高层导航不需要直接理解机器人每个关节如何运动而是输出期望速度底层学习控制器负责将速度命令转换为机器人可以执行的轮足动作。Go2W 分支的定位是课程 Bonus 展示和可复现实验链路后续通用功能开发仍建议从main分支开始。十二、快速运行主分支1. 克隆仓库gitclone https://github.com/Mingyang-Sheep/mobile-robot-planning.gitcdmobile-robot-planning2. 加载 ROS 环境source/opt/ros/noetic/setup.bash3. 检查环境bashtools/check_environment.sh4. 安装依赖sudobashtools/install_dependencies.sh5. 编译catkin_makesourcedevel/setup.bash6. 启动默认导航示例roslaunch mr_navigation navigation_sim.launch默认配置为项目默认值机器人burger世界turtlebot3_world.world地图turtlebot3_world.yaml初始位置x-2.0, y-0.5, yaw0.0启动入口mr_navigation/navigation_sim.launch十三、快速运行 Go2W Bonus切换到 Go2W 分支gitcheckout go2w-navigation下载推理运行时并编译source/opt/ros/noetic/setup.bashbashscripts/download_inference_runtime.sh libtorch catkin_make-DBUILD_RL_REAL_TARGETSOFFsourcedevel/setup.bash启动 Go2W 导航roslaunch mr_navigation go2w_navigation_sim.launch启动完成后在 RViz 中等待 Gazebo、RL-SAR 起身流程、AMCL 和 move_base 完成初始化必要时使用2D Pose Estimate修正初始位姿使用2D Nav Goal发送目标点。常用检查命令rostopic hz /scan rostopic hz /odom rostopicecho/move_base_cmd_vel rostopicecho/cmd_vel rosrun tf tf_echo map base_footprint十四、这个仓库适合哪些人我认为这个仓库比较适合以下几类读者。1. ROS 移动机器人初学者可以从机器人模型、Gazebo、SLAM、AMCL、move_base、DWA 和 TF 入手理解一个完整导航系统的基本组成。2. 正在做机器人课程设计的同学仓库保留了课程基线的思路同时补充了结构化 ROS 包、算法扩展、文档和运行演示适合作为课程项目的参考框架。3. 想学习路径规划算法的同学仓库同时包含 A*、Dijkstra、D*、D* Lite、Theta*、RRT* 等算法并提供 C/Python 调试和 ROS 导航接入方式。4. 想学习覆盖规划的同学可以通过 BCD 和 STC 了解普通点到点导航与全覆盖任务的差别。5. 想了解学习控制与导航结合的同学Go2W Bonus 展示了ROS 高层导航 强化学习底层运动控制之间的一种分层组合方式。6. 需要迁移自定义机器人模型的开发者仓库中的多机器人配置和 WPB Home 迁移过程可以作为 URDF、Gazebo 插件、传感器、costmap 和 DWA 参数适配的参考。十五、项目亮点总结与只包含单个算法脚本的项目相比这个仓库更重视“系统链路”和“工程组织”。主要特点可以概括为1. 从课程基线扩展为模块化工作区保留 MEE5115 课程项目的 SLAM 与导航基础同时重新组织为多个可复用 ROS 包。2. 不止有算法还接入真实导航链路自定义规划器可以通过GlobalPlannerAdapter接入 move_base由 DWA 负责局部执行而不是只在图片上画一条路径。3. 同时覆盖点到点规划与覆盖路径规划既可以完成普通导航也可以学习巡检、清扫等全覆盖任务。4. 支持多种机器人模型从 TurtleBot3 到 WPB Home再到 Go2W 轮足机器人体现了不同底盘和控制接口下的适配过程。5. 加入实验性学习模块虽然 DQN 模块仍处于基础阶段但保留了从观测、动作、奖励到训练和模型保存的基本流程。6. Go2W Bonus 体现分层控制思想ROS Navigation 负责目标、定位和路径RL-SAR 负责把速度指令变成轮足运动实现高层导航与底层学习控制的衔接。7. 文档和演示素材相对完整仓库提供中英文 README安装与快速上手Launch 参数说明SLAM 与导航文档规划算法说明机器人模型迁移说明故障排查多组 GIF 演示。十六、当前边界与后续方向这个仓库定位为学习、课程实践和算法验证工作区而不是完整的工业级自主机器人平台。目前仍有一些可以继续扩展的方向增加更系统的规划算法评估指标对不同算法统计路径长度、规划时间、平滑度和成功率加入动态障碍场景完善 D* Lite 的动态重规划验证建立更规范的强化学习训练与测试流程增加视觉感知与视觉 SLAM增加 Nav2 / ROS 2 版本将更多自定义机器人接入统一启动框架增加真实机器人部署与 Sim2Real 验证探索全局导航与学习型局部规划的结合。十七、结语mobile-robot-planning最初只是一次自主机器人系统课程设计但在后续整理中我希望它不只是一份“能够运行的作业代码”而是成为一个可以继续学习和开发的移动机器人工作区。从 TurtleBot3 的 Gazebo 仿真、SLAM 建图、AMCL 定位和 DWA 导航到 A*、Dijkstra、D*、Theta*、RRT* 等传统规划算法再到 BCD、STC 覆盖路径规划、基础 DQN 实验以及 Go2W 轮足机器人导航这个仓库尝试把移动机器人中的多个核心环节放在同一套 ROS 工程中展示出来。项目仍在持续完善中也欢迎对 ROS、SLAM、自主导航、路径规划、覆盖规划和轮足机器人感兴趣的同学交流。如果这个项目对你有帮助欢迎给仓库点一个Star提交 IssueFork 后进行二次开发分享给正在学习移动机器人和 ROS 的同学。GitHubhttps://github.com/Mingyang-Sheep/mobile-robot-planningB 站演示《MEE5115自主机器人系统课设Gazebo SLAM导航、规划与Go2W Bonus》
