8.IsaacGymEnvs (NVIDIA 官方)的shadow灵巧手强化学习

安装

下载库

bash 复制代码
git clone https://github.com/isaac-sim/IsaacGymEnvs.git

激活虚拟环境

bash 复制代码
conda activate IsaacGymEnvs

进入文件夹

bash 复制代码
cd IsaacGymEnvs

安装依赖

bash 复制代码
pip install -e .

运行DEMO

打开另一个终端,进入文件夹

bash 复制代码
cd ~/IsaacGymEnvs/isaacgymenvs

运行历程(shadowhand手旋转魔方)

bash 复制代码
python train.py task=ShadowHand task.env.numEnvs=4096 train.params.config.minibatch_size=16384

运行图:

实际上,Bi-DexHands 的代码结构是直接从 IsaacGymEnvs 继承和魔改来的

python 复制代码
根目录
├── cfg/                  # [配置中心] 使用 Hydra 管理所有参数
├── isaacgymenvs/         # [核心代码包]
│   ├── tasks/            # [环境定义] 物理世界、机器人、奖励函数的定义 (最核心)
│   │   ├── base/         #     └── vec_task.py (所有任务的父类,定义标准接口)
│   │   ├── humanoid.py   #     └── 具体任务实现 (如人形机器人)
│   │   └── ...
│   ├── utils/            # [工具箱] 数学计算、随机化工具 (大多是 JIT 编译的)
│   ├── learning/         # [算法接口] (主要是对 rl_games 的封装)
│   └── pbt/              # [高级功能] 基于种群的训练 (Population Based Training)
├── assets/               # [资产] URDF/MJCF 机器人模型文件、纹理等
└── train.py              # [入口] 程序启动点

核心模块详细解析

1. 入口与配置 (train.py & cfg/)
  • 文件train.py, cfg/config.yaml, cfg/task/*.yaml, cfg/train/*.yaml

  • 作用:程序的指挥塔。它负责解析命令行参数,并组合出完整的配置字典。

  • 关键技术Hydra (一个基于 yaml 的配置管理工具)。

  • 流程

    1. 用户运行 python train.py task=Ant。

    2. Hydra 读取 cfg/config.yaml。

    3. 根据 task=Ant,加载 cfg/task/Ant.yaml(定义物理环境参数)和 cfg/train/AntPPO.yaml(定义 PPO 算法参数)。

    4. 初始化 isaacgymenvs.make() 创建环境。

2. 任务系统 (isaacgymenvs/tasks/) ------ 这是需要读写的重点

这是定义"智能体在做什么"的地方。

  • 基类 (base/vec_task.py)

    • 作用:连接 Isaac Gym 底层 C++ 接口和 Python RL 算法的桥梁。

    • 接口 :它实现了类似 OpenAI Gym 的接口 (step, reset),但它是向量化的(Vectorized),即一次性处理数千个环境的数据。

    • 关键代码:它负责分配 GPU 显存 (gym.acquire_..._tensor),这是高性能的关键。

  • 具体任务 (e.g., shadow_hand.py, humanoid.py)

    • 内容

      1. create_sim(): 加载地面、加载机器人 URDF 文件、创建数千个副本。

      2. pre_physics_step(actions): 物理模拟前的准备。通常负责将神经网络输出的 -1 到 1 的 Action 转换成电机需要的力矩或位置目标。

      3. post_physics_step(): 物理模拟后的处理。调用计算奖励和观测的函数,并判断哪些环境需要 Reset。

      4. compute_reward() : 灵魂函数。定义什么行为是好的。

      5. compute_observations(): 定义机器人能看到什么(关节位置、速度、目标距离等)。

3. 工具箱 (isaacgymenvs/utils/)
  • 文件:torch_jit_utils.py (最重要)

  • 作用:因为数据全在 GPU 上(PyTorch Tensor),我们不能用 numpy 或 math 库。这个文件包含了一堆用 @torch.jit.script 装饰的数学函数。

  • 常用函数

    • quat_rotate: 四元数旋转

    • tensor_clamp: 限制数值范围

    • unscale: 将归一化数据还原

    • 注意:在写奖励函数时,会大量调用这里的函数

4. 算法与训练 (learning/ & 外部 rl_games)
  • 内容 :IsaacGymEnvs 默认深度集成了 rl_games 这个第三方库来实现 PPO 算法。

  • 作用

    • isaacgymenvs/learning 下的代码大多是用于适配 rl_games 的胶水代码。

    • 真正的 PPO 更新逻辑(Policy Loss, Value Loss 计算)在 rl_games 库里,而不是在 IsaacGymEnvs 的代码里。

    • 如果你想改算法(比如改 PPO 的公式),你需要去改 rl_games 库,或者像 Bi-DexHands 那样自己写一个 ppo.py

关键接口与数据流 (The Loop)

理解这个数据流,你就掌握了它的命脉:

  1. 初始化阶段:

    • train.py -> isaacgymenvs.make() -> Task.init

    • Action: 加载物理资产,创建 num_envs (例如 4096) 个环境实例。

    • Memory: 在 GPU 上申请巨大的 Tensor 显存块(用于存储 4096 个机器人的状态)。

  2. 运行循环 (Step Loop) :

    这是 rl_games 调用 VecTask.step() 时发生的:

python 复制代码
def step(self, actions):
    # 1. 预处理动作 (Pre-Physics)
    # 将神经网络输出 (Actions) -> 转化为电机目标位置 (Targets)
    self.pre_physics_step(actions)
    
    # 2. 物理仿真 (Simulation) - 耗时最长
    # C++ 底层开始计算 F=ma,碰撞检测等
    self.gym.simulate(self.sim)
    self.gym.fetch_results(self.sim, True)
    
    # 3. 刷新张量 (Refresh Tensors)
    # 只有调用这个,GPU 里的 PyTorch Tensor 才会更新为最新的物理状态
    self.gym.refresh_dof_state_tensor(self.sim)
    ...
    
    # 4. 后处理 (Post-Physics)
    # 计算当前的 Observation (obs_buf) 和 Reward (rew_buf)
    self.post_physics_step()
    
    # 5. 返回给 PPO
    return self.obs_buf, self.rew_buf, self.reset_buf, self.extras

IsaacGymEnvs 与 Bi-DexHands 的关系

你之前使用的 Bi-DexHands 是基于 IsaacGymEnvs 的旧版本框架开发的,但做了以下改动:

  1. 算法层:Bi-DexHands 为了支持多智能体(MARL)和特定研究,自己实现了一套 algorithms/ 目录(包含你之前看到的 ppo.py),这比直接调 rl_games 更容易修改算法细节,但也更繁琐。

  2. 任务层:Bi-DexHands 专注于灵巧手,所以它的 tasks/ 目录下全是各种手部任务(ShadowHand, AllegroHand 等),而 IsaacGymEnvs 包含更广泛的通用机器人(四足、两足、四旋翼等)。

现有的灵巧手benchmark:

https://github.com/isaac-sim/IsaacGymEnvs

https://github.com/Farama-Foundation/D4RL

https://github.com/leap-hand/LEAP_Hand_Sim

https://github.com/UM-ARM-Lab/MFR_benchmark

https://github.com/YingYuan0414/in-hand-rotation

https://github.com/PKU-MARL/DexterousHands

相关推荐
倔强的石头10612 小时前
多模态生成强化学习框架 DanceGRPO + FLUX 在昇腾 NPU 上的部署与对齐实践
强化学习·昇腾
黑客思维者4 天前
机器学习005:强化学习(概论)--从“训练狗狗”到“打游戏”
人工智能·机器学习·强化学习
ASS-ASH6 天前
机器人灵巧手:技术演进、市场格局与未来前景
人工智能·深度学习·神经网络·机器学习·计算机视觉·机器人·灵巧手
赫凯6 天前
【强化学习】第一章 强化学习初探
人工智能·python·强化学习
nju_spy6 天前
深度强化学习 TRPO 置信域策略优化实验(sb3_contrib / 手搓 + CartPole-v1 / Breakout-v5)
人工智能·强化学习·共轭梯度法·策略网络·trpo·sb3_contrib·breakout游戏
徐桑7 天前
【强化学习笔记】从数学推导到电机控制:深入理解 Policy Gradient 与 Sim-to-Real。
机器人·强化学习
加点油。。。。7 天前
【强化学习】——策略梯度方法
人工智能·机器学习·强化学习
kkkkkkkkk_12017 天前
【强化学习】07周博磊强化学习纲要学习笔记——第四课上
学习·强化学习
free-elcmacom8 天前
机器学习高阶教程<2>优化理论实战:BERT用AdamW、强化学习爱SGD
人工智能·python·机器学习·bert·强化学习·大模型训练的优化器选择逻辑
AI-Frontiers8 天前
小白也能看懂的RLHF-PPO:原理篇
强化学习