用途
本技能用于以无头方式(不带窗口)启动 Isaac Sim,支持批处理仿真、自动化数据生成以及服务器端负载,依赖受支持的 CLI 参数和 SimulationApp 模式。
前置条件
- 已构建的 Isaac Sim($ISAAC_SIM_DIR 或 _build/linux-x86_64/release)。
- 具备当前驱动的 NVIDIA GPU(nvidia-smi)。
- 来自 isaac-sim-orchestrator 的 shell 环境约定:$ISAAC_SIM_DIR、$ISAAC_LAB_DIR、$WORKSPACE_DIR。
限制
- 目标为 Isaac Sim 6 / Kit 110,除非某节另有说明。
- 不替代 NVIDIA 官方文档对不受支持的边缘情况的说明。
- 不涉及 Docker 镜像、容器编排或 CI/CD 接线;这些属于包装 Isaac Sim 的部署基础设施。
可用脚本
| 脚本 | 用途 | 参数 |
|---|---|---|
| scripts/batch_simulation.py | Isaac Sim(Kit 110)无头批量仿真循环 | 见脚本 --help |
| scripts/ci_physics_nightly.sh | 通过 python.sh 或 Kit CLI 的 CI 仅物理夜间运行器 | <test_script.py> [args...] |
运行脚本的方式:在暴露技能执行助手的智能体运行时中,使用 run_script("scripts/batch_simulation.py", args=["--help"]) 调用;在已构建的 Isaac Sim 目录树中,使用 _build/*/release 下的 ./python.sh(Linux)或 python.bat(Windows)运行同一文件,或直接执行不依赖仿真器的 shell 助手。
启动模式
- 带头模式(默认):
./isaac-sim.sh,以完整 UI 启动 isaacsim.exp.full.kit。 - 带渲染的无头模式(无窗口生成图像):
./isaac-sim.sh --no-window(原生无头,使用 EGL/Vulkan 离屏);某些系统需显式 DISPLAY:DISPLAY=:0 ./isaac-sim.sh --no-window。 - 无渲染无头模式(仅物理,无视口无渲染):
./isaac-sim.sh --no-window --/app/renderer/enabled=false。 - Python 独立脚本:
./python.sh my_simulation.py,脚本通过 SimulationApp 配置控制无头行为,python.sh 本身无需 --no-window 参数。 - Kit CLI 执行脚本:默认
./kit/kit apps/isaacsim.exp.full.kit --exec "my_script.py";无头仅物理批量形如./kit/kit apps/isaacsim.exp.full.kit --no-window --/app/renderer/enabled=false --exec "physics_batch.py"。
关键 CLI 参数
--no-window(禁用窗口创建)、--/app/renderer/enabled=false(完全禁用渲染)、--/app/window/width=W、--/app/window/height=H、--/app/settings/fabricDefaultStageFrameHistoryCount=N、--enable EXT_ID、--ext-folder PATH、--exec SCRIPT、--no-ros-env(跳过 ROS 2 自动 source)。
应用配置
| 配置文件 | 用途 |
|---|---|
| isaacsim.exp.full.kit | 完整仿真(默认) |
| isaacsim.exp.full.newton.kit | Newton 物理引擎 |
| isaacsim.exp.full.fabric.kit | Fabric 场景委托 |
| isaacsim.exp.base.kit | 最小基础(启动更快) |
| isaacsim.exp.base.python.kit | 纯 Python 基础 |
| isaacsim.exp.base.python.physics.headless.kit | 仅物理无头(CI 夜间) |
| isaacsim.exp.base.zero_delay.kit | 零延迟基础 |
CI 仅物理夜间运行
使用专用 kit 文件:./kit/kit apps/isaacsim.exp.base.python.physics.headless.kit --no-window --/app/renderer/enabled=false --exec "test_physics_batch.py"。对于自行启动 SimulationApp 的独立 Python 脚本,使用 python.sh 并传入渲染禁用参数:./python.sh test_physics_batch.py --/renderer/enabled=false --/app/window/enabled=false --/app/livestream/enabled=false。
该 kit 文件内置:renderer.enabled = false;app.window.enabled = false;app.livestream.enabled = false;所有 UI/视口/操纵器扩展禁用;所有渲染扩展禁用(omni.hydra.rtx、omni.rtx.*、omni.syntheticdata、omni.replicator.core);物理优化循环设置(rateLimitEnabled = false、manualModeEnabled = true、useFixedTimeStepping = true)。包装脚本 scripts/ci_physics_nightly.sh 封装两种模式:设置 CI_KIT_MODE=1 使用 Kit CLI,不设置则默认使用 python.sh。
批量仿真模式
规范的引导模式位于 source/standalone_examples/api/isaacsim.simulation_app/hello_world.py(最小)和 load_stage.py(打开 stage 并带 --test 模式的步进循环)。N 轮批量驱动可在 Python for episode in range(N) 循环中包装该引导。使用当前 API:isaacsim.core.experimental.utils.stage 用于打开 stage/等待加载;isaacsim.core.simulation_manager.SimulationManager.setup_simulation(dt=..., device=...) 配置物理;isaacsim.core.experimental.utils.app(enable_extension、play、stop、update_app)驱动循环。骨架 run_batch_simulation(scene_path, num_episodes, steps_per_episode, dt, device) 为无头 SimulationApp 循环,打开 USD、等待加载、设置物理、步进并每个 episode 停止。参见 scripts/batch_simulation.py。避免使用旧版 isaacsim.core.api.World / isaacsim.core.utils.stage 路径,它们在 Kit 110 中已弃用。迁移参见 Renaming Extensions 中 omni.isaac.* → isaacsim.* 的映射。
批量/无头性能调优
仅物理(最快):config = {"headless": True, "renderer": None};步进循环中 world.step(render=False);吞吐量依场景复杂度约为实时的 10-50 倍。
内存管理:episode 之间清理 stage(world.clear() + 垃圾回收);使用可实例化资产(config.yaml 中 make_instanceable: true);用 nvidia-smi 监控 GPU 显存——未正确清理 stage 时 Kit 会泄漏;GB10(Jetson)最多约 35K prims、16GB 共享内存,需降低场景复杂度。
已知问题(Kit 110)
某些 GPU 配置下复杂 stage 的 Kit 110 无头视口需要 DISPLAY=:0;某些配置下没有 DISPLAY 视口从不初始化——使用 --no-window + 离屏渲染;CUDA OOM 用 nvidia-smi 监控,保持 GPU 显存利用率低于 90%;冷启动约 30-60 秒,交互式批量建议使用常驻进程;Newton 物理与 torch 冲突:切勿在物理稳定前 import torch。
故障排查
| 错误/症状 | 原因 | 解决方案 |
|---|---|---|
| 扩展或 import 找不到 | $ISAAC_SIM_DIR 错误或构建陈旧 | 将环境变量指向 _build/linux-x86_64/release 或重新构建 |
| 黑屏或空帧 | 缺少灯光或非 RTX 渲染模式 | 添加 dome/key 灯;确认 RTX / PathTracing 设置 |
| stage 加载或首次渲染卡住 | MDL 编译或 stage 过大 | 遵循 isaac-sim-troubleshooting 中的隔离步骤 |