适合中国宝宝体质Isaac Lab学习记录1.创建空白场景

适合中国宝宝体质Isaac Lab学习记录1.创建空白场景

创建一个空场景

本教程展示了如何从独立的 Python 脚本中启动和控制 Isaac Sim 模拟器。它在 Isaac Lab 中设置了一个空场景,并介绍了框架中使用的两个主要类,app.AppLaunchersim.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])

运行模拟

在创建模拟上下文之后,我们只配置了作用于模拟场景的物理。这包括用于模拟的设备、重力向量以及其他高级求解器参数。现在运行模拟剩下两个主要步骤:

  1. 设计模拟场景:添加传感器、机器人和其他模拟对象
  2. 运行模拟循环:移动模拟器,并从模拟器设置和获取数据

在这个教程中,我们首先查看空场景的步骤 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

现在我们已经了解了如何运行模拟,接下来让我们继续下一个教程,我们将学习如何将资产添加到舞台中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值