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

相关推荐
emacs5lisp6 小时前
基于强化学习的自动驾驶控制
神经网络·自动驾驶·强化学习·carla·智能体
铮铭2 天前
扩散模型简介:The Annotated Diffusion Model
人工智能·机器人·强化学习·世界模型
七牛云行业应用2 天前
告别RLHF?DeepSeek过程奖励(PRM)架构解析与推理数据流设计
人工智能·强化学习·大模型架构·deepseek
机器觉醒时代3 天前
星动纪元 | 清华孵化的人形机器人先锋,以「具身大脑+本体+灵巧手」定义通用智能未来
人工智能·机器人·人形机器人·灵巧手
iiiiii113 天前
【论文阅读笔记】IDAQ:离线元强化学习中的分布内在线适应
论文阅读·人工智能·笔记·学习·算法·机器学习·强化学习
deephub3 天前
BipedalWalker实战:SAC算法如何让机器人学会稳定行走
人工智能·机器学习·机器人·强化学习
强化学习与机器人控制仿真7 天前
RSL-RL:开源人形机器人强化学习控制研究库
开发语言·人工智能·stm32·神经网络·机器人·强化学习·模仿学习
山顶夕景8 天前
【RL】Does RLVR enable LLMs to self-improve?
深度学习·llm·强化学习·rlvr
神州问学13 天前
「干货长文」强化学习完全指南:从基础MDP到TRPO/PPO/GRPO算法演进
强化学习