目录

无人机强化学习仿真项目

本项目面向本地实验场景,提供一个用于密林导航任务的无人机仿真环境,以及围绕该环境构建的 PPO 训练、推理和统一评估工具。

项目当前包含以下能力:

  • 基础无人机仿真与键盘控制示例
  • 面向 PPO 的 TCP 仿真环境
  • 标准 PPO 基线算法
  • 状态自适应奖励 PPO
  • Rollout 级自适应奖励 PPO
  • 模型推理脚本
  • 多算法统一评估脚本

项目结构

simulator/
├─ simulator/
│  ├─ simulated.py
│  └─ simulated_ppo.py
├─ control_example/
│  └─ keyboard.py
├─ algorithms/
│  ├─ baseline/
│  │  ├─ ppo.py
│  │  └─ checkpoints/
│  ├─ adaptive/
│  │  ├─ ppo_adaptive_reward.py
│  │  └─ checkpoints/
│  └─ rollout_adaptive/
│     ├─ ppo_rollout_adaptive_reward.py
│     └─ checkpoints/
├─ inference/
│  └─ ppo_infer.py
├─ evaluation/
│  └─ compare_algorithms.py
├─ requirements.txt
└─ README.md

模块说明

simulator/simulated.py

基础仿真器,用于演示无人机的基本动力学、位置控制、速度控制和轨迹跟踪,更适合做控制逻辑观察与交互调试。

  • 控制协议:UDP 127.0.0.1:8765
  • 典型用途:手动操控、界面演示、控制策略联调

simulator/simulated_ppo.py

面向强化学习训练的环境服务。环境通过 TCP 暴露 resetstepstate 等接口,训练、推理和评估脚本均通过该服务与环境通信。

  • 默认地址:127.0.0.1:8770
  • 支持参数:--host--port--headless--regenerate-on-reset--forest-seed

algorithms/baseline/ppo.py

标准 PPO 基线版本,直接使用环境奖励进行训练。

  • 默认最新权重:algorithms/baseline/checkpoints/ppo_forest_latest.pt
  • 默认最佳权重:algorithms/baseline/checkpoints/ppo_forest_best.pt

algorithms/adaptive/ppo_adaptive_reward.py

状态自适应奖励 PPO。该版本会根据当前观测和历史动作动态调整导航、安全和平滑性相关奖励权重。

  • 默认最新权重:algorithms/adaptive/checkpoints/ppo_forest_adaptive_latest.pt
  • 默认最佳权重:algorithms/adaptive/checkpoints/ppo_forest_adaptive_best.pt

algorithms/rollout_adaptive/ppo_rollout_adaptive_reward.py

Rollout 级自适应奖励 PPO。该版本按整个 rollout 统计信息调整奖励权重,而不是逐步调整,适合与状态自适应版本做对照实验。

  • 默认最新权重:algorithms/rollout_adaptive/checkpoints/ppo_forest_rollout_adaptive_latest.pt
  • 默认最佳权重:algorithms/rollout_adaptive/checkpoints/ppo_forest_rollout_adaptive_best.pt

inference/ppo_infer.py

加载指定模型并在 PPO 环境中运行推理。

evaluation/compare_algorithms.py

对多个 PPO 变体进行统一评估,并输出对比指标;可选导出 JSON 结果。

环境要求

  • Python 3.10
  • 建议使用支持 CUDA 12.8 的 PyTorch 运行环境

安装依赖

推荐使用 conda 创建独立环境:

conda create -n drone-sim python=3.10 -y
conda activate drone-sim
pip install -r requirements.txt

requirements.txt 当前包含:

  • numpy>=1.24,<1.25
  • pygame>=2.5,<2.7
  • torch==2.7.1+cu128

快速开始

1. 启动基础仿真器

python simulator/simulated.py

另开一个终端运行键盘控制示例:

python control_example/keyboard.py

键盘控制说明:

  • W / S:前进 / 后退
  • A / D:左移 / 右移
  • R / F:上升 / 下降
  • Q / E:偏航左转 / 右转
  • H:悬停
  • C:圆轨迹飞行
  • G:飞到固定点
  • T:重置
  • ESC:退出

2. 启动 PPO 环境服务

python simulator/simulated_ppo.py

无界面模式:

python simulator/simulated_ppo.py --headless

3. 训练模型

训练标准 PPO:

python algorithms/baseline/ppo.py

训练状态自适应奖励 PPO:

python algorithms/adaptive/ppo_adaptive_reward.py

训练 Rollout 级自适应奖励 PPO:

python algorithms/rollout_adaptive/ppo_rollout_adaptive_reward.py

4. 运行推理

python inference/ppo_infer.py --model-path algorithms/baseline/checkpoints/ppo_forest_best.pt
python inference/ppo_infer.py --model-path algorithms/adaptive/checkpoints/ppo_forest_adaptive_best.pt
python inference/ppo_infer.py --model-path algorithms/rollout_adaptive/checkpoints/ppo_forest_rollout_adaptive_best.pt

5. 统一评估

比较基线 PPO 与状态自适应 PPO:

python evaluation/compare_algorithms.py --episodes 20

比较三种算法:

python evaluation/compare_algorithms.py --episodes 20 --include-rollout-adaptive

评估指标

统一评估脚本默认输出以下指标:

  • mean_return
  • std_return
  • success_rate
  • collision_rate
  • timeout_rate
  • mean_episode_length
  • median_episode_length

训练日志

三个训练脚本都会输出每次 update 的核心训练信息,通常包括:

  • recent_return
  • rollout_return
  • episodes
  • success_rate
  • collision_rate
  • timeout_rate
  • other_rate
  • best_episode
  • kl

自适应奖励版本还会额外输出当前奖励权重及适配器相关信息,便于分析训练动态。

推荐使用流程

控制演示

conda activate drone-sim
python simulator/simulated.py
python control_example/keyboard.py

强化学习训练

conda activate drone-sim
python simulator/simulated_ppo.py
python algorithms/baseline/ppo.py

也可以将最后一步替换为:

python algorithms/adaptive/ppo_adaptive_reward.py
python algorithms/rollout_adaptive/ppo_rollout_adaptive_reward.py

推理或评估

conda activate drone-sim
python simulator/simulated_ppo.py
python inference/ppo_infer.py --model-path <checkpoint>

或:

python evaluation/compare_algorithms.py --episodes 20

常用命令

指定端口启动 PPO 环境:

python simulator/simulated_ppo.py --port 8771

在指定端口训练 Rollout 级自适应奖励 PPO:

python algorithms/rollout_adaptive/ppo_rollout_adaptive_reward.py --port 8771 --total-updates 1200 --rollout-steps 1280

导出统一评估结果到 JSON:

python evaluation/compare_algorithms.py --episodes 20 --include-rollout-adaptive --json-out result.json

注意事项

  • 训练、推理和评估前,必须先启动 simulator/simulated_ppo.py
  • 如果修改了环境端口,需要同时在训练、推理或评估脚本中通过 --port 保持一致
  • 图形界面依赖 pygame,服务器或远程环境建议使用 --headless
  • 训练初期出现频繁碰撞通常属于正常现象
  • Rollout 级自适应版本更适合做对照实验,建议与基线或状态自适应版本分开分析

后续改进建议

如果后续准备把项目开放给更多协作者,建议继续补充以下内容:

  • 数据流或系统架构图
  • 各训练脚本的关键超参数说明
  • 实验结果示例与可复现配置
  • 常见故障排查说明
  • License 与引用方式
关于
16.9 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号