验证等级

可见原生 Isaac。 Run 明确请求 runtime.launch_profile: visible;有效运行会打开 原生 Isaac application,并通过 FastSim API 读取状态。

前置条件

  • 在同一环境安装 FastSim 0.1.0a6、UniRoboSim Core 0.10.0unirobosim-isaaclab==0.10.1
  • Isaac Lab 3.0 / Isaac Sim 6.0 对应的 Python 3.12。
  • NVIDIA GPU 和可用的显示环境。

配置

runtime 请求可见原生窗口,并同时选择 60 Hz 物理与控制频率。 scenario.scene.robots 中的 arm 选择共享的双关节 USD;pose 放置机器人根; initial_state.joints 把两个关节置零。

yaml
robots:                              # 场景中的所有机器人实例。
  arm:                               # 后续控制 API 使用的别名。
    use: robot://fastsim/demo-two-joint-arm
    pose:
      xyz_m: [0.0, 0.0, 0.0]         # 世界系根位置,单位米。
      quat_xyzw: [0.0, 0.0, 0.0, 1.0] # 根姿态,顺序 XYZW。
    initial_state:
      joints:
        joint_1: 0.0                  # 转动关节初始角,单位弧度。
        joint_2: 0.0

Python 执行流程

  1. asyncio.run(main()) 创建调用方的异步事件循环。
  2. fastsim.app(RUN_FILE) 编译 Run,并创建惰性的 application facade。
  3. async with 保证离开作用域时清理后端,即使中途报错也会清理。
  4. await simulation.start() 准备场景,并启动连续物理推进。
  5. run_info() 返回稳定 Run 身份,不泄漏内部对象。
  6. pause() 后调用 single_step(),建立一个显式 committed boundary,使随后读取 对应唯一、明确的仿真 tick。
  7. state() 在该边界返回同 generation、同 tick 的 world/observation 一致性快照。
  8. 最后一行打印当前后端发布的统一 world-state 路径。

运行

bash
cd demo/fundamentals/02_start_and_read_state
fastsim config validate run.yaml --json
python main.py

预期结果:原生 Isaac 窗口打开;终端报告 application 状态 running、后端 isaaclab、正数 generation、非负 tick,并在统一 world 字段中包含 robots.arm.joint_position。上下文管理器完成清理后,窗口会关闭。

常见错误

  • backend provider ... not installed:把 Isaac Lab Adapter 安装进执行脚本的同一环境。
  • 没有原生窗口:确认 runtime.launch_profile: visibleDISPLAY 和 GPU 权限。
  • declared joint names ...:component manifest 和 USD 的关节名不一致。
  • latest world and observation snapshots do not share one committed tick:保留本例的 pause() + single_step() 边界。

下一步

继续阅读 03 — 生命周期控制