跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

宇树 G1 人形机器人强化学习训练实战指南

基于 Isaac Gym 与 RSL-RL 框架,详解宇树 G1 机器人从 12 自由度到 23 自由度的强化学习环境搭建、配置修改及奖励函数设计。涵盖任务注册、观测空间计算、PD 控制参数调优及核心奖励逻辑解析,提供完整的训练实战指导。

监控大屏发布于 2026/4/8更新于 2026/10/23109 浏览
宇树 G1 人形机器人强化学习训练实战指南

前言

人形机器人的运动控制一直是领域内的难点,强化学习为此提供了强有力的解决方案。本教程基于宇树 G1 人形机器人,从基础环境搭建入手,逐步深入高自由度模型的训练配置、奖励函数设计与优化,最终实现复杂动作的控制。我们将结合 Isaac Gym 仿真环境与 RSL-RL 框架,梳理关键步骤。

强化学习训练环境配置

基础环境搭建

训练依赖于 Isaac Gym 物理仿真环境和 RSL-RL 强化学习框架。确保这两个核心组件正确安装是第一步。启动 12 自由度 G1 机器人的基础训练命令如下:

python legged_gym/scripts/train.py --task=g1

这背后涉及任务注册系统。在 legged_gym/envs/__init__.py 中,可以看到各种机器人任务的注册逻辑:

from legged_gym import LEGGED_GYM_ROOT_DIR, LEGGED_GYM_ENVS_DIR
from legged_gym.envs.go2.go2_config import GO2RoughCfg, GO2RoughCfgPPO
from legged_gym.envs.h1.h1_config import H1RoughCfg, H1RoughCfgPPO
from legged_gym.envs.h1_2.h1_2_config import H1_2RoughCfg, H1_2RoughCfgPPO
from legged_gym.envs.g1.g1_config import G1RoughCfg, G1RoughCfgPPO
from legged_gym.envs.g1.g1_env import G1Robot
from base.legged_robot import LeggedRobot
from legged_gym.utils.task_registry import task_registry

# 任务注册
task_registry.register("go2", LeggedRobot, GO2RoughCfg(), GO2RoughCfgPPO())
task_registry.register("h1", H1Robot, H1RoughCfg(), H1RoughCfgPPO())
task_registry.register("h1_2", H1_2Robot, H1_2RoughCfg(), H1_2RoughCfgPPO())
task_registry.register("g1", G1Robot, G1RoughCfg(), G1RoughCfgPPO())
G1 机器人 12 自由度配置解析

标准配置文件位于 legged_gym/envs/g1/g1_config.py。这里定义了机器人的各项关键参数:

from legged_gym.envs.base.legged_robot_config import LeggedRobotCfg, LeggedRobotCfgPPO

class G1RoughCfg():
     (LeggedRobotCfg.init_state):
        pos = [, , ]  
        default_joint_angles = {
            : , : ,
            : -, : ,
            : -, : ,
            : , : ,
            : -, : ,
            : -, : ,
            : 
        }

     (LeggedRobotCfg.env):
        num_observations =   
        num_privileged_obs =   
        num_actions =   
LeggedRobotCfg
class
init_state
0.0
0.0
0.8
# x,y,z [m] 初始位置
'left_hip_yaw_joint'
0.
'left_hip_roll_joint'
0
'left_hip_pitch_joint'
0.1
'left_knee_joint'
0.3
'left_ankle_pitch_joint'
0.2
'left_ankle_roll_joint'
0
'right_hip_yaw_joint'
0.
'right_hip_roll_joint'
0
'right_hip_pitch_joint'
0.1
'right_knee_joint'
0.3
'right_ankle_pitch_joint'
0.2
'right_ankle_roll_joint'
0
'torso_joint'
0
class
env
47
# 观测维度
50
# 特权观测维度
12
# 动作维度

关键参数包括:pos 设定仿真初始位置;default_joint_angles 定义自然站立姿态;num_observations 和 num_actions 分别对应观测空间与动作空间的维度。

扩展到 23 自由度模型

高自由度模型的挑战

将 G1 从 12 自由度扩展至 23 自由度时,新增的 11 个自由度主要分布在上肢,包括腰部、肩部和肘部关节。这不仅增加了参数数量,更导致动作空间指数级扩展,训练难度显著提升。

创建 23 自由度配置

为避免破坏现有任务,建议在 legged_gym/envs/g1/ 下新建 g1_config_23.py:

from legged_gym.envs.base.legged_robot_config import LeggedRobotCfg, LeggedRobotCfgPPO

class G1_23RoughCfg(LeggedRobotCfg):
    class init_state(LeggedRobotCfg.init_state):
        pos = [0.0, 0.0, 0.8]
        default_joint_angles = {
            # 腿部关节(保持原有配置)
            'left_hip_yaw_joint': 0., 'left_hip_roll_joint': 0,
            'left_hip_pitch_joint': -0.1, 'left_knee_joint': 0.3,
            'left_ankle_pitch_joint': -0.2, 'left_ankle_roll_joint': 0,
            'right_hip_yaw_joint': 0., 'right_hip_roll_joint': 0,
            'right_hip_pitch_joint': -0.1, 'right_knee_joint': 0.3,
            'right_ankle_pitch_joint': -0.2, 'right_ankle_roll_joint': 0,
            # 新增的上肢关节
            'waist_yaw_joint': 0,  # 注意:torso_joint 改名为 waist_yaw_joint
            'left_shoulder_pitch_joint': 0., 'left_shoulder_roll_joint': 0,
            'left_shoulder_yaw_joint': 0., 'left_elbow_joint': 0.,
            'left_wrist_roll_joint': 0., 'right_shoulder_pitch_joint': 0.,
            'right_shoulder_roll_joint': 0.0, 'right_shoulder_yaw_joint': 0.,
            'right_elbow_joint': 0., 'right_wrist_roll_joint': 0.
        }
观测维度的重新计算

足式机器人的标准观测包含基座角速度、重力投影、运动命令、关节状态等。对于 23 自由度模型,观测维度计算如下: 3(角速度) + 3(重力) + 3(命令) + 23×3(关节状态) + 2(相位) = 75 维。 实际查看 g1_env.py 会发现多了基座线速度(3 维),因此总观测维度为 80 维。

class env(LeggedRobotCfg.env):
    num_observations = 80  # 普通观测维度
    num_privileged_obs = 83  # 特权观测维度(多了基座线速度 3 维)
    num_actions = 23  # 动作维度
控制参数配置

针对新增关节需配置 PD 控制参数,不同部位刚度与阻尼设置有所不同:

class control(LeggedRobotCfg.control):
    control_type = 'P'
    stiffness = {
        'hip_yaw': 100, 'hip_roll': 100, 'hip_pitch': 100,
        'knee': 150, 'ankle': 40, 'waist_yaw': 250,
        'shoulder': 100, 'elbow': 50, 'wrist': 50
    }
    damping = {
        'hip_yaw': 2, 'hip_roll': 2, 'hip_pitch': 2,
        'knee': 4, 'ankle': 2, 'waist_yaw': 6,
        'shoulder': 2, 'elbow': 2, 'wrist': 2
    }
    action_scale = 0.25
    decimation = 4

最后更新资源文件路径并在 __init__.py 中注册新任务即可开始训练:

python legged_gym/scripts/train.py --task=g1_23

奖励函数架构深度解析

核心作用与设计

奖励函数是强化学习的唯一指导信号。良好的设计需平衡稳定性、任务完成度、能耗及动作自然性。宇树框架采用模块化设计,每个组件专注于特定行为特征,便于精细调节。

配置详解

在 G1RoughCfg 类中,通过继承重写配置奖励权重:

class G1RoughCfg(LeggedRobotCfg):
    class rewards(LeggedRobotCfg.rewards):
        soft_dof_pos_limit = 0.9
        base_height_target = 0.78

        class scales(LeggedRobotCfg.rewards.scales):
            tracking_lin_vel = 1.0
            tracking_ang_vel = 0.5
            lin_vel_z = -2.0
            ang_vel_xy = -0.05
            orientation = -1.0
            base_height = -10.0
            dof_acc = -2.5e-7
            dof_vel = -1e-3
            action_rate = -0.01
            feet_air_time = 0.0
            contact = 0.18
            contact_no_vel = -0.2
            feet_swing_height = -20.0
            collision = 0.0
            dof_pos_limits = -5.0
            alive = 0.15
            hip_pos = -1.0

soft_dof_pos_limit 设为 URDF 限制的 90%,保护机械结构;base_height_target 设定理想身体高度以维持稳定。

初始化与执行机制

_prepare_reward_function() 方法负责构建奖励列表,动态查找非零权重的函数。compute_reward() 则在每个仿真步调用所有有效函数计算总奖励。这种机制允许仅通过配置权重即可激活或调整特定行为约束。

关键函数解析

轨迹跟踪使用指数衰减奖励,误差越小奖励越接近 1。姿态与高度控制则通过平方误差进行惩罚。动作平滑性通过加速度和变化率进行约束,避免剧烈抖动。

理解这些底层逻辑后,开发者可根据实际需求调整权重,优化机器人的运动表现。

目录

  1. 前言
  2. 强化学习训练环境配置
  3. 基础环境搭建
  4. 任务注册
  5. G1 机器人 12 自由度配置解析
  6. 扩展到 23 自由度模型
  7. 高自由度模型的挑战
  8. 创建 23 自由度配置
  9. 观测维度的重新计算
  10. 控制参数配置
  11. 奖励函数架构深度解析
  12. 核心作用与设计
  13. 配置详解
  14. 初始化与执行机制
  15. 关键函数解析

更多推荐文章

查看全部
  • Java 注解与反射实战:自定义注解的定义与应用
  • 多模态学习(五):基于可变形注意力的无人机可见光 - 红外图像配准算法
  • Linux 系统 MinIO 对象存储部署与配置指南
  • Jetson 部署 OpenClaw 接入飞书机器人实现本地 AI 助手
  • STL 底层解析:map 与 set 基于红黑树的封装及迭代器实现
  • 3DMAX VR 渲染器局部渲染设置
  • 无人机通信协议解析:MAVLink、PPM 与 SBUS 原理及适用场景
  • Transformer 模型效率优化的 9 种主流改进方案
  • 网约车微服务项目架构与服务拆分
  • Model Context Protocol (MCP) 详解:AI 智能体连接外部工具的标准协议
  • Web 开发中五种核心加密算法实战与原理
  • 轻小说机翻机器人:架构设计与快速部署
  • 激光雷达点云滤波核心技术:高效去噪算法与实战优化
  • VSCode Copilot Chat 加载超时问题排查与解决
  • Android Jetpack ViewBinding 视图绑定详解与封装优化
  • llama-cpp-python 完整安装与配置指南
  • Java 快速集成 Dify AI 平台实践
  • Android 锁屏服务实现与电话状态监听
  • C++ 核心基础概念解析
  • 前端 JS 加载失败处理方案:重试与多源容灾策略

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online