腿足机器人之十三-强化学习PPO算法

腿足机器人之十三-强化学习PPO算法

    • 腿足机器人位姿常用强化学习算法
    • PPO算法核心原理
    • PPO算法的创新设计
    • 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πθ(atst)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) πθ(atst)表示的是神经网络输入状态 s t s_t st(如关节角度、躯干姿态),输出动作 a t a_t at (如关节目标角度)的概率。
  • log ⁡ π θ ( a t ∣ s t ) \log \pi_{\theta}(a_t|s_t) logπθ(atst),取对数的概率,表示是DRL模型(从PPO的角度这是一个策略)选择 a t a_t at动作的“偏好程度”。
  • A ^ t \hat A_t A^t,优势函数(Advantage Function) 的估计值,衡量在状态 s t s_t st下选择动作 a t a_t at相比平均表现的优劣。详细后面再展开
  • ∇ θ \nabla_{\theta} θ,表示PPO策略参数(就是DRL模型参数) θ \theta θ的梯度算子,其作用是指示如何调整参数 θ \theta θ以优化目标函数。 θ k + 1 = θ k + α ∇ θ ( g ^ ) \theta_{k+1} = \theta_k + \alpha \nabla_{\theta}(\hat g) θk+1=θk+αθ(g^)
  • E t \mathbb E_t Et是对时间步 t t t的轨迹数据求期望(实际中用经验平均代替),常常通过蒙特卡洛采样近似计算。

整个公式的意义是通过调整参数 θ \theta θ,使得高优势 A ^ t > 0 \hat A_t > 0 A^t>0的动作概率增加(可理解为走的更稳、更快、更节能),低优势 A ^ t < 0 \hat A_t <0 A^t<0的动作概率减少。

PPO算法的创新设计

替代目标函数和多轮次优化是PPO算法的创新点,大大提升了训练的效率和稳定性,二者算是协同不可分割。

  1. 替代目标函数(Surrogate Objective)
    采用CLIP机制来改进目标函数 g ^ \hat g g^
    L C L I P ( θ ) = E t [ min ⁡ ( r t ( θ ) A t , 1 − ϵ , 1 + ϵ ) A t ] ( 2 ) L^{CLIP}(\theta) = \mathbb E_t \Big [ \min(r_t(\theta)A_t, 1 - \epsilon, 1 + \epsilon)A_t\Big ] (2) LCLIP(θ)=Et[min(rt(θ)At,1ϵ,1+ϵ)At]2
  • r t ( θ ) = π θ ( a ∣ s ) π θ o l d ( a ∣ s ) r_t(\theta) = \frac{\pi_{\theta(a|s)}}{\pi_{\theta_{old}}(a|s)} rt(θ)=πθold(as)πθ(as),重要性采样比
  • ϵ \epsilon ϵ是超参数(通常取0.1~0.3),限制策略更新幅度。

2.多轮次优化指的是数据复用
其复用流程如下:

采样 N 步交互数据 → 2. 计算优势函数(GAE) → 3. 执行 K 次 minibatch 梯度更新(K=3~10)

PPO算法典型流程

  1. 数据收集:
    启动个N并行环境,每个环境运行T步,收集NT步数据。如训练腿足机器人走完10米这个任务,在NT步数据中有走完10米的,有走半步就倒的,有绕圈走完的,有很快走完的,等等
    记录状态、动作、奖励、值函数估计 V ( s ) V(s) V(s)
  2. 优势计算:
    使用截断 GAE 计算每步的优势值 A ^ t \hat A_t A^t
  3. 损失构建:
    对NT步数据计算组合损失 L C L I P + V F + S L^{CLIP+VF+S} LCLIP+VF+S
  4. 优化更新:
    执行多轮次(如 K=3~10)小批量随机梯度上升。

在数据收集的时候,在一个环境中,进行一步之后,就得到 s 1 ∣ s 0 , a 0 {s_1|s_0,a_0} s1s0,a0,这个时候是可以计算到一个梯度的,但是并没有完成走完10米这个任务,所以这个时候并不更新模型参数 θ \theta θ,然后再 s 2 ∣ s 1 , a 1 {s_2|s_1,a_1} s2s1,a1,这个时候同样可以得到一个梯度,可以知道的是这两个采样,都是基于就的策略 π θ o l d \pi_{\theta_{old}} πθold的,所以公式2中要约束新的策略不能偏离就的策略太远。同时通过并行采集和多轮次更新,充分利用数据,CLIP 机制和熵奖励共同避免策略崩溃,这样训练的效率就会高很多。

优化更新,如k取3时,当第一个3来的时候,梯度更新依赖的是 π θ o l d ( a ∣ s ) \pi_{\theta_{old}}(a|s) πθold(as),然后当k==6时,需要再次更新梯度以update策略参数,但是此时并没有使用第一个3更新之后的策略参数取采样(比如走完10米采样),使用的更新梯度的采样还是最早的 π θ o l d ( a ∣ s ) \pi_{\theta_{old}}(a|s) πθold(as)策略,所以前面需要CLIP,以约束偏离程度。

优势函数

优势函数(Advantage Function) 用于衡量在状态 s t s_t st下选择动作 a t a_t at的优劣,定义为:
A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) A(s_t, a_t) = Q(s_t, a_t) - V(s_t) A(st,at)=Q(st,at)V(st)
其中 Q ( s t , a t ) Q(s_t, a_t) Q(st,at)是动作价值函数, V ( s t ) V(s_t) V(st)是状态价值函数,广义优势估计(Generalized Advantage Estimation, GAE)通过多步回报平衡偏差与方差,其原始形式为:
A ^ t G A E ( γ , λ ) = ∑ k = 0 + ∞ ( γ λ ) k δ t + k \hat A_t^{GAE(\gamma,\lambda)} = \sum \limits_{k=0}^{+\infty}(\gamma \lambda)^k \delta_{t+k} A^tGAE(γ,λ)=k=0+(γλ)kδt+k
其中 δ t = r t + γ V ( s t + 1 ] ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1]}) -V(s_t) δt=rt+γV(st+1])V(st)是单步时序差分误差。 r t r_t rt是即时奖励。 γ V ( s t + 1 ] ) \gamma V(s_{t+1]}) γV(st+1])下一状态的折扣价值, − V ( s t ) -V(s_t) V(st)是当前状态价值的负值。

核心是通过加权多步时序差分误差,平衡短期与长期回报的贡献。公式推导表明,当 λ = 1 \lambda =1 λ=1时,截断 GAE 退化为有限步数的蒙特卡洛估计,确保了计算可行性和理论一致性。实际应用中,调整 λ \lambda λ和轨迹T长度可灵活控制策略优化的稳定性与效率。

在双足机器人中, V ( s ) V(s) V(s)表示从状态 出发,遵循当前策略 的预期累积折扣回报,可以通过神经网络(Critic 网络)预测当前状态的 “未来潜力”。在PPO中, Q ( s , a ) Q(s,a) Q(s,a)不直接由网络预测,而是通过使用Critic 网络预测下一状态价值隐式步骤计算。

下面是仿真环境训练的截图。
请添加图片描述

总的来说,PPO 凭借其稳定性、高样本效率和易用性,已成为腿足机器人运动控制的主流算法。通过合理的奖励函数设计和状态空间表征,PPO 可实现复杂地形下的自适应运动。未来结合 Sim2Real 技术和混合控制架构,将加速从仿真到实际机器人的部署进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

平滑升级旧版nginx,支持lua动态代理转发多个云平台VNC画面

nginx是部署在华为欧拉的docker容器中&#xff0c;版本是2203sp1.x86_64 查看旧版nginx的版本与编译配置信息&#xff1a; nginx -Vnginx version: nginx/1.24.0 built by gcc 10.3.1 (GCC) built with OpenSSL 1.1.1wa 16 Nov 2023 TLS SNI support enabled configure argum…

硬件工程师入门教程

1.欧姆定律 测电压并联使用万用表测电流串联使用万用表&#xff0c;红入黑出 2.电阻的阻值识别 直插电阻 贴片电阻 3.电阻的功率 4.电阻的限流作用 限流电阻阻值的计算 单位换算关系 5.电阻的分流功能 6.电阻的分压功能 7.电容 电容简单来说是两块不连通的导体加上中间的绝…

【Pytest】setup和teardown的四个级别

文章目录 1.setup和teardown简介2.模块级别的 setup 和 teardown3.函数级别的 setup 和 teardown4.方法级别的 setup 和 teardown5.类级别的 setup 和 teardown 1.setup和teardown简介 在 pytest 中&#xff0c;setup 和 teardown 用于在测试用例执行前后执行一些准备和清理操…

【QT】QLinearGradient 线性渐变类简单使用教程

目录 0.简介 1&#xff09;qtDesigner中 2&#xff09;实际执行 1.功能详述 3.举一反三的样式 0.简介 QLinearGradient 是 Qt 框架中的一个类&#xff0c;用于定义线性渐变效果&#xff08;通过样式表设置&#xff09;。它可以用来填充形状、背景或其他图形元素&#xff0…

使用自动化运维工具 Ansible 集中化管理服务器

一、概述 Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具 官方网站:https://www.ansible.com/ Ansible 成立于 2013 年,总部设在北卡罗来纳州达勒姆,联合创始人 ad Ziouani 和高级副总裁 Todd Barr都是红帽的老员工。Ansible 旗下的开源软件 Ansible 十分…

蓝桥杯 之 填空题-位运算与循环

文章目录 循环握手问题门牌制作-循环小球反弹幸运数艺术与篮球跑步 位运算3个1美丽的2024 位运算 可以关注这个Lowbit(x) 如何判断最低位是否是1&#xff1f; num&1 1就说明num最低位是1 循环 循环 握手问题 握手问题 思路分析&#xff1a; 可以直接计算出来&#xff…

HTTP学习——————(四)TLS等加密算法

前文学习&#xff1a; 一、二、三 学习来源网站 &#xff1a; 极客时间 TLS 目的&#xff1a;身份验证、保密性、完整性 解决问题&#xff1a; Record记录协议——对称加密 Handshake握手协议———1.验证通讯双方身份 2.交换加解密安全套件 3.协商加密参数 有密钥交换算法…

.bash_profile一些笔记

下方ffmpeg目录为/Users/sin/Downloads/kakaaaaa/bin/ffmpeg 第一种方法冒号后拼接路径 第二种方法冒号后拼接变量 第三种方法,依旧用PATH变量拼接,更清晰美观而已 export的作用 权限问题&#xff1a; 确保 /Users/sin/Downloads/kaka/bin/ffmpeg 有可执行权限&#xff08;通…

[密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践

一、代码运行结果 二、国密算法与密钥协商背景 2.1 什么是国密算法? 国密算法是由中国国家密码管理局制定的商用密码标准,包括: SM2:椭圆曲线公钥密码算法(非对称加密/签名/密钥协商)SM3:密码杂凑算法(哈希)SM4:分组密码算法(对称加密)2.2 密钥协商的意义 在安全…

mybatis 细节(${ ..}和#{..},resultType 和 resultMap的区别,别名的使用,Mapper 代理模式)

${..}和#{..} 占位符 #{..} #{}实现的是向prepareStatement中的预处理语句中设置参数值&#xff0c;sql语句中#{}表示一个占位符即?。 <!-- 根据id查询用户信息 --> <select id"findUserById" parameterType"int" resultType"user"&g…

【无标题】ABP更换MySql数据库

原因&#xff1a;ABP默认使用的数据库是sqlServer&#xff0c;本地没有安装sqlServer&#xff0c;安装的是mysql&#xff0c;需要更换数据库 ABP版本&#xff1a;9.0 此处以官网TodoApp项目为例 打开EntityFrameworkCore程序集&#xff0c;可以看到默认使用的是sqlServer&…

Oracle 查询表空间使用情况及收缩数据文件

本文介绍Oracle收缩数据文件的相关操作&#xff0c;运维工作中有时会需要通过收缩数据文件来释放磁盘空间。 数据文件初始化方式&#xff1a; 1.我们创建表空间一般有两种方式初始化其数据文件&#xff0c;即指定初始大小为32G&#xff08;很大的值&#xff09;或指定初始大小为…

执行yum -y install npt 报错解决

Cannot find a valid baseurl for repo: base/7/x86_64 解决办法 一、检查网络连接 确保你的服务器可以访问互联网。你可以使用 ping 命令来测试&#xff1a; ping www.baidu.com 若能访问外网&#xff0c;则网络没问题&#xff0c;否则检查网络 二、修改CentOS-Base.rep…

java后端开发day23--面向对象进阶(四)--抽象类、接口、内部类

&#xff08;以下内容全部来自上述课程&#xff09; 1.抽象类 父类定义抽象方法后&#xff0c;子类的方法就必须重写&#xff0c;抽象方法在的类就是抽象类。 1.定义 抽象方法 将共性的行为&#xff08;方法&#xff09;抽取到父类之后。由于每一个子类执行的内容是不一样…

歌曲分类和流行度预测

1. 项目介绍 本项目从kaggle平台上下载了数据集&#xff0c;该数据集包含了3万多首来自Spotify API 的歌曲&#xff0c;共有23个特征。首先对数据集进行预处理&#xff0c;如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析&#xff0c;观察各变量的分布情况&…

梳理vite构建vue项目可选的配置和组件

梳理vite构建vue项目可选的配置和组件 &#x1f4a1; 列举通过vite构建vue3项目时可能会使用到的配置和组件&#xff0c;在搭建项目初期可以提前规划&#xff0c;提高开发效率&#xff0c;后续会不断扩展… unplugin-vue-router 可以监听views文件夹中的文件变化&#xff0c…

密码学(哈希函数)

4.1 Hash函数与数据完整性 数据完整性&#xff1a; 检测传输消息&#xff08;加密或未加密&#xff09;的修改。 密码学Hash函数&#xff1a; 构建某些数据的简短“指纹”&#xff1b;如果数据被篡改&#xff0c;则该指纹&#xff08;以高概率&#xff09;不再有效。Hash函数…

ESP32-S3 42引脚 语音控制模块、设备运转展示 GOOUUU TECH 果云科技S3-N16R8 控制舵机 LED开关 直流电机

最近还是想玩了下esp32&#xff0c;基于原来的开发板&#xff0c;看见佬做了一个语音识别的项目&#xff0c;通过这个语音识别可以控制LED开关和直流电机这些&#xff0c;详情可见视频&#xff08;推荐&#xff09;具体硬件就在下方。 信泰微】ESP32-S3 42引脚 语音控制模块、…

《Qt窗口动画实战:Qt实现呼吸灯效果》

Qt窗口动画实战&#xff1a;Qt实现呼吸灯效果 在嵌入式设备或桌面应用中&#xff0c;呼吸灯效果是一种常见且优雅的UI动画&#xff0c;常用于指示系统状态或吸引用户注意。本文将介绍如何使用Qt动画框架实现平滑的呼吸灯效果。 一、实现原理 利用Qt自带的动画框架来实现&…

数据库测试

TPCH 22条SQL语句分析 - xibuhaohao - 博客园 TPCH模型规范、测试说明及22条语句 - zhjh256 - 博客园 TPC-DS 性能比较&#xff1a;TiDB 与 Impala-PingCAP | 平凯星辰 揭秘Oracle TPC-H性能优化&#xff1a;如何提升数据库查询速度&#xff0c;揭秘实战技巧与挑战 引言 T…