# 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)