Sim-to-Sim 策略转移

Sim-to-Sim 策略转移#

本节提供了使用 Newton 后端进行 sim-to-sim 策略转移的示例。在将策略部署到真实机器人之前,sim-to-sim 转移是一个必不可少的步骤,因为它可以验证策略在不同仿真器上的工作情况。通过 sim-to-sim 验证的策略更有可能在真实机器人上成功。

概览#

本指南展示了如何在 Newton 后端上运行经过 PhysX 训练的策略。虽然该方法适用于任何机器人和物理引擎,但只在使用 PhysX 训练策略的 Unitree G1、Unitree H1 和 ANYmal-D 机器人上进行过测试。

PhysX 训练的策略希望关节和连杆按照 PhysX 解析机器人模型的特定顺序进行。然而,Newton 可能会以不同的关节和连杆顺序解析相同的机器人。

在未来,我们计划使用 robot schema 来解决这个问题,该模式标准化了不同后端之间的关节和链接顺序。

目前,我们通过在 YAML 文件中定义的关节映射重新映射观测和动作来解决这个问题。这些文件指定了 PhysX 顺序(源)和 Newton 顺序(目标)中的关节名称。在策略执行期间,我们使用此映射来重新排列观测和动作,以便与 Newton 正确配合。

所需材料#

  • 通过 PhysX(RSL-RL)训练的策略checkpoint。

  • 位于 scripts/newton_sim2sim/mappings/ 下的机器人关节映射 YAML 文件。

  • 提供的player脚本: scripts/newton_sim2sim/rsl_rl_transfer.py

要添加新的机器人,请创建一个包含两个列表的 YAML 文件,其中每个关节名称在两个列表中都只出现一次:

# Example structure
source_joint_names:  # PhysX joint order
  - joint_1
  - joint_2
  # ...
target_joint_names:  # Newton joint order
  - joint_1
  - joint_2
  # ...

该脚本自动计算locomotion任务所需的映射。

如何运行#

使用此命令模板通过 Newton 运行 PhysX 训练的策略:

./isaaclab.sh -p scripts/newton_sim2sim/rsl_rl_transfer.py \
    --task=<TASK_ID> \
    --num_envs=32 \
    --checkpoint <PATH_TO_PHYSX_CHECKPOINT> \
    --policy_transfer_file <PATH_TO_MAPPING_YAML>

以下是不同机器人的示例:

  1. Unitree G1

./isaaclab.sh -p scripts/newton_sim2sim/rsl_rl_transfer.py \
    --task=Isaac-Velocity-Flat-G1-v0 \
    --num_envs=32 \
    --checkpoint <PATH_TO_PHYSX_CHECKPOINT> \
    --policy_transfer_file scripts/newton_sim2sim/mappings/sim2sim_g1.yaml
  1. Unitree H1

./isaaclab.sh -p scripts/newton_sim2sim/rsl_rl_transfer.py \
    --task=Isaac-Velocity-Flat-H1-v0 \
    --num_envs=32 \
    --checkpoint <PATH_TO_PHYSX_CHECKPOINT> \
    --policy_transfer_file scripts/newton_sim2sim/mappings/sim2sim_h1.yaml
  1. ANYmal-D

./isaaclab.sh -p scripts/newton_sim2sim/rsl_rl_transfer.py \
    --task=Isaac-Velocity-Flat-Anymal-D-v0 \
    --num_envs=32 \
    --checkpoint <PATH_TO_PHYSX_CHECKPOINT> \
    --policy_transfer_file scripts/newton_sim2sim/mappings/sim2sim_anymal_d.yaml

注意和限制#

  • 此转移方法仅在使用 PhysX 训练策略的 Unitree G1、Unitree H1 和 ANYmal-D 机器人上经过测试。

  • 观测重新映射假设一个以基本观测开头,后跟关节观测的定位布局。对于不同的观测布局,您需要修改 scripts/newton_sim2sim/policy_mapping.py

  • 当添加新的机器人或后端时,请确保源和目标具有相同的关节名称,并且 YAML 列表反映每个后端如何对这些关节进行排序。