Isaac Lab Newton 人形机器人强化学习 Sim2Real 训练与部署
系列文章目录
目录
系列文章目录
前言
一、安装
1.1 Pip 安装
1.2 二进制安装
1.3 测试安装
二、训练环境
三、Newton 可视化器
四、限制事项
五、求解器迁移
六、仿真器间策略转移
6.1 概述
6.2 所需内容
6.3 如何运行
6.4 注意事项与限制
七、仿真到真实的策略迁移
7.1 要求
7.2 概述
7.2.1 教师训练策略
7.2.2 蒸馏学生策略(移除特权术语)
7.2.3 使用RL对学生策略进行微调
前言
Isaac Lab之所以开源,是因为我们致力于打造一个机器人仿真领域的开放协作社区。我们坚信,强大的工具对机器人技术的未来至关重要。
有时新功能可能需要对Isaac Lab内部结构进行大规模改动。若在功能尚未完善且未征询整个社区意见的情况下直接集成,可能会给不知情的用户带来严重问题。
为此,部分重大功能将以实验性功能分支的形式发布。这样社区成员就能在功能完全集成前进行测试并贡献改进,从而降低因意外新错误导致项目受阻的风险。
Newton是一款基于GPU加速、可扩展且可微分的物理仿真引擎,专为机器人技术、科研及高级仿真工作流程设计。该引擎基于NVIDIA Warp构建并集成MuJoCo Warp,为用户和开发者提供高性能仿真、现代化的Python应用程序接口以及灵活的架构。
Newton是一个开源社区驱动项目,由英伟达、谷歌DeepMind和迪士尼研究院共同参与贡献,并通过Linux基金会进行管理。
Isaac Lab的此实验性功能分支实现了与Newton物理引擎的初步集成,目前正处于积极开发阶段。许多功能尚未支持,现阶段仅包含有限的经典强化学习示例及平面地形移动强化学习示例。
该Isaac Lab集成分支与Newton本身均处于密集开发阶段。我们计划未来为其他强化学习和模仿学习工作流提供更多功能支持,但上述任务应能很好地帮助您理解Newton集成在Isaac Lab中的运作机制。
我们通过将从Newton仿真中学习到的策略转移到PhysX,并反之验证了Newton仿真与PhysX的有效性。此外,我们还成功将Newton训练的运动策略部署到G1机器人上。更多信息请参见此处。
Newton引擎可支持多种求解器以处理不同类型的物理仿真,但目前Isaac Lab的集成主要侧重于MuJoCo-Warp求解器。
该分支及Newton法的未来更新应包含持续的性能优化,以及与更多求解器的集成.
请注意,此分支不包含对PhysX物理引擎的支持——仅支持Newton物理引擎。我们正在考虑多种方案以继续在Lab中支持PhysX,并期待用户就相关需求提供反馈。
在Newton框架与本艾萨克实验室集成的早期开发阶段,您可能会遇到破坏性变更以及文档不完善的情况。在框架正式发布之前,我们暂不提供官方支持或调试协助。感谢您的理解与耐心,我们将全力打造一个强大而完善的框架!
一、安装
安装Newton物理集成分支需要满足三个条件:
-
Isaac sim 5.0
-
The
feature/newton
branch of Isaac Lab -
Ubuntu 22.04 or 24.04 (Windows will be supported soon)
首先,请通过检查启动仿真应用时创建的窗口标题来验证Isaac Sim的版本。或者,您也可以在应用内的“帮助”->“关于”菜单中找到更明确的版本信息。若您的版本低于5.0,必须先更新或重新安装Isaac Sim才能继续操作。
接下来,导航至您本地Isaac Lab存储库的根目录,并打开终端。
请执行以下命令确保我们处于 feature/Newton 分支:
git checkout feature/newton
下面,我们提供了通过 pip 或二进制文件安装 Isaac Sim 的说明。
1.1 Pip 安装
我们建议使用 conda 管理 Python 环境。conda 可在此处下载并安装。
创建新的 conda 环境:
conda create -n env_isaaclab python=3.11
激活环境:
conda activate env_isaaclab
安装正确版本的 torch 和 torchvision:
pip install torch==2.7.0 torchvision==0.22.0 --index-url https://download.pytorch.org/whl/cu128
安装Isaac Sim 5.0:
pip install "isaacsim[all,extscache]==5.0.0" --extra-index-url https://pypi.nvidia.com
安装 Isaac Lab 扩展及其依赖项:
./isaaclab.sh -i
1.2 二进制安装
请遵循Isaac Sim文档安装Isaac Sim 5.0二进制文件。
进入Isaac Lab目录:
cd IsaacLab
为 Isaac Sim 安装添加符号链接:
ln -s path_to_isaac_sim _isaac_sim
安装 Isaac Lab 扩展及其依赖项:
./isaaclab.sh -i
1.3 测试安装
要验证安装是否成功,请在 Isaac Lab 存储库的根目录下运行以下命令:
./isaaclab.sh -p scripts/environments/zero_agent.py --task Isaac-Cartpole-Direct-v0 --num_envs 128
二、训练环境
进行训练时,我们遵循标准的Isaac Lab工作流程。若您初次使用Isaac Lab,建议您参阅此处的快速入门指南。
当前支持的任务如下:
-
Isaac-Cartpole-Direct-v0
-
Isaac-Ant-Direct-v0
-
Isaac-Humanoid-Direct-v0
-
Isaac-Velocity-Flat-Anymal-D-v0
-
Isaac-Velocity-Flat-G1-v0
-
Isaac-Velocity-Flat-G1-v1 (Sim-to-Real tested)
-
Isaac-Velocity-Flat-H1-v0
要启动环境并验证其加载是否符合预期,我们可以先尝试向执行器发送零操作。具体操作如下,其中 TASK_NAME 是您要运行的任务名称,NUM_ENVS 是您要创建的任务实例数量。
./isaaclab.sh -p scripts/environments/zero_agent.py --task TASK_NAME --num_envs NUM_ENVS
对于包含128个实例的cartpole数据集,其结构如下所示:
./isaaclab.sh -p scripts/environments/zero_agent.py --task Isaac-Cartpole-Direct-v0 --num_envs 128
要运行具有随机操作的相同环境,我们可以使用不同的脚本:
./isaaclab.sh -p scripts/environments/random_agent.py --task Isaac-Cartpole-Direct-v0 --num_envs 128
为训练环境,我们提供了与不同强化学习框架对接的钩子。更多信息请参阅强化学习脚本文档。
以下是使用多种强化学习框架进行训练的示例。请注意,我们明确将环境数量设置为4096,以充分利用GPU并行化优势。同时通过--headless选项禁用Omniverse UI可视化功能,最大限度提升环境训练速度。
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Isaac-Cartpole-Direct-v0 --num_envs 4096 --headless
./isaaclab.sh -p scripts/reinforcement_learning/skrl/train.py --task Isaac-Cartpole-Direct-v0 --num_envs 4096 --headless
./isaaclab.sh -p scripts/reinforcement_learning/rl_games/train.py --task Isaac-Cartpole-Direct-v0 --num_envs 4096 --headless
策略训练完成后,我们可通过播放脚本进行可视化。但首先需要找到训练策略的检查点,通常存储于:logs/RL框架名称/任务名称/日期。
以我们的rsl_rl示例为例,路径可能如下:logs/rsl_rl/cartpole_direct/2025-08-21_15-45-30/model_299.pt
要运行该策略,可使用以下命令。请注意我们减少了环境数量并移除了--headless选项,以便直观观察策略运行效果!
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py --task Isaac-Cartpole-Direct-v0 --num_envs 128 --checkpoint logs/rsl_rl/cartpole_direct/2025-08-21_15-45-30/model_299.pt
相同的方法适用于所有其他框架。
请注意,并非所有环境都支持所有框架。例如,某些运动环境仅在rsl_rl框架中支持。
三、Newton 可视化器
Newton内置可视化工具,可快速轻量地查看仿真结果。该系统未来计划新增多项功能,包括通过网页浏览器远程查看训练结果的能力。启用Newton可视化工具需使用--newton_visualizer命令行选项。
Newton可视化工具既不具备也不旨在为正在训练的机器人提供摄像头传感器数据。它仅作为开发调试和可视化工具而设计。
目前它仅支持碰撞形状的可视化,不支持视觉形状的可视化。
Omniverse RTX 渲染器和 Newton 可视化器均可并行运行,或通过 --headless 选项禁用 Omniverse UI 和 RTX 渲染器。
以训练上述示例中的 Cartpole 环境为例,我们可通过 --headless 选项禁用 Omniverse UI 和 RTX 渲染器,同时启用 Newton 可视化器,具体操作如下:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Isaac-Cartpole-Direct-v0 --num_envs 4096 --headless --newton_visualizer
通常情况下,我们不建议在训练过程中使用Omniverse UI,以确保实现最快的训练速度。Newton可视化工具在运行时的性能开销较小,我们计划在未来进一步降低该开销。
若需同时运行Omniverse UI和Newton可视化器(例如在较少环境下进行推理时),可省略--headless选项,同时添加--newton_visualizer选项,具体如下:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py --task Isaac-Cartpole-Direct-v0 --num_envs 128 --checkpoint logs/rsl_rl/cartpole_direct/2025-08-21_15-45-30/model_299.pt --newton_visualizer
这些选项在所有学习框架中均可用。
有关Newton可视化工具的更多信息,请参阅Newton文档。
四、限制事项
在 Newton 与 Isaac Lab 集成的早期开发阶段,您可能会遇到破坏性变更以及文档不完善的情况。
在框架正式发布之前,我们预计无法提供支持或调试协助。
以下是 Newton 实验性功能分支当前支持的部分功能列表(按扩展名分类):
-
isaaclab:
-
Articulation API
-
Contact Sensor
-
Direct & Manager single agent workflows
-
Omniverse Kit visualizer
-
Newton visualizer
-
-
isaaclab_assets:
-
Anymal-D
-
Unitree H1 & G1
-
Toy examples
-
Cartpole
-
Ant
-
Humanoid
-
-
-
isaaclab_tasks:
-
Direct:
-
Cartpole
-
Ant
-
Humanoid
-
-
Manager based:
-
Locomotion (velocity flat terrain)
-
Anymal-D
-
Unitree G1
-
Unitree H1
-
-
-
除上述功能外,目前暂不支持其他功能。我们预计将很快支持与刚体相关的API,以实现基于机械臂的环境功能。
五、求解器迁移
迁移至Newton物理引擎引入了采用不同数值方法处理仿真的新物理求解器。尽管Newton支持多种求解器,但Isaac Lab的初期重点是采用谷歌DeepMind开发的MuJoCo-Warp求解器。
物理场景本身的定义方式保持不变——我们仍将USD作为场景中对象和机器人基础参数的主要设置方式,当前环境中使用的正是与基于PhysX的Isaac Lab完全相同的USD文件。未来可能出现变化,因为正在开发的新USD架构将支持捕获更多物理参数。
需要改变的是某些求解器特定设置的配置方式。调整这些参数对仿真性能和行为都会产生显著影响。
目前,我们将展示一个设置这些参数的示例,以帮助大家感受这些变化。请注意,NewtonCfg 取代了 PhysxCfg,用于设置与物理仿真参数相关的所有内容,但 dt 除外:
from isaaclab.sim._impl.newton_manager_cfg import NewtonCfg
from isaaclab.sim._impl.solvers_cfg import MJWarpSolverCfgsolver_cfg = MJWarpSolverCfg(nefc_per_env=35,ls_iterations=10,cone="pyramidal",ls_parallel=True,impratio=1,
)
newton_cfg = NewtonCfg(solver_cfg=solver_cfg,num_substeps=1,debug_mode=False,
)
sim: SimulationCfg = SimulationCfg(dt=1 / 120, render_interval=decimation, newton_cfg=newton_cfg)
- nefc_per_env:这是我们希望MuJoCo Warp为给定环境预分配的缓冲约束大小。过大值会降低仿真速度,而过小值可能导致某些接触关系被遗漏。
- ls_iterations:MuJoCo Warp求解器执行的线搜索次数。线性搜索用于寻找最优步长,每个求解器步骤最多执行 ls_iterations 次线性搜索。保持较低数值对性能至关重要。当未设置 ls_parallel 时,此数值同时作为并行搜索次数的上限。
- cone: 此参数用于在接触处理中选择金字塔形或椭圆形摩擦锥近似方案。有关接触处理的更多信息,请参阅 MuJoCo 文档:https://mujoco.readthedocs.io/en/stable/computation/index.html#contact
- ls_parallel:此参数将线性搜索从迭代执行切换为并行执行。启用 ls_parallel 可提升性能,但会牺牲部分仿真稳定性。为确保启用时的仿真行为良好,需要设置更高的 ls_iterations 值。通常建议在禁用 ls_parallel 时,将 ls_iterations 值提升约 50%。
- impratio:该参数定义摩擦阻力与法向约束阻力的阻抗比值,用于精细调节切向力相对于法向力的作用强度。数值越大,意味着更强调强摩擦约束以避免滑移。有关此参数(及锥体)的调优方法,详见MuJoCo文档:https://mujoco.readthedocs.io/en/stable/XMLreference.html#option-impratio
- num_substeps:仿真运行时的子步数。设置为大于1的数值可实现仿真数据抽取,无需Isaac Lab处理两个子步之间的数据。此功能在使用隐式执行器时尤为重要。
一份更详细的过渡指南将在后续版本中发布,该指南将涵盖所有可用参数并描述调优方法。
六、仿真器间策略转移
本节提供基于Newton后端的仿真间策略转移示例。仿真间转移是真实机器人部署前的关键步骤,因为它能验证策略在不同仿真器中的兼容性。通过仿真间验证的策略在真实机器人上成功的概率显著提高。
6.1 概述
本指南展示了如何在Newton后端运行基于PhysX训练的策略。虽然该方法适用于任何机器人和物理引擎,但目前仅在Unitree G1、Unitree H1和ANYmal-D机器人上使用PhysX训练策略进行了测试。
PhysX训练的策略要求关节和连杆遵循特定顺序,该顺序由PhysX解析机器人模型的方式决定。然而,Newton可能以不同的关节和连杆顺序解析同一机器人模型。
未来,我们计划通过机器人模式(robot schema)来解决这个问题,该模式将标准化不同后端之间的关节和连杆排序。
目前,我们通过使用YAML文件中定义的关节映射来重新映射观察值和动作来解决这个问题。这些文件同时指定了PhysX顺序(源)和Newton顺序(目标)下的关节名称。在策略执行过程中,我们利用该映射重新排序观察值和动作,确保它们能与Newton系统正确配合工作。
6.2 所需内容
一个使用PhysX(RSL-RL)训练的策略检查点。
位于 scripts/newton_sim2sim/mappings/ 目录下的机器人关节映射 YAML 文件。
# Example structure
source_joint_names: # PhysX joint order- joint_1- joint_2# ...
target_joint_names: # Newton joint order- joint_1- joint_2# ...
该脚本会自动计算移动任务所需的映射关系。
6.3 如何运行
使用此命令模板通过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>
以下是不同机器人的示例:
- 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
- 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
- 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
6.4 注意事项与限制
此转移方法仅在Unitree G1、Unitree H1和ANYmal-D上使用PhysX训练策略进行过测试。
观测重映射假设运动布局为基座观测后接关节观测。若观测布局不同,需修改scripts/newton_sim2sim/policy_mapping.py脚本。
添加新机器人或后端时,请确保源目标两端关节名称完全一致,且YAML列表准确反映各后端对这些关节的排序规则。
七、仿真到真实的策略迁移
将策略从仿真环境部署到真实机器人涉及诸多关键细节。本节提供针对真实Unitree G1机器人部署策略的高级指南。核心挑战在于:仿真环境中的观测数据并非全部可由真实机器人传感器直接测量。这意味着除非策略仅使用传感器可获取的观测数据,否则基于强化学习训练的策略无法直接部署。例如,真实机器人的惯性测量单元(IMU)虽能提供角加速度(可通过积分获得角速度),却无法直接测量线速度。因此,若策略在训练过程中依赖底座线速度,则必须在部署至真实机器人前移除此信息。
7.1 要求
我们假设该工作流中的策略在实际机器人部署前,需先通过模拟机间传输进行验证。更多信息请参阅此处。
7.2 概述
本节演示了基于教师-学生策略蒸馏的模拟到真实工作流程,针对Unitree G1速度追踪任务采用牛顿后端。
教师-学生策略蒸馏工作流程包含三个阶段:
- 使用真实世界传感器无法获取的特权观测数据训练教师策略。
- 通过行为克隆从教师策略中提炼出排除特权项(如根线性速度)的学生策略。
- 仅使用真实传感器观测数据,通过强化学习对学生策略进行微调。
教师与学生观测组在速度任务配置中实现。详情参见以下源文件:
- 教师观测:velocity_env_cfg.py 中的 PolicyCfg(ObsGroup)
- 学生观测:velocity_env_cfg.py 中的 StudentPolicyCfg(ObsGroup)
7.2.1 教师训练策略
针对G1速度任务采用牛顿后端进行教师训练策略。任务ID为Isaac-Velocity-Flat-G1-v1
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Isaac-Velocity-Flat-G1-v1 --num_envs=4096 --headless
教师策略包含在PolicyCfg(ObsGroup)中定义的特权观测(例如根线性速度)。
7.2.2 蒸馏学生策略(移除特权术语)
在蒸馏过程中,学生策略通过行为克隆学习模仿教师策略,具体实现方式是通过最小化两者动作之间的均方误差:。
学生策略仅使用真实传感器提供的观测数据(参见velocity_env_cfg.py中的StudentPolicyCfg(ObsGroup))。具体而言:根角速度和投影重力来自惯性测量单元(IMU)传感器,关节位置与速度来自关节编码器,而动作则是控制器施加的关节扭矩。
运行学生蒸馏任务 Velocity-G1-Distillation-v1,使用 --load_run 和 --checkpoint 参数指定要从中蒸馏的教师策略。
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Velocity-G1-Distillation-v1 --num_envs=4096 --headless --load_run 2025-08-13_23-53-28 --checkpoint model_1499.pt
注意
使用正确的 --load_run 和 --checkpoint 参数,确保从目标教师策略进行蒸馏。
7.2.3 使用RL对学生策略进行微调
使用RL通过Velocity-G1-Student-Finetune-v1任务对蒸馏后的学生策略进行微调。使用--load_run和--checkpoint参数从蒸馏策略初始化。
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Velocity-G1-Student-Finetune-v1 --num_envs=4096 --headless --load_run 2025-08-20_16-06-52_distillation --checkpoint model_1499.pt
该模型基于蒸馏的学生策略开始训练,并通过强化学习(RL)训练进一步改进该策略。
注意
请确保 --load_run 和 --checkpoint 指向正确的初始策略(通常是蒸馏步骤中的最新检查点)。
您可通过以下方式重播学生策略:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py --task=Velocity-G1-Student-Finetune-v1 --num_envs=32
此操作将策略导出为.pt和.onnx文件,存放于运行导出目录中,可直接用于真实机器人的部署。