从零跑通 PPO 双足机器人

从零跑通 PPO 双足机器人:我的完整实战笔记

一、项目概况

项目地址:https://github.com/jianglanwei/PPO-OpenAI-Gym

核心算法:PPO(Proximal Policy Optimization)

训练环境:Gymnasium(原 OpenAI Gym)的 BipedalWalker-v3

框架:PyTorch + wandb 可视化

最终效果:训练 960 轮,平均奖励 310.37,超过通关阈值 300 分,机器人能够稳定行走。

二、环境搭建(Windows 10/11)

  1. 下载与解压

    从 GitHub 下载 ZIP 包,解压到 C:\Users\你的用户名\PPO-OpenAI-Gym-main。

  2. 创建 Conda 环境(可选)

    cmd

    conda create -n gym python=3.10

    conda activate gym

  3. 安装依赖

    关键坑:Windows 下 box2d 容易编译失败,因此先装 swig。

cmd

pip install swig

pip install -r requirements.txt

如果还是报错,改用全套手动安装:

cmd

pip install torch gymnasium box2d-py numpy matplotlib wandb onnx onnxruntime

pip install gymnasiumbox2d

  1. 检查预训练权重

作者提供了训练好的模型,位于 policy_ckpt/BipedalWalker-v3/06-05-25_03_09_03/epoch960_reward310.37.pt。确认存在后,直接跳过训练,进入可视化。

三、运行可视化

执行以下命令,会弹出游戏窗口:

cmd

python play.py --env BipedalWalker-v3 --run 06-05-25_03_09_03 --render_mode human

如果窗口黑屏或报错(无显示驱动),改用生成 GIF:

cmd

python play.py --env BipedalWalker-v3 --run 06-05-25_03_09_03 --render_mode rgb_array

成功后,你将看到一个两条腿的机器人在崎岖地形上摇摇晃晃向前走,并且多数时候只有一条腿着地------这是正常步态。

四、为什么机器人只有一条腿着地?

这并非缺陷,而是双足行走的物理最优解。

在 BipedalWalker 中,机器人有两个髋关节和两个膝关节,共 4 个连续动作(力矩)。地形的起伏使单脚支撑相更节能,且能维持前进速度。

训练过程中,奖励函数鼓励 "向前移动 + 保持平衡"。PPO 策略学到的步态类似于人类的"交替迈步",自然出现单腿承重、另一条腿摆动的相位差。

如果你仔细观察,它并非始终单腿,而是在迈步时短暂切换支撑腿,形成动态稳定。这正是强化学习学到的类生物步态。

五、核心算法详解:为什么 PPO 能成功?

  1. PPO 的设计哲学
    背景:策略梯度方法(如 REINFORCE)更新步长难控制,过大导致崩溃,过小导致训练缓慢。

PPO 核心:通过裁剪(Clipping)目标函数,限制新旧策略的比率 r_t(θ) = π_θ(a|s) / π_old(a|s) 在 1-ε, 1+ε(通常 ε=0.2),从而温和地更新策略,既不激进也不保守。

  1. 具体目标函数

当优势 A_t > 0(动作比平均好),鼓励增加该动作概率,但被截断防止过度。

当 A_t < 0,减少概率,也受截断保护。

  1. 连续动作的处理
    Actor 网络输出高斯分布的均值 μ 和标准差 σ,动作通过重参数化采样:a = μ + σ * noise。

Critic 网络估计状态价值 V(s),用于计算优势函数(GAE)。

  1. 为什么成功?
    样本效率:PPO 是 on-policy,但通过多个 epoch 的小批量更新,比 A3C 更稳定。

超参数鲁棒性:相比 TRPO,PPO 无需复杂的共轭梯度,实现简单且效果相当。

连续控制适配:高斯策略天然适合力矩输出,且 Clip 机制避免策略突变破坏物理模拟。

六、与其他主流算法的差距

算法 动作空间 稳定性 样本效率 实现复杂度 适用场景

DQN 离散 较好 中等 简单 Atari, 离散控制

A3C 连续(通过高斯) 较差(异步抖动) 中等 中等 并行训练

TRPO 连续 高(信赖域) 高 复杂(共轭梯度) 理论优雅

PPO 连续 高 高 简单 工业界首选

SAC 连续 高 很高(离线) 中等 需要最大熵探索

DQN 无法直接处理连续动作,需离散化,丢失精度。

A3C 因异步更新,训练不稳定,且不保证收敛。

TRPO 理论更严谨,但实现复杂,调试困难。

SAC 在某些任务上比 PPO 更好,但它需要离线缓冲,且超参数调优更敏感。本项目选择 PPO 是因为其稳定 + 简单 + 高效。

七、项目各文件夹含义

text

PPO-OpenAI-Gym-main/

├── config/ # 超参数配置文件(YAML)

│ ├── BipedalWalker-v3.yaml # 双足行走的参数(lr=3e-4, clip=0.2, gamma=0.99...)

│ └── Humanoid-v5.yaml # 更复杂的人形机器人

├── policy_ckpt/ # 存储训练好的模型权重

│ └── BipedalWalker-v3/

│ └── 06-05-25_03_09_03/ # 按时间戳命名的运行

│ ├── epoch960_reward310.37.pt # 检查点文件(PyTorch 状态字典)

│ └── ...(可能包含多个epoch)

├── module.py # 神经网络定义(Actor-Critic 网络)

│ # 包含 MLP 基类、策略网络(高斯输出)、价值网络

├── train.py # 训练主脚本(支持断点恢复)

├── play.py # 可视化脚本(加载权重并渲染)

├── export_onnx.py # 将模型导出为 ONNX 格式(部署用)

├── requirements.txt # 依赖列表

└── README.md # 项目说明

关键文件说明:

module.py:定义了 ActorCritic 类,包含 forward() 同时输出动作均值和状态值。

train.py:实现 PPO 训练循环,包括数据收集、优势计算、策略更新、记录 wandb。

play.py:使用 gymnasium.make() 创建环境,加载 .pt 文件,设置 render_mode,执行确定性策略。

八、Pygame 的作用与完成度

本项目使用 Gymnasium 的渲染后端,而 Gymnasium 在 Windows 下默认调用 pygame 进行 2D 渲染(Box2D 环境)。

是否完成:完全可用。执行 play.py 后,pygame 窗口正常弹出,显示地形、机器人和关节连接线。

注意:如果无桌面环境(如远程服务器),render_mode='human' 会失败,但 'rgb_array' 可生成图像序列,再合成 GIF,这部分也在 play.py 中实现。

九、我的实战心得

先跑通再读论文:以前我只看理论,这次直接上手,理解深了很多。

预训练模型是救命稻草:时间紧时,直接加载作者权重,观察效果,再反向推导训练参数。

调试技巧:遇到显示问题,立刻转 rgb_array;遇到安装错误,用 swig 前置安装。

十、总结

通过这个小项目,我不仅掌握了 PPO 的工程实现,更直观理解了连续动作空间的策略优化。面试时,我可以自信地说:

"我完整配置并运行了 OpenAI Gym 的 BipedalWalker 环境,使用 PPO 算法获得 310 分的通关成绩。我清楚 PPO 通过 Clip 机制稳定训练,对比 DQN 和 A3C 等算法,PPO 在连续控制任务中兼具简单性和高效性。项目代码结构清晰,支持 wandb 可视化和断点续训,具备实际工程价值。"

如果你也在准备面试,强烈推荐亲自跑一次,哪怕只跑通可视化。实践带来的底气,远胜过背一百道八股题。 祝所有读者都能拿到心仪 Offer!

附录:一键复现命令汇总(Windows)

cmd

git clone https://github.com/jianglanwei/PPO-OpenAI-Gym

cd PPO-OpenAI-Gym

pip install swig

pip install -r requirements.txt

python play.py --env BipedalWalker-v3 --run 06-05-25_03_09_03 --render_mode human

相关推荐
宏集科技工业物联网2 小时前
微型线性伺服执行器如何驱动人形机器人关节?从驱动原理到实际选型
经验分享·机器人·具身智能·人形机器人·线性伺服执行器
一知半解仙5 小时前
当机器人学会泛化,而我在写Java:一名后端开发者的2026年8月21日观察手记
java·开发语言·机器人
别动我齐刘海15 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
HBYKKJ19 小时前
格雷希尔GFL浮动组件:大范围浮动补偿赋能自动化产线高效柔性对接,兼容大部分对正场景,适配市面常见的机器人末端执行器与工装安装板
人工智能·机器人·自动化
恒锐丰小瑞19 小时前
率能SS6810H 32V/1A/双通道H桥驱动芯片,PWM电流控制与混合衰减模式,用于POS打印机/安防相机/机器人
嵌入式硬件·数码相机·机器人·硬件工程
thesky12345619 小时前
智能体面试准备(四十三):具身智能体与机器人实操——从 VLA 到 Sim2Real
机器人·导航·操作·具身智能·智能体·vla·视觉语言动作
恒锐丰小瑞21 小时前
率能SS6812T 40V/1A/双通道H桥驱动芯片,PWM电流控制与混合衰减模式(eTSSOP28),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·数码相机·机器人
猫先生Mr.Mao1 天前
具身智能语言规划之SayCan详解:让大模型“会说”,也让机器人“能做”
机器人·大语言模型·论文解读·具身智能·saycan
恒锐丰小瑞1 天前
率能SS6811H 38V/1.6A/双通道H桥驱动芯片,PWM控制接口与低功耗睡眠模式,用于舞台灯光/安防相机/机器人
单片机·嵌入式硬件·数码相机·机器人
cd_949217211 天前
现实版变形金刚落地!有怡科技发布可变形本质人形机器人T01
科技·机器人