验证等级
可见原生 Isaac。 FastSim 暂停、单步、恢复和重置世界时,原生窗口始终保留。
前置条件
- 同一 Python 3.12 环境中的 FastSim
0.1.0a6、UniRoboSim Core0.10.0和unirobosim-isaaclab==0.10.1。 - Isaac Lab 3.0 / Isaac Sim 6.0、NVIDIA GPU 和可用的显示环境。
配置
run.yaml 复用案例 02 的小型双关节机器人。物理与控制频率都是 60 Hz,严格 1:1,
因此一次 single_step() 对应一个物理 tick 和一个控制边界。
yaml
backend: isaaclab # 选择 Isaac Lab provider。
runtime:
launch_profile: visible # 保留原生 application 窗口。
physics_hz: 60 # 每模拟秒的物理 tick 数。
control_hz: 60 # 每模拟秒的控制边界数。
seed: 13 # 可复现的 generation seed。
scenario:
scene:
robots:
arm:
use: robot://fastsim/demo-two-joint-arm
剩余 pose 和 initial_state 行会把机器人明确放在世界原点,并把关节设为零。
按顺序理解 Python
show(...)只读取不可变ApplicationSnapshot,打印紧凑生命周期轨迹。start()准备世界并进入连续的running。pause()等待安全边界,然后保留世界并进入paused。single_step()推进一个物理 tick,结束后仍为paused。resume()恢复连续物理。- 第二次
pause()让随后的 reset 状态转换更清晰。 reset()按配置初始状态和 seed 策略开启新 generation。- 离开
async with会关闭全部 runtime/backend 资源。
pause() 不等于 stop():stop 对当前应用是终止操作,而 pause 会保留场景。
运行
bash
cd demo/fundamentals/03_lifecycle_controls
fastsim config validate run.yaml --json
python main.py
状态应按 running → paused → paused → running → paused → paused 打印。single-step
后的 tick 必须大于前一个 paused tick;reset 会增加 generation、把 tick 恢复为零、还原
配置中的初始状态,并保留调用前的 paused 生命周期状态。
常见错误
- 在 running 时直接 single-step:先 pause,才能得到明确边界。
- 想稍后检查却调用 stop:应该用 pause;stop 会拆除 live Run。
- 认为 reset 延续旧 generation:订阅和控制 chunk 都必须把新 generation 当成新的世界权威。
下一步
继续阅读 04 — 阻塞式关节轨迹。