腿足机器人之十三-强化学习PPO算法
对于复杂地形适应性(如楼梯、碎石路),传统的腿足机器人采用基于模型的控制器,该方法依赖精确动力学建模(如 ZMP 控制),存在参数调优困难以及环境扰动鲁棒性差,而采用端到端的强化学习方法,则将建模的任务交给了强化学习模型自主构建,这增加了模型对环境变化的自适应性。
腿足机器人位姿常用强化学习算法
PPO(Proximal Policy Optimization)算法稳定性强,适合大多数的仿真环境,如MuJoco/Isaac Gym,是初上手的首选,SAC(Soft Actor-Critic )算法在需要高效探索或真实机器人部署(样本成本高)时更优,际工程中,PPO+SAC 组合(如 PPO 微调 + SAC 迁移)已成为提升鲁棒性的常见方案。
-
PPO
- 核心特点:
- On-policy:依赖当前策略生成的数据,更新后数据即失效
- 信任域约束:通过剪切目标函数(Clipped Surrogate Objective)限制策略更新幅度
- 稳定性强:适合高维状态和动作空间,是机器人控制的基准算法
- 适用场景:
- 仿真环境中的行走、跑步等复杂运动(如 MuJoCo Humanoid)
- 需要平衡探索与利用的任务
- 优势:
- 超参数鲁棒性高,易于实现和调试
- 核心特点:
-
SAC(Soft Actor-Critic)
- 核心特点:
- Off-policy:可复用历史数据,样本效率高
- 最大熵优化:最大化策略熵以鼓励探索,适合复杂环境
- 双 Q 网络:减少价值函数估计偏差
- 适用场景:
- 需要高效探索的连续控制(如机械臂操作、崎岖地形行走)
- 对实时性要求较低但需高精度的任务
- 优势:
- 在 DeepMind 的《Learning to Walk in the Real World》等实际机器人项目中表现优异
- 对高维动作空间(如多关节协同)的适应性优于 PPO
- 核心特点:
算法 | 收敛速度 | 最终性能 | 超参数敏感性 | 代码复杂度 |
---|---|---|---|---|
PPO | 中等 | 高 | 低 | 简单 |
SAC | 快 | 极高 | 中等 | 中等 |
PPO 通过替代目标函数的多轮优化和隐式信任域约束,解决了传统策略梯度方法样本效率低和 TRPO 实现复杂的问题,成为强化学习领域平衡性能与实用性的里程碑式算法。其设计思想被后续算法(如 PPO-Clip/PPO-Penalty)广泛继承,并成为机器人控制、游戏 AI 等场景的默认选择。
PPO算法核心原理
该算法是OpenAI在2017年发布的,OpenAI一直想做的是AGI,chatGPT是AGI决策中枢,而机器人是AGI在现实世界交互的核心,而机器人运动、姿态控制室交互中的核心。未来会有越来越多的AGI公司将研究机器人,也会有越来越多的机器人公司研究AGI。
为了便于理解,前面介绍过运动学、逆运动学、概率学介绍过腿足机器人的状态空间和动作空间,这里在罗列一下:
- 状态空间(State),下面公式中为 s t s_t st
- 本体感知:关节角度 / 速度、躯干姿态(欧拉角 / 四元数)、足端触力等
- 外部感知:IMU 数据、地形高度图(RGB-D 相机输入需 CNN 编码)
- 在上一篇文章中,还提到了Helix的VLA,就是加了txt输入,其实就是audio,和视觉类似,听觉/语言采用Embedding的方式输入,这里只是展示PPO算法核心原理不赘述。
- 动作空间(Action),下面公式中为 a t a_t at
- 电机位置 / 力矩控制(PD 控制器辅助平滑)
- 混合动作:步态相位参数 + 关节目标角度(如 MIT Cheetah 的 RL+MPC 架构)
PPO方法的核心公式是:
g ^ = E t [ ∇ θ log π θ ( a t ∣ s t ) ⋅ A ^ t ] ( 1 ) \hat g = \mathbb E_t \Big [ \nabla_{\theta}\log \pi_{\theta}(a_t| s_t) \cdot \hat A_t\Big ] (1) g^=Et[∇θlogπθ(at∣st)⋅A^t](1)
其符号含义如下:
- g ^ \hat g g^,表示的是估计的梯度(g表gradient),上三角表示估计
- θ \theta θ,表示的是参数集,因为我们这里采用的DRL(可参考前两篇博客),所以这里的参数集就是一个深度神经网络的参数集,PPO的算法就是使得神经网络的参数( θ \theta θ)最优(机器人行走、跑、操作物体等)。
- π θ \pi_{\theta} πθ,策略网络(这里就是神经网络), π θ ( a t ∣ s t ) \pi_{\theta}(a_t|s_t) πθ(at∣st)表示的是神经网络输入状态 s t s_t st(如关节角度、躯干姿态),输出动作 a t a_t a