# patrolbot_nav2 **Repository Path**: zhangnpl/patrolbot_nav2 ## Basic Information - **Project Name**: patrolbot_nav2 - **Description**: 本项目基于ROS2和Navigation2设计了一个自动巡检机器人仿真系统 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 3 - **Created**: 2026-05-28 - **Last Updated**: 2026-08-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # patrolbot_nav2 ## 1. 项目简介 本项目基于 **ROS 2 Humble** 与 **Navigation2**,实现了 Gazebo 仿真环境下的**自动巡检机器人**。
机器人可在多个目标点之间循环巡逻;每到达一个巡检点后,通过语音播报当前状态,并使用摄像头采集图像,按位姿与时间戳格式保存到本地。
应用场景如室内外复杂环境下,机器人携带多种传感器采集数据,按路线自动巡逻并记录现场图像。
--- ## 2. 功能介绍 - 可通过 YAML 配置初始位姿与多个巡检点 [x, y, yaw] - 支持循环巡检模式(patrol_mode: loop) - 可实现非阻塞导航(spin_once)+ 导航超时取消 - 可实时查询 TF 位姿(map → base_footprint) - 到达目标点后可触发语音播报和拍照保存(文件名含坐标与时间戳) - 支持可配置参数:map_frame、robot_base_frame、navigation_timeout_sec 等 扩展内容: - 使用 C++实现 Nav2 **自定义全局规划器**与**局部控制器**插件(`pluginlib`) - 在导航参数中预留**官方插件与自定义插件**的一键切换配置 - 将入门示例与正式巡检业务拆分为独立功能包 - 提供 pluginlib demo,便于理解插件加载机制 --- ## 3. 整体结构 ### 3.1. 工作空间目录结构图 ``` patrolbot_nav2-master/ ├── README.md └── src/ ├── autopatrol_interfaces/ # 自定义接口 ├── autopatrol_robot/ # 巡检主程序 ├── patrolbot_description/ # 机器人模型与仿真 ├── patrolbot_navigation2/ # 地图与 Nav2 配置 ├── nav2_custom_planner/ # 自定义全局规划插件 ├── nav2_custom_controller/ # 自定义局部控制插件 ├── demo_patrolbot_application/ # Nav2 demo └── demo_pluginlib/ # pluginlib demo ``` ### 3.2. 技术栈介绍 | 模块 | 技术 | |------|------| | 建图 | slam-toolbox(自带预建地图) | | 导航 | Navigation 2(默认 Navfn + DWB;可切换自定义插件) | | 仿真 | Gazebo | | 运动控制 | ros2-control(差速驱动) | | 巡检应用 | Python(`nav2_simple_commander`) | | 语音| espeak-ng(中文 TTS)| | Nav2 扩展 | C++ 插件(`nav2_custom_planner` / `nav2_custom_controller`) | ### 3.3. 系统架构图 ``` ┌─────────────────────────────────────────────────────────┐ │ autopatrol_robot(巡检应用:YAML 配点 / 语音 / 拍照) │ └──────────────────────────┬──────────────────────────────┘ │ navigate_to_pose (Action) ┌──────────────────────────▼──────────────────────────────┐ │ patrolbot_navigation2(Nav2 + AMCL + 地图) │ │ ├─ 默认: NavfnPlanner + DWBLocalPlanner │ │ └─ 可选: CustomPlanner + CustomController(插件) │ └──────────────────────────┬──────────────────────────────┘ │ /cmd_vel ┌──────────────────────────▼──────────────────────────────┐ │ patrolbot_description(Gazebo + URDF + ros2_control) │ └──────────────────────────────────────────────────────────┘ ``` ### 3.4. 开发环境 本项目开发平台信息如下: - 系统版本: Ubunt22.04 - ROS 版本:ROS 2 Humble --- ## 4. 使用方法 ### 4.1.安装依赖 构建之前请先安装依赖,指令如下: 1 安装 SLAM 和 Navigation 2 ```shell sudo apt install ros-$ROS_DISTRO-nav2-bringup ros-$ROS_DISTRO-slam-toolbox ``` 2 安装仿真相关功能包 ```shell sudo apt install ros-$ROS_DISTRO-robot-state-publisher \ ros-$ROS_DISTRO-joint-state-publisher \ ros-$ROS_DISTRO-gazebo-ros-pkgs \ ros-$ROS_DISTRO-ros2-controllers \ ros-$ROS_DISTRO-xacro ``` 3 语音、图像与 Python 依赖 ```shell sudo apt install python3-pip espeak-ng -y sudo pip3 install espeakng sudo apt install ros-$ROS_DISTRO-tf-transformations sudo pip3 install transforms3d opencv-python ``` 4 Nav2 插件开发(C++ 自定义包) 构建 `nav2_custom_planner`、`nav2_custom_controller` 时需已安装 Nav2 开发依赖(通常随 `nav2-bringup` 一并安装)。若编译报缺少头文件,可补充: ```shell sudo apt install ros-$ROS_DISTRO-navigation2 ros-$ROS_DISTRO-nav2-core ``` ### 4.2.运行方法 安装完成依赖后,可以使用 colcon 工具进行构建和运行。 构建功能包 ```shell colcon build ``` 终端一:运行仿真 gazebo ```shell source install/setup.bash ros2 launch patrolbot_description gazebo_sim.launch.py ``` 终端二:运行导航 navigation2+Rviz2 ```shell source install/setup.bash ros2 launch patrolbot_navigation2 navigation2.launch.py ``` 终端三:运行自动巡检 autopatrol ```shell source install/setup.bash ros2 launch autopatrol_robot autopatrol.launch.py ``` 巡检抓拍的图片默认保存在**启动巡检节点时的当前工作目录**下的 `picture/` 文件夹。 --- ## 5. 切换 Nav2 自定义插件 配置文件:`src/patrolbot_navigation2/config/nav2_params.yaml` 默认配置为: - **全局规划**:`nav2_navfn_planner/NavfnPlanner` - **局部控制**:`dwb_core::DWBLocalPlanner` 切换为自定义插件: **(1)局部控制器** — 在 `controller_server` 中注释 DWB 相关 `plugin` 行,启用: ```yaml FollowPath: plugin: "nav2_custom_controller::CustomController" max_linear_speed: 0.1 max_angular_speed: 1.0 ``` **(2)全局规划器** — 在 `planner_server` 中注释 Navfn 配置,启用: ```yaml GridBased: plugin: "nav2_custom_planner/CustomPlanner" interpolation_resolution: 0.1 ``` 修改后重新编译并 source,再按运行的顺序启动。可在 RViz 中对比全局路径形态与机器人运动差异。 --- ## 6.作者 - [zhangnpl](https://gitee.com/zhangnpl) - 参考书籍《ROS2机器人开发从入门到实践》桑欣(鱼香ros)