[isaacsim]Isaac Lab 训练策略部署到 Isaac Sim 5.1.0 教程

[isaacsim]Isaac Lab 训练策略部署到 Isaac Sim 5.1.0 教程 Isaac Lab 训练策略部署到 Isaac Sim 5.1.0 教程1. 概述Isaac Lab 训练得到的强化学习策略可以部署到 Isaac Sim 中实现机器人运动控制Locomotion导航系统联调ROS2集成Sim-to-Sim验证Sim-to-Real验证根据 NVIDIA 官方示例H1、Spot部署流程本质上是Isaac Lab │ ├── policy.pt └── env.yaml │ ▼ Isaac Sim PolicyController │ ├── 构造 Observation ├── Policy 推理 ├── Action 转 Joint Target └── 驱动机器人2. Isaac Lab 训练例如训练 H1 平地行走策略./isaaclab.sh-p\scripts/reinforcement_learning/rsl_rl/train.py\--taskIsaac-Velocity-Flat-H1-v0\--headless训练结束后会生成logs/ └── rsl_rl/ └── Isaac-Velocity-Flat-H1-v0/ └── timestamp/ ├── model_xxxx.pt ├── params/ │ ├── env.yaml │ └── agent.yaml └── ...其中model_xxxx.pt是训练Checkpoint。3. 导出部署模型官方推荐使用./isaaclab.sh-p\scripts/reinforcement_learning/rsl_rl/play.py\--taskIsaac-Velocity-Flat-H1-v0导出exported/ ├── policy.pt ├── policy.onnx其中policy.pt是TorchScript格式。Isaac Sim官方Policy Example使用torch.jit.load(policy.pt)直接加载。4. 部署所需文件最终部署只需要policy.pt env.yamlpolicy.pt负责Observation ↓ Neural Network ↓ Actionenv.yaml负责机器人配置 控制频率 PD参数 Action配置 默认关节位置实际部署过程中env.yaml比模型本身更重要。5. Isaac Sim 官方部署架构官方示例源码位置exts/ └── isaacsim.robot.policy.examples/核心目录isaacsim/robot/policy/examples/ ├── controllers │ ├── config_loader.py │ └── policy_controller.py ├── robots │ ├── h1.py │ ├── spot.py │ └── anymal.py └── utils6. PolicyController官方基类classPolicyController(BaseController)加载部署模型self.policytorch.jit.load(policy_file)推理obstorch.from_numpy(obs).view(1,-1).float()actionself.policy(obs)即obs ↓ policy.pt ↓ action机器人无关逻辑全部在这里完成。7. env.yaml解析部署时parse_env_config(env.yaml)读取训练配置。读取关节参数scene:robot:actuators:获取stiffness damping effort_limit velocity_limit读取默认关节位置scene:robot:init_state:joint_pos:生成default_pos读取控制频率decimation:4sim:dt:0.005生成_decimation以及dt读取Action配置actions:生成action_scale8. H1 部署实例分析官方实现classH1FlatTerrainPolicy(PolicyController)加载模型self.load_policy(h1_policy.pt,h1_env.yaml)9. Observation构造官方H1 Observation长度69组成obs[0:3]base_lin_vel obs[3:6]base_ang_vel obs[6:9]projected_gravity obs[9:12]command obs[12:31]joint_pos-default_pos obs[31:50]joint_vel obs[50:69]previous_action即Base Linear Velocity Base Angular Velocity Projected Gravity Command Joint Position Joint Velocity Last Action部署时必须保持顺序一致维度一致Scaling一致否则策略无法工作。10. Action解释官方代码joint_positionsdefault_posaction*action_scale因此action并不是Torque也不是Velocity而是Joint Position Offset即Target Joint Position Default Position Action Scale × Policy Output11. 机器人控制官方实现actionArticulationAction(joint_positionstarget_pos)robot.apply_action(action)即Policy Output ↓ Joint Target ↓ Articulation Controller ↓ Robot12. PD参数自动设置初始化时get_robot_joint_properties(env_yaml,robot.dof_names)自动读取stiffness damping effort_limit velocity_limit并设置set_gains()set_max_efforts()set_max_joint_velocities()因此PD控制参数与训练环境保持一致。13. 控制频率Isaac Lab通常配置sim:dt:0.005decimation:4则Physics Frequency: 200 Hz Policy Frequency: 50 Hz官方实现ifpolicy_counter%decimation0:actionpolicy(obs)保证与训练时一致。14. 部署自己的训练模型假设已经导出policy.pt env.yaml方法1同类型机器人推荐例如重新训练H1策略仅修改self.load_policy(/path/to/policy.pt,/path/to/env.yaml)即可。无需修改Observation逻辑。方法2新机器人例如Go2 G1 自定义机器人复制robots/h1.py创建robots/go2.py修改机器人USDusd_path.../go2.usdPolicy路径self.load_policy(go2_policy.pt,go2_env.yaml)Observation重写_compute_observation()保证与训练环境一致。Action维度例如self._previous_actionnp.zeros(12)对应12个关节关节顺序部署必须保证robot.dof_names与训练时完全一致。否则策略会失效。15. 完整部署流程总结Isaac Lab train.py ↓ checkpoint.pt ↓ play.py ↓ policy.pt env.yaml Isaac Sim load_policy( policy.pt, env.yaml ) ↓ 读取 stiffness damping default_pos action_scale decimation ↓ 构造 Observation ↓ policy(obs) ↓ action ↓ default_pos action * action_scale ↓ ArticulationAction ↓ Robot Motion16. 推荐实践对于 Isaac Sim 5.1直接复用官方PolicyController参考H1FlatTerrainPolicy使用 Isaac Lab 导出的policy.pt使用原始env.yaml保持 Observation 顺序一致保持关节顺序一致保持控制频率一致保持 PD 参数一致这样通常可以最快实现 Isaac Lab → Isaac Sim 的策略迁移。