import sys sys.argv = ['play', '--headless'] from isaaclab.app import AppLauncher launcher = AppLauncher({"headless": True}) sim_app = launcher.app import torch import json import gymnasium as gym import isaaclab_tasks env = gym.make("Isaac-Humanoid-Direct-v0", cfg=None) from isaaclab_rl.rsl_rl import RslRlVecEnvWrapper env = RslRlVecEnvWrapper(env) from rsl_rl.runners import OnPolicyRunner from isaaclab_tasks.direct.humanoid.agents.rsl_rl_ppo_cfg import HumanoidPPORunnerCfg runner_cfg = HumanoidPPORunnerCfg() runner = OnPolicyRunner(env, runner_cfg.to_dict(), log_dir=None, device="cuda") runner.load("/workspace/IsaacLab/logs/rsl_rl/humanoid_direct/2026-04-13_00-52-00/model_2999.pt") policy = runner.get_inference_policy(device="cuda") obs, _ = env.get_observations() trajectory = [] for step in range(500): with torch.no_grad(): actions = policy(obs) obs, _, dones, infos = env.step(actions) qpos = env.unwrapped.scene["robot"].data.joint_pos[0].cpu().numpy().tolist() qvel = env.unwrapped.scene["robot"].data.joint_vel[0].cpu().numpy().tolist() root_pos = env.unwrapped.scene["robot"].data.root_pos_w[0].cpu().numpy().tolist() root_quat = env.unwrapped.scene["robot"].data.root_quat_w[0].cpu().numpy().tolist() trajectory.append({"step": step, "joint_pos": qpos, "joint_vel": qvel, "root_pos": root_pos, "root_quat": root_quat, "actions": actions[0].cpu().numpy().tolist()}) if step % 100 == 0: print(f"Step {step}/500 - root_pos: {root_pos[:3]}") with open("/workspace/isaac_trajectory.json", "w") as f: json.dump(trajectory, f) print(f"Saved {len(trajectory)} steps to /workspace/isaac_trajectory.json") sim_app.close()