# multibot_nav_system **Repository Path**: CeasarSmj/multibot_nav_system ## Basic Information - **Project Name**: multibot_nav_system - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多机器人导航系统 (Multi-Robot Navigation System) 一个基于 TCP 通信的多机器人协同导航系统,支持 DRL(深度强化学习)策略的追捕-逃逸博弈。 实验: [实验流程梳理](./doc/实验流程梳理.md) ## 功能特性 - **多机器人协同**:支持多个追捕者机器人协同追捕逃逸者 - **DRL 策略**:基于深度强化学习的追捕策略,提升追捕效率 - **实时通信**:基于 TCP 的可靠通信架构 - **Web 可视化**:提供实时监控和日志回放功能 - **ROS 集成**:支持 ROS Noetic 环境,可连接真实机器人 - **灵活扩展**:支持模拟机器人和真实机器人混合部署 ## 系统架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 服务端 (Server) │ │ - 坐标管理 - 数据中继 - 地图管理 - 日志记录 │ └────────────────┬──────────────────────────────────────────────┘ │ ┌────────────┼────────────┬────────────┐ │ │ │ │ ┌───▼────┐ ┌───▼────┐ ┌───▼────┐ ┌──▼────────┐ │ 策略端 │ │机器人端│ │模拟端 │ │ Web 前端 │ │Policy │ │ ROS │ │ SimBot │ │ 可视化 │ └────────┘ └────────┘ └────────┘ └───────────┘ ``` ## 目录结构 ``` multibot_nav_system/ ├── README.md # 项目说明文档 ├── server_main.py # 服务端主程序入口 ├── common/ # 通信协议定义 │ └── communication_basic.py ├── data/ # 数据文件 │ ├── discret_image.py # 地图离散化工具 │ ├── map_background.png # 地图背景 │ ├── map_obstacles.yaml # 障碍物地图信息 │ ├── map_obstacles.pgm # 障碍物地图 │ └── map_graph.yaml # 节点地图 ├── doc/ # 文档目录 │ ├── 规划草稿.md │ ├── TCP通信协议说明.md │ └── web_api接口说明.md ├── log/ # 日志目录 ├── policy_client/ # 策略端 │ ├── policy_client_.py # 策略端通信类 │ └── pursuer_policy_main.py # DRL 追捕策略主程序 ├── pursuer_policy/ # DRL 策略模块 │ ├── drl_policy_driver.py # DRL 策略驱动 │ ├── model.py # 神经网络模型 │ ├── parameter.py # 参数配置 │ └── model/pursuer_model/ # 训练好的模型 │ └── policy.pth ├── robot_client/ # 机器人端 │ └── simulate_robot_client.py # 模拟机器人客户端 ├── ros_client/ # ROS 客户端(真实机器人) │ ├── ros1_robot_client_tcp.py # ROS1 TCP 通信客户端 │ └── detect_and_measure.py # 目标检测节点 ├── server/ # 服务端模块 │ ├── map_manager.py # 地图管理 │ ├── server_cls.py # 服务端核心类 │ ├── logger.py # 日志工具 │ ├── logserver.py # 日志服务器 │ └── map_manager_config.yaml # 地图管理配置 └── web/ # Web 前端 ├── backend_api.py # 后端 API ├── index.html # 主页面 ├── js/ # JavaScript 文件 └── style/ # CSS 样式文件 ``` ## 快速开始 ### 环境要求 - Python 3.7+ - ROS Noetic (可选,用于真实机器人) - 必要的 Python 依赖 ### 安装依赖 ```bash pip install numpy opencv-python flask flask-cors torch torchvision networkx pyyaml ``` ### 运行系统 #### 1. 启动服务端 ```bash python server_main.py ``` 服务端将监听 `localhost:7689`,Web 界面可访问 `http://localhost:5000` #### 2. 启动策略端 ```bash python policy_client/pursuer_policy_main.py ``` #### 3. 启动模拟机器人(可选) ```bash python robot_client/simulate_robot_client.py ``` #### 4. 启动 ROS 机器人(可选) 在 ROS 环境中: ```bash roslaunch multibot_nav_system robot_client.launch ``` 或直接运行节点: ```bash rosrun multibot_nav_system ros1_robot_client_tcp.py _robot_name:=robot_0 ``` ### 使用批处理脚本 项目提供了便捷的批处理脚本: - `simlaunch.bat` - 启动模拟环境(服务端 + 2个模拟机器人 + 策略端) - `simrestart.bat` - 重启模拟环境 - `simstop.bat` - 停止模拟环境 ## 功能说明 ### DRL 追捕策略 系统使用深度强化学习策略进行追捕,支持: - **多追捕者协同**:支持 2 个追捕者协同追捕 - **多逃逸者**:支持任意数量的逃逸者(t, t1, t2, ...) - **信念估计**:基于时间步和图距离的逃逸者位置估计 - **视野计算**:每个追捕者拥有视野范围,用于信念区域剔除 - **预测机制**:预测未来 3 步,提升追捕连续性 ### 通信协议 系统使用自定义 TCP 通信协议,支持: - **注册机制**:机器人端和策略端注册到服务端 - **心跳检测**:定期发送心跳包保持连接 - **数据格式**:支持多种数据格式(P-位姿, N-节点, L-邻域, V-可见性, VN-可见节点) - **错误处理**:完善的错误处理和确认机制 详细协议说明请参考 [TCP通信协议说明.md](doc/TCP通信协议说明.md) ### Web API 提供完整的 HTTP API 用于 Web 界面: - 位置查询 - 客户端管理 - 中继控制 - 日志回放 - 地图数据获取 详细 API 说明请参考 [web_api接口说明.md](doc/web_api接口说明.md) ## 配置说明 ### 地图管理配置 `server/map_manager_config.yaml`: ```yaml map_paths: background_map: "../data/map_background.png" obstacles_map: yaml: "../data/map_obstacles.yaml" pgm: "../data/map_obstacles.pgm" node_map: yaml: "../data/map_graph.yaml" visibility_thresholds: obstacle_visibility_distance: 10.0 # 障碍物地图可见距离阈值 node_visibility_distance: 5 # 节点地图可见距离阈值 fov_parameters: angle: 120.0 # 视野角度(度) max_distance: 20.0 # 最大视野距离(米) scan_points: 100 # 激光雷达扫描点数 ``` ### DRL 策略参数 `pursuer_policy/parameter.py`: ```python EMBEDDING_DIM = 128 # 嵌入维度 K_SIZE = 9 # 邻居节点数量 N_ROBOTS = 2 # 追捕者数量 INPUT_DIM = N_ROBOTS + 2 # 输入维度 ``` ## 日志系统 系统自动记录所有通信和操作日志: - 日志文件:`log/server_YYYYMMDD_HHMMSS.log` - 日志内容:通信记录、位置更新、策略数据等 - 日志回放:通过 Web 界面进行日志回放 ## 开发说明 ### 添加新的策略 1. 在 `policy_client/` 目录创建新的策略主程序 2. 继承 `PolicyClient` 类 3. 实现 `on_status()` 和 `on_map()` 回调 4. 使用 `send_strategy()` 发送策略数据 ### 添加新的地图 1. 准备地图文件: - 障碍物地图(PGM + YAML) - 背景图片(PNG) 2. 运行 `data/discret_image.py` 生成节点地图 3. 更新 `server/map_manager_config.yaml` 中的路径 ### 添加新的消息类型 1. 在 `common/communication_basic.py` 中添加 `MessageType` 2. 在各端的 `ProtocolHandler` 中添加处理方法 3. 更新序列化和反序列化逻辑 ## 故障排除 ### 常见问题 1. **连接失败** - 检查服务端是否正常运行 - 检查端口 7689 是否被占用 - 检查防火墙设置 2. **地图加载失败** - 检查地图文件路径是否正确 - 检查地图文件格式是否正确 - 查看 `map_manager_config.yaml` 配置 3. **策略不生效** - 检查 Web 界面中继开关是否开启 - 检查策略端是否正常运行 - 查看日志文件中的错误信息 4. **ROS 机器人无响应** - 检查 ROS 环境是否正确配置 - 检查 TF 树是否正常 - 检查 `move_base` 是否正常运行 ## 贡献指南 欢迎提交 Issue 和 Pull Request! ## 许可证 本项目仅供学习和研究使用。 ## 联系方式 如有问题,请通过 GitHub Issues 联系。