rsl_rl机器人强化学习框架实战!从零吃透rsl_rl框架——核心原理与PPO算法实现详解(算法解析+框架梳理+源码精读)

前言:此文将对RSL_RL进行详细讲解,绝对干货,大家可以放心食用;可以结合之前的RL_gym文章去看。

为什么写这篇文章?首先对于这个项目来说,目前网上很难找到能讲明白的,其次,兼顾打工生活&知识分享需要些动力;因此,我决定推出这一篇付费文章,从纯小白视角出发,深入剖析该项目(大佬们请轻喷)

这篇文章以“RSL-RL 中 PPO 算法的完整实现流程与模块分工”为主题详细拆解RSL_RL,希望能为读者解开长期困扰的难题,带来启发与收获。 

结合宇树rl_gym去看效果更好:

宇树G1 | 训练框架 + 代码剖析 + 步态设计 + 奖励函数,附调参秘籍

rsl_rl开源项目介绍

  • rsl_rl 是一个专为机器人强化学习设计的高效、模块化的开源库。它由苏黎世联邦理工学院的 RSL开发,主要用于在仿真和现实机器人上训练和部署基于策略梯度的强化学习算法,尤其适用于四足机器人等高自由度系统。

RSL_RL 库已成为机器人强化学习领域重要的基础框架之一。 除宇树 G1 的开源项目外,众多知名项目都采用了该库:

  • 中国电信人工智能研究院的 PBHC 项目:利用 RSL_RL 训练 G1 执行复杂的功夫动作。

  • H2O 与 OmniH2O 项目:实现了基于 RSL_RL 的 G1 机器人遥操作。

  • 知名项目 ASAP:其核心算法实现也借鉴了 RSL_RL。

如今,越来越多的开发者基于 RSL_RL 这一强大平台进行机器人开发,催生了大量富有创意的应用。

本篇文章将从以“RSL-RL 中 PPO 算法的完整实现流程与模块分工”为主题,带你全面深入理解 RSL_RL 框架,帮助你真正吃透 RSL_RL 的核心结构和使用方法。

开源项目的获取 && 配置环境

开源地址:https://github.com/leggedrobotics/rsl_rl

项目获取:git clone https://github.com/leggedrobotics/rsl_rl

cd rsl_rl

pip install -e .

项目架构(以 G1 为例)

RSL-RL 中 PPO 算法的完整实现流程与模块分工 /


1.环境接口层

主要是在 RL_gym的 g1_env.py 实现;

以下这三个都是抽象方法,具体的实现是在 unitree_RL_gym 中

  • get_observations:返回当前所有环境的观测和额外信息

    • 返回:观测值 和额外信息(特殊观测、日志....)

    • 作用:供算法/网络获取当前状态

  • reset:重置所有环境,返回初始观测和额外信息

    • 返回:重置后的观测和额外信息

    • 作用:在 episode 结束或初始化时调用,确保每个环境都回到起始状态

  • step:对所有环境执行动作,返回新观测、奖励、done 标志和额外信息

    • 输入:actions,形状为 (num_envs, num_actions)

    • 返回:观测、奖励、done(是否终止)、额外信息(日志、特殊观测....)

    • 作用:这是与环境交互的核心接口,算法通过它采集数据


2.网络层(modules/)

modules/actor_critic.py搞懂这个文件,自己再去看 actor_critic_recurrent.py 就很简单

1.Actor 网络(策略网络)

  • 输入:环境观测(状态)

  • 输出:动作分布的均值

  • 结构:可配置的多层感知机(MLP)

  • 作用:决定智能体在给定状态下应该采取什么动作

2.Critic(价值网络)

  • 输入:环境观测(特权信息)

  • 输出:状态价值估计(单个标量值)

  • 结构:可配置的多层感知机(MLP)

  • 作用:评估当前状态的价值,用于计算优势函数和指导策略更新

3.动作生成机制

通过 Actor 网络计算动作均值,结合标准差参数构建正态分布,从分布中采样得到具体动作。

actor 是一个由多个线性层和激活函数组成的神经网络;

  • 输入:观测向量 → 线性层 → 激活函数(ELU)

  • 隐藏层 1:激活后的特征 → 线性层 → 激活函数

  • 隐藏层 2:激活后的特征 → 线性层 → 激活函数

  • 输出层:激活后的特征 → 线性层 → 动作均值向量

    # 构建Actor网络(策略网络)actor_layers = []# 添加输入层actor_layers.append(nn.Linear(mlp_input_dim_a, actor_hidden_dims[0]))# 添加激活函数actor_layers.append(activation)# 循环添加隐藏层for layer_index in range(len(actor_hidden_dims)):    # 如果是最后一层,连接到动作输出层    if layer_index == len(actor_hidden_dims) - 1:        actor_layers.append(nn.Linear(actor_hidden_dims[layer_index], num_actions))    # 否则,连接到下一个隐藏层    else:        actor_layers.append(nn.Linear(actor_hidden_dims[layer_index], actor_hidden_dims[layer_index + 1]))        actor_layers.append(activation)# 将所有层组合成一个Sequential模型self.actor = nn.Sequential(*actor_layers)

    接下来举个例子,详细讲一下actor网络层的处理数据的流程

    前文提及的内容中也有部分参数的讲解,不过针对性不够强,也并未对重要参数进行详细介绍。而经验积累及内容整理不易,后续内容付费(10RMB),需前往微信阅读,链接如下:

    rsl_rl机器人强化学习框架实战!从零吃透rsl_rl框架——核心原理与PPO算法实现详解(算法解析+框架梳理+源码精读)

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    具身智能研究室

    如果对您有用,可以支持一下小编

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值