尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

在 USD 环境中运行 Isaac Lab 已训练策略:H1 双足机器人在仓库场景中的推理实战

在 USD 环境中运行 Isaac Lab 已训练策略:H1 双足机器人在仓库场景中的推理实战 在 USD 环境中运行 Isaac Lab 已训练策略H1 双足机器人在仓库场景中的推理实战【免费下载链接】IsaacLabUnified framework for robot learning with multi-physics/renderer support项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab导读本文基于 Isaac Lab 官方教程docs/source/tutorials/03_envs/policy_inference_in_usd.rst完整讲解如何在预构建的 USD 场景中运行已训练的 RL 策略以 RSL RL 库训练的Isaac-Velocity-Rough-H1-v0人形机器人双足运动策略为例将其导出为 TorchScript (jit) 模型后加载进一个现成的简易仓库 USD 资产中执行推理。读完本文你将掌握任务训练与策略导出的完整命令行流程、H1RoughEnvCfg_PLAY推理配置的逐项含义、把程序化地形替换为 USD 资产的配置改造方法以及 CPU 推理模式下禁用 Fabric 的原理与适用场景。配套脚本位于 scripts/tutorials/03_envs/policy_inference_in_usd.py可直接复制运行。教程整体思路从程序化地形到 USD 场景本教程承接上一节修改直接 RL 环境tutorial-modify-direct-rl-env的内容解决一个实际部署问题训练阶段机器人通常跑在程序化生成的地形上而真实部署/展示阶段往往需要把机器人放进预构建的美术级 USD 场景如仓库、厂房中。两者的环境配置差异主要在于scene.terrain一项——把terrain_typegenerator换成terrain_typeusd并指定usd_path即可其余观测、动作、命令等配置全部复用这正是 Isaac Lab Manager 架构带来的灵活性。本教程选用的示例组合为任务Isaac-Velocity-Rough-H1-v0H1 双足机器人在粗糙地形上的速度跟踪任务策略RSL RL 库训练后导出的jitTorchScript模型——策略的离线快照推理时不依赖训练框架场景Nucleus 服务器上现成的Simple_Warehouse/warehouse.usd简易仓库资产运行方式单环境num_envs 1、CPU 推理、禁用 Fabric。核心代码逐段解析完整代码见 scripts/tutorials/03_envs/policy_inference_in_usd.py下面按功能拆解。1. 启动阶段AppLauncher 与命令行参数import argparse from isaaclab.app import AppLauncher parser argparse.ArgumentParser(descriptionTutorial on inferencing a policy on an H1 robot in a warehouse.) parser.add_argument(--checkpoint, typestr, helpPath to model checkpoint exported as jit., requiredTrue) # append AppLauncher cli args AppLauncher.add_app_launcher_args(parser) args_cli parser.parse_args() # launch omniverse app app_launcher AppLauncher(args_cli) simulation_app app_launcher.app要点脚本通过AppLauncher启动 Omniverse/Isaac Sim 应用add_app_launcher_args会注入--device、--headless、--viz等通用启动参数这也是文档命令中--viz kit的来源--checkpoint为必填参数指向导出的 jit 策略文件AppLauncher初始化必须在导入任何其他 Isaac Lab 模块之前完成因此源码中明确以注释Launch Isaac Sim Simulator first.标注这一顺序约束。2. 加载 jit 策略本地与 Nucleus 双通道import os import torch from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR, read_file def main(): policy_path os.path.abspath(args_cli.checkpoint) file read_file(policy_path) policy torch.jit.load(file, map_locationargs_cli.device)这里的read_file来自 source/isaaclab/isaaclab/utils/assets.py其行为对应check_file_path/read_file实现为若路径指向本地文件直接以二进制读取返回io.BytesIO若路径指向Nucleus 服务器上的文件如omniverse://...则通过omni.client.read_file拉取内容。因此该脚本既支持本地导出的.pt文件也支持直接读取服务器端策略。加载后torch.jit.load(file, map_locationargs_cli.device)会将模型权重映射到指定设备本教程为 CPU。3. 环境配置复用 PLAY 配置并做三处关键改造from isaaclab.envs import ManagerBasedRLEnv from isaaclab.terrains import TerrainImporterCfg from isaaclab_tasks.manager_based.locomotion.velocity.config.h1.rough_env_cfg import H1RoughEnvCfg_PLAY env_cfg H1RoughEnvCfg_PLAY() env_cfg.scene.num_envs 1 env_cfg.curriculum None env_cfg.scene.terrain TerrainImporterCfg( prim_path/World/ground, terrain_typeusd, usd_pathf{ISAAC_NUCLEUS_DIR}/Environments/Simple_Warehouse/warehouse.usd, ) env_cfg.sim.device args_cli.device if args_cli.device cpu: env_cfg.sim.use_fabric False这是整个教程的题眼共涉及五处改动配置项默认值训练/PLAY 配置本教程的覆盖值作用scene.num_envs50PLAY 配置1只模拟 1 个环境与 CPU 推理匹配curriculum地形难度课程None关闭课程学习推理时无需难度递进scene.terrainterrain_typegeneratorROUGH_TERRAINS_CFG程序化地形terrain_typeusdusd_path指向warehouse.usd用预构建 USD 资产替换程序化地形sim.devicecuda:0等args_cli.deviceCPU在 CPU 上执行仿真sim.use_fabricTrueFalse仅 CPU 时CPU 模式下禁用 Fabric改用 USD 直接 I/O3.1 关于H1RoughEnvCfg_PLAY本身H1RoughEnvCfg_PLAY定义于 source/isaaclab_tasks/isaaclab_tasks/manager_based/locomotion/velocity/config/h1/rough_env_cfg.py它是为回放/推理专门设计的配置变体源码中已经包含一系列与训练配置不同的设定scene.num_envs 50、env_spacing 2.5缩小场景规模scene.terrain.max_init_terrain_level None机器人在网格中随机出生而非按地形难度层级摆放地形生成器降为 5×5 网格且curriculum False节省内存命令范围收紧为固定前向速度lin_vel_x (1.0, 1.0)便于稳定演示observations.policy.enable_corruption False关闭观测噪声注入events.base_external_force_torque None、events.push_robot None移除随机外力扰动。也就是说教程代码是在已经为推理优化过的配置之上再做场景替换改动成本极低。3.2 关于 CPU 与 Fabric 的选择文档明确指出当环境数量较少时CPU 仿真常常比 GPU 仿真更快。这是因为 GPU 仿真的收益需要足够的并行环境来摊薄内核启动与数据传输开销单个环境num_envs 1在 CPU 上反而更高效。sim.use_fabric False的含义是放弃 Fabric 加速数据管线改用标准 USD I/O 操作来读写场景数据。从源码结构看Fabric 是 Isaac Sim 中基于 USD 的高带宽数据通道主要面向大规模 GPU 并行仿真在 CPU 单环境场景下关闭它能简化数据通路并避免不必要的开销。4. 创建环境并运行推理循环env ManagerBasedRLEnv(cfgenv_cfg) obs, _ env.reset() with torch.inference_mode(): while simulation_app.is_running(): action policy(obs[policy]) obs, _, _, _, _ env.step(action)推理循环本身非常简洁ManagerBasedRLEnv(cfgenv_cfg)直接以改造后的配置构造环境此时任务配置中的 USD 仓库已经被加载进/World/ground路径下env.reset()返回(obs, extras)其中obs[policy]是策略观测字典对应的张量循环在torch.inference_mode()下执行——关闭梯度追踪降低内存占用与计算开销env.step(action)返回(obs, reward, terminated, truncated, extras)五元组simulation_app.is_running()作为窗口关闭 / 中断时的退出条件。完整执行流程训练 → 回放 → 导出 → 场景推理第一步训练Isaac-Velocity-Rough-H1-v0在仓库根目录执行./isaaclab.sh是 Isaac Lab 的统一 CLI 入口详见 isaaclab.sh./isaaclab.sh train --rl_library rsl_rl --task Isaac-Velocity-Rough-H1-v0训练产物checkpoint、params/env.yaml、params/agent.yaml等会写入logs/rsl_rl/h1_rough/目录下以时间戳命名的实验子目录该路径拼接逻辑见 scripts/reinforcement_learning/rsl_rl/train.py 中log_root_path os.path.join(logs, rsl_rl, agent_cfg.experiment_name)与log_dir的构造代码。第二步回放训练结果并导出策略./isaaclab.sh play --rl_library rsl_rl --task Isaac-Velocity-Rough-H1-v0 --num_envs 64 --checkpoint logs/rsl_rl/h1_rough/EXPERIMENT_NAME/POLICY_FILE.pt --viz kit--num_envs 64以 64 个并行环境回放play 脚本会用它覆盖env_cfg.scene.num_envs见 scripts/reinforcement_learning/rsl_rl/play.py 中env_cfg.scene.num_envs args_cli.num_envs if args_cli.num_envs is not None else ...--checkpoint指向训练产出的.pt文件--viz kit以 GUI 方式启动可直观看到机器人运动结束模拟可关闭窗口或在终端按CtrlC。关键点导出动作发生在 play 脚本内。回放期间play 脚本会基于runner.get_inference_policy()拿到的推理策略在 checkpoint 同级的exported/目录下自动导出policy.ptjit与policy.onnxONNX两个文件。从 play.py 源码看导出逻辑会根据安装的 RSL RL 版本走两条路径rsl-rl 4.0.0直接调用runner.export_policy_to_jit(path..., filenamepolicy.pt)与runner.export_policy_to_onnx(...)rsl-rl 4.0.0手动提取runner.alg.policy/runner.alg.actor_critic网络与actor_obs_normalizer观测归一化器再调用export_policy_as_jit/export_policy_as_onnx完成导出。注意事项并非所有学习库都支持导出 jit/onnx。文档明确指出对不支持导出的库需要查阅对应库的play.py脚本了解其策略初始化方式后自行编写推理代码。这也是为什么本教程的推理脚本要求先拿到 jit 文件——它把策略与训练框架彻底解耦。第三步在 USD 仓库场景中运行策略./isaaclab.sh -p scripts/tutorials/03_envs/policy_inference_in_usd.py --checkpoint logs/rsl_rl/h1_rough/EXPERIMENT_NAME/exported/policy.pt --viz kit注意这里--checkpoint指向的是第二步导出的exported/policy.ptjit 文件而非原始训练 checkpoint。-p参数让isaaclab.sh以 Python 脚本方式运行配合--viz kit打开可视化窗口即可看到 H1 机器人在仓库地面上前行。底层实现印证配置、资产与工具链环境配置的出处教程中直接修改的H1RoughEnvCfg_PLAY继承自H1RoughEnvCfg后者又继承自 source/isaaclab_tasks/isaaclab_tasks/manager_based/locomotion/velocity/velocity_env_cfg.py 中的LocomotionVelocityRoughEnvCfg。其中场景地形默认配置即terrain TerrainImporterCfg( terrain_typegenerator, terrain_generatorROUGH_TERRAINS_CFG, max_init_terrain_level5, ... )教程将其整体替换为terrain_typeusd的TerrainImporterCfg正是利用了TerrainImporterCfg支持多地形来源的设计程序化生成器 / USD 文件 / 平面属于该配置类terrain_type枚举中的合法取值。Nucleus 资产路径ISAAC_NUCLEUS_DIR定义于 source/isaaclab/isaaclab/utils/assets.py其值来自解析 apps/isaaclab.python.kit 中persistent.isaac.asset_root.cloud配置得到的 Nucleus 服务器根目录NUCLEUS_ASSET_ROOT_DIR/Isaac。教程使用的仓库资产完整路径为{ISAAC_NUCLEUS_DIR}/Environments/Simple_Warehouse/warehouse.usd即 Nucleus 服务器Isaac目录下预置的Simple_Warehouse场景无需手动下载Isaac Lab 会在加载时自动从服务器获取TerrainImporterCfg内部依赖同一套资产检索机制。策略加载的健壮性torch.jit.load(file, map_locationargs_cli.device)中的file是read_file返回的io.BytesIO对象而非文件路径。这样做的好处是read_file屏蔽了本地文件 / Nucleus 远端文件的差异策略读取逻辑与存储位置解耦同时map_location确保模型权重被显式放置到推理设备上CPU 场景下避免默认 CUDA 设备不存在导致崩溃。关键经验与注意事项环境数量决定设备选择小批量环境如 1 个推荐 CPU 推理并关闭 Fabric大批量并行环境仍应以 GPU 为主。切勿在不理解开销模型的情况下盲目套用。导出格式依赖学习库jit/onnx 导出能力由各 RL 库的 play 脚本实现使用前先确认目标库支持对不支持的库回到其play.py学习策略初始化方式。PLAY 配置已做推理预调优H1RoughEnvCfg_PLAY自带固定前向速度命令、关闭观测噪声、移除随机扰动、压缩地形规模等设定二次开发时可以在其上继续覆写无需从零构造。USD 替换地形只动一个字段将terrain从generator换成usd并指定usd_path即可prim_path应设置为场景中地面 prim 的目标路径教程为/World/ground。CtrlC 或关闭窗口均可退出GUI 模式下推理循环以simulation_app.is_running()为条件终止方式不影响后续文件导出的策略早已落盘。总结本教程演示了一条完整的训练 → 回放导出 → 场景化部署链路先用./isaaclab.sh train训练Isaac-Velocity-Rough-H1-v0再用./isaaclab.sh play回放并自动导出 jit/onnx 策略最后通过 scripts/tutorials/03_envs/policy_inference_in_usd.py 对H1RoughEnvCfg_PLAY做单环境 CPU USD 地形三处最小改造把 H1 机器人放进仓库场景完成推理。整个过程的精髓在于Isaac Lab 的 Manager 架构把场景、任务、策略三者解耦部署时只需替换地形资产与运行设备策略代码零改动即可跨场景复用。【免费下载链接】IsaacLabUnified framework for robot learning with multi-physics/renderer support项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表