适合中国宝宝体质Isaac Lab学习记录1.创建空白场景
创建一个空场景
本教程展示了如何从独立的 Python 脚本中启动和控制 Isaac Sim 模拟器。它在 Isaac Lab 中设置了一个空场景,并介绍了框架中使用的两个主要类,app.AppLauncher
和 sim.SimulationContext
。
在开始本教程之前,请查看 Isaac Sim 接口和 Isaac Sim 工作流程,以获得对使用模拟器的初步了解。
代码编号
本教程对应于 create_empty.py
脚本,位于 source/standalone/tutorials/00_sim
目录下。
# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
"""该脚本演示如何在 Isaac Sim 中创建一个简单的空场景。
.. code-block:: bash
# 使用方法
./isaaclab.sh -p source/standalone/tutorials/00_sim/create_empty.py
"""
"""首先启动 Isaac Sim 仿真器。"""
import argparse
from omni.isaac.lab.app import AppLauncher
# 创建参数解析器
parser = argparse.ArgumentParser(description="创建空场景的教程。")
# 添加 AppLauncher 命令行参数
AppLauncher.add_app_launcher_args(parser)
# 解析命令行参数
args_cli = parser.parse_args()
# 启动 omniverse 应用程序
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app
"""接下来的内容为仿真初始化和设置。"""
from omni.isaac.lab.sim import SimulationCfg, SimulationContext
def main():
"""主函数。"""
# 初始化仿真上下文
sim_cfg = SimulationCfg(dt=0.01) # 设置时间步长为0.01秒
sim = SimulationContext(sim_cfg) # 创建仿真上下文
# 设置主摄像机视角
sim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])
# 开始仿真
sim.reset() # 重置仿真
# 仿真准备就绪
print("[INFO]: 设置完成...")
# 开始物理仿真
while simulation_app.is_running(): # 当仿真应用程序仍在运行时
# 进行仿真步进
sim.step()
if __name__ == "__main__":
# 执行主函数
main()
# 关闭仿真应用程序
simulation_app.close()
代码解析
启动模拟器
使用独立 Python 脚本的工作第一步是启动仿真应用程序。这是必要的,因为 Isaac Sim 的各种依赖模块只有在仿真应用程序运行后才能使用。
这可以通过导入 app.AppLauncher
类来完成。这个实用类围绕 omni.isaac.kit.SimulationApp
类来启动模拟器。它提供了使用命令行参数和环境变量配置模拟器的机制。
对于这个教程,我们主要关注向用户定义的 argparse.ArgumentParser
添加命令行选项。这是通过将解析器实例传递给 app.AppLauncher.add_app_launcher_args()
方法来完成的,该方法向其中添加不同的参数。这包括无头启动应用程序、配置不同的 Livestream 选项以及启用离屏渲染。
import argparse
from omni.isaac.lab.app import AppLauncher
# 创建参数解析器
parser = argparse.ArgumentParser(description="创建空场景的教程。")
# 添加 AppLauncher 命令行参数
AppLauncher.add_app_launcher_args(parser)
# 解析命令行参数
args_cli = parser.parse_args()
# 启动 omniverse 应用程序
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app
导入 Python 模块
一旦模拟应用程序运行,就可以从 Isaac Sim 和其他库中导入不同的 Python 模块。这里我们导入以下模块:
omni.isaac.lab.sim
:Isaac Lab 中所有核心模拟器相关操作的子包。
from omni.isaac.lab.sim import SimulationCfg, SimulationContext
配置模拟上下文
当从独立脚本启动模拟器时,用户可以完全控制播放、暂停和单步执行模拟器。所有这些操作都通过模拟上下文处理。它负责各种时间线事件,并为模拟配置物理场景。
在 Isaac Lab 中,sim.SimulationContext
类从 Isaac Sim 的 omni.isaac.core.simulation_context.SimulationContext
继承,允许通过 Python 的 dataclass
对象配置模拟,并处理模拟步进的一些复杂性。
为此教程,我们将物理和渲染时间步长设置为 0.01 秒。这是通过将这些数量传递给 sim.SimulationCfg
来完成的,然后使用它来创建模拟上下文的实例。
# 初始化模拟上下文
sim_cfg = SimulationCfg(dt=0.01)
sim = SimulationContext(sim_cfg)
# 设置主摄像机视角
sim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])
运行模拟
在创建模拟上下文之后,我们只配置了作用于模拟场景的物理。这包括用于模拟的设备、重力向量以及其他高级求解器参数。现在运行模拟剩下两个主要步骤:
- 设计模拟场景:添加传感器、机器人和其他模拟对象
- 运行模拟循环:移动模拟器,并从模拟器设置和获取数据
在这个教程中,我们首先查看空场景的步骤 2,以首先关注模拟控制。在接下来的教程中,我们将探讨步骤 1 以及如何使用模拟句柄与模拟器交互。
运行模拟
首先,在设置模拟场景之后,需要调用 sim.SimulationContext.reset()
方法。此方法播放时间轴并初始化模拟器中的物理处理程序。必须在模拟器步进之前始终首次调用。否则,模拟器处理程序将无法正确初始化。
# 播放模拟器
sim.reset()
# 模拟设置完成
print("[INFO]: 设置完成...")
# 进行物理仿真
while simulation_app.is_running():
# 执行步进
sim.step()
退出模拟
最后,通过调用 omni.isaac.kit.SimulationApp.close()
方法停止模拟应用程序并关闭其窗口。
# 关闭仿真应用
simulation_app.close()
代码执行
现在我们已经通过了代码,让我们运行脚本并查看结果:
./isaaclab.sh -p source/standalone/tutorials/00_sim/create_empty.py
模拟应该正在播放,舞台应该正在渲染。要停止模拟,您可以关闭窗口,或者在终端中按 Ctrl+C
。
结果
传递 --help
到上述脚本将显示之前由 app.AppLauncher
类添加的不同命令行参数。要无头运行脚本,您可以执行以下操作:
./isaaclab.sh -p source/standalone/tutorials/00_sim/create_empty.py --headless
现在我们已经了解了如何运行模拟,接下来让我们继续下一个教程,我们将学习如何将资产添加到舞台中。