验证等级
可见原生 Isaac。 Run 明确请求 runtime.launch_profile: visible;有效运行会打开
原生 Isaac application,并通过 FastSim API 读取状态。
前置条件
- 在同一环境安装 FastSim
0.1.0a6、UniRoboSim Core0.10.0和unirobosim-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 执行流程
asyncio.run(main())创建调用方的异步事件循环。fastsim.app(RUN_FILE)编译 Run,并创建惰性的 application facade。async with保证离开作用域时清理后端,即使中途报错也会清理。await simulation.start()准备场景,并启动连续物理推进。run_info()返回稳定 Run 身份,不泄漏内部对象。pause()后调用single_step(),建立一个显式 committed boundary,使随后读取 对应唯一、明确的仿真 tick。state()在该边界返回同 generation、同 tick 的 world/observation 一致性快照。- 最后一行打印当前后端发布的统一 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: visible、DISPLAY和 GPU 权限。 declared joint names ...:component manifest 和 USD 的关节名不一致。latest world and observation snapshots do not share one committed tick:保留本例的pause()+single_step()边界。
下一步
继续阅读 03 — 生命周期控制。