创建一个空场景#
本教程介绍如何通过独立 Python 脚本启动和控制 Isaac Sim 仿真器。我们将在 Isaac Lab 中搭建空场景,并介绍框架的两个主要入口: app.launch_simulation() 上下文管理器和 sim.SimulationContext 类。
请在开始本教程之前查看 Isaac Sim 工作流 ,以获得对与仿真器一起工作的初步了解。
代码#
本教程对应于 scripts/tutorials/00_sim 目录中的 create_empty.py 脚本。
create_empty.py 的代码
1# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
2# All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5
6"""This script demonstrates how to create a simple stage in Isaac Sim.
7
8.. code-block:: bash
9
10 # Usage
11 uv run python scripts/tutorials/00_sim/create_empty.py
12
13"""
14
15"""Parse the command-line arguments first."""
16
17
18import argparse
19
20from isaaclab.app import add_launcher_args, launch_simulation
21
22# create argparser
23parser = argparse.ArgumentParser(description="Tutorial on creating an empty stage.")
24# append simulation launcher cli args
25add_launcher_args(parser)
26# parse the arguments
27args_cli = parser.parse_args()
28
29"""Rest everything follows."""
30
31from isaaclab.sim import SimulationCfg, SimulationContext
32
33
34def main():
35 """Main function."""
36
37 # Configure the simulation
38 sim_cfg = SimulationCfg(dt=0.01, device=args_cli.device)
39 # Launch the simulator runtime that the configuration needs
40 with launch_simulation(sim_cfg, args_cli):
41 # Initialize the simulation context
42 sim = SimulationContext(sim_cfg)
43 # Set main camera
44 sim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])
45
46 # Play the simulator
47 sim.reset()
48 # Now we are ready!
49 print("[INFO]: Setup complete...")
50
51 # Simulate physics
52 while sim.is_running():
53 # perform step
54 sim.step()
55
56
57if __name__ == "__main__":
58 # run the main function
59 main()
代码解释#
解析命令行参数#
独立脚本首先解析命令行参数。此时尚未启动仿真器;确定仿真配置需要哪种运行时后,再启动它。
将用户定义的 argparse.ArgumentParser 实例传给 app.add_launcher_args() ,即可添加启动相关的命令行选项,包括选择仿真设备的 --device 、打开可视化窗口的 --visualizer (或 --viz ),以及启用仿真器串流的 --livestream 。这些选项随后传给 app.launch_simulation() 。
import argparse
from isaaclab.app import add_launcher_args, launch_simulation
# create argparser
parser = argparse.ArgumentParser(description="Tutorial on creating an empty stage.")
# append simulation launcher cli args
add_launcher_args(parser)
# parse the arguments
args_cli = parser.parse_args()
导入 python 模块#
Isaac Lab 配置类和工具可在仿真器启动前导入。需要仿真器运行的模块,例如 Isaac Sim 的 omni.* 、 isaacsim.* 模块,以及操作 USD 舞台的 Isaac Lab 类,则要在启动后导入,后续教程会展示这种用法。这里导入以下模块:
isaaclab.sim:Isaac Lab 中用于所有核心仿真器相关操作的子包。
from isaaclab.sim import SimulationCfg, SimulationContext
配置仿真上下文#
当从独立脚本启动仿真器时,用户可以完全控制仿真器的播放、暂停和步进。所有这些操作都通过 仿真上下文 处理。它负责各种时间轴事件,并为仿真配置物理场景。
Isaac Lab 的 sim.SimulationContext 封装了 Isaac Sim 的仿真栈,可以通过 Python dataclass 对象配置仿真,并处理仿真步进中的一些细节。
对于本教程,我们将将物理和渲染时间步长设置为 0.01 秒。通过将这些数量传递给 sim.SimulationCfg ,然后用它创建仿真上下文的实例。
创建仿真上下文前,必须先启动仿真器运行时。 app.launch_simulation() 上下文管理器会结合给定配置和已解析的命令行参数,只启动实际需要的运行时。默认 PhysX 物理后端运行在 Isaac Sim(Kit)内,因此这里会启动 Isaac Sim;Newton 等不依赖 Kit 的后端则完全不需要 Isaac Sim。除非请求可视化器,例如指定 --viz kit ,否则仿真以无界面模式运行。所有使用仿真器的代码均放在 with 块内,离开该代码块时会自动关闭运行时。
# Configure the simulation
sim_cfg = SimulationCfg(dt=0.01, device=args_cli.device)
# Launch the simulator runtime that the configuration needs
with launch_simulation(sim_cfg, args_cli):
# Initialize the simulation context
sim = SimulationContext(sim_cfg)
# Set main camera
sim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])
创建仿真上下文后,我们只配置了作用于仿真场景的物理。这包括用于仿真的设备、重力矢量和其他高级求解器参数。现在还有两个主要步骤剩下来运行仿真:
设计仿真场景: 添加传感器、机器人和其他仿真对象
运行仿真循环: 使仿真器进行步进,并从仿真器中设置和获取数据
在本教程中,我们首先看 Step 2 的空场景,以便首先关注仿真控制。在以下教程中,我们将深入研究 Step 1 和使用仿真处理程序与仿真器进行交互。
运行仿真#
在设置仿真场景之后,第一件事是调用 sim.SimulationContext.reset() 方法。此方法播放时间轴并初始化仿真器中的物理处理。在第一次步进仿真器之前必须始终调用此方法,否则仿真处理不会正确初始化。
备注
sim.SimulationContext.reset() 与 sim.SimulationContext.play() 不同:后者仅播放时间线,不会初始化物理句柄。
启动仿真时间轴后,我们建立一个简单的仿真循环,反复推进仿真器。没有打开可视化器时,循环条件 sim.SimulationContext.is_running() 会让循环持续运行;否则循环在最后一个可视化窗口关闭时结束。 sim.SimulationContext.step() 接受 render 参数,决定这一步是否包含渲染相关事件的更新。默认值为 True。
# Play the simulator
sim.reset()
# Now we are ready!
print("[INFO]: Setup complete...")
# Simulate physics
while sim.is_running():
# perform step
sim.step()
退出仿真#
无需显式调用关闭函数。仿真循环结束、离开 with launch_simulation(...) 块时,仿真器运行时会停止,窗口也会关闭。
代码执行#
现在我们已经浏览了代码,让我们运行脚本并查看结果:
python scripts/tutorials/00_sim/create_empty.py --viz kit
仿真应该正在进行,并且场景应该正在渲染。要停止仿真,可以关闭窗口或在终端中按下 Ctrl+C 。
向上述脚本传入 --help ,可查看之前由 app.add_launcher_args() 添加的各种命令行参数。以无界面模式运行时,省略可视化器选项:
python scripts/tutorials/00_sim/create_empty.py
如果配置或命令已选择可视化器,可用 --visualizer none 或 --viz none 强制禁用所有可视化器。
现在我们对如何运行仿真有了基本的了解,让我们转到下一个教程,在那里我们将学习如何将资产添加到场景。