0 前言
官方教程:https://isaac-sim.github.io/IsaacLab/main/source/tutorials/00_sim/create_empty.html
Isaacsim+Isaaclab安装:https://blog.csdn.net/m0_47719040/article/details/146389391?spm=1001.2014.3001.5502
在前序课程中,我们已经学习了如何使用独立的python脚本在Isaacsim中启动 Isaac Sim 模拟器。
本教程介绍如何从独立 Python 脚本启动和控制 Isaac Sim 模拟器。它利用 Isaac Lab 框架创建了一个空场景,并介绍了框架中使用的两个主要类app.AppLauncher和sim.SimulationContext。
教程对应的脚本为create_empty.py
在scripts/tutorials/00_sim
目录下。
运行该程序:
- 进入安装 isaac lab 时创建的conda虚拟环境
- 在该环境下进入 isaac sim文件夹中运行
source setup_conda_env.sh
- 终端中输入
python scripts/tutorials/00_sim/create_empty.py
运行你的代码
1 启动模拟器
启动 Isaac-sim 是 Isaac-lab 中运行独立python脚本的第一步,该步可以通过app.AppLauncher
类实现,此类通过封装isaacsim.SimulationApp
类来实现仿真。它提供了使用命令行参数和环境变量配置模拟器的机制。
注:在 isaac-sim and isaac-lab 专栏中我们已经学过如何在python中启动 isaacsim
from isaacsim import SimulationApp
simulation_app = SimulationApp({"headless": False})
api 使用:
本节旨在介绍如何将命令行选项添加到用户自定义的argparse.ArgumentParser
中,通过将参数解析器的实例(也就是下述代码中的parser
)传递给app.AppLauncher.add_app_launcher_args()
方法来完成的,该方法会向其附加不同的参数。这些包括无头启动应用程序、配置不同的 Livestream 选项以及启用离屏渲染。
# Python标准库模块,用于解析命令行参数。
import argparse
# Isaac Lab框架提供的类,用于封装Omniverse应用启动逻辑。
from isaaclab.app import AppLauncher# 创建参数解析器
# 创建一个ArgumentParser对象,设置描述为"创建一个空舞台的教程",用于帮助信息显示。
parser = argparse.ArgumentParser(description="Tutorial on creating an empty stage.")# 添加应用启动参数,该类封装了`isaacsim.SimulationApp`类
AppLauncher.add_app_launcher_args(parser)
# 解析实际输入的命令行参数,生成包含参数值的args_cli命名空间对象。
args_cli = parser.parse_args()
# 使用解析后的参数实例化AppLauncher
app_launcher = AppLauncher(args_cli)
# 获取仿真应用实例
simulation_app = app_launcher.app
2 录入Python库
一旦模拟应用程序运行,就可以从Isaac Sim和其他库中导入不同的Python模块。
这里我们导入以下模块
isaaclab.sim
:Isaac Lab
中用于所有核心模拟器相关操作的子包。
from isaaclab.sim import SimulationCfg, SimulationContext
3 配置模拟场景
在 Isaac Lab 中,该类sim.SimulationContext
继承自 Isaac Sim
,isaacsim.core.api.simulation_context.SimulationContext
可以控制物理仿真的开始、停止、步进及处理一些复杂的细节。
官方给出了将物理和渲染时间步长设置为 0.01 秒的代码案例。这是通过将这些量传递给sim.SimulationCfg
来实现的,然后使用它来创建sim.SimulationContext
的实例。
类似与之前所讲的world
# 创建仿真配置对象# dt=0.01:设置物理仿真步长为0.01秒(100Hz)sim_cfg = SimulationCfg(dt=0.01)# 实例化仿真场景sim = SimulationContext(sim_cfg)# 设置主摄像机视角# 参数格式:set_camera_view(camera_position, look_at_target)# 此处将摄像机放置在(2.5, 2.5, 2.5)坐标,对准原点(0,0,0)sim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])
4 开始模拟
模拟环境配置好后的第一件事是初始化物理仿真环境,即调用sim.SimulationContext.reset()
方法。
对比:
sim.SimulationContext.reset()
:初始化物理仿真环境并开始仿真。sim.SimulationContext.play()
:只开始仿真。
实际上类似于之前学到的world.reset()
。
官方在初始化之后给出了一个简单的仿真循环,模拟器在模拟的过程中重复执行sim.SimulationContext.step()
,该函数参数为render
默认为True
,指明是否更新渲染。
# 重置仿真环境,初始化物理状态,加载默认场景(空舞台)sim.reset()# 输出初始化完成提示print("[INFO]: Setup complete...")# 主仿真循环while simulation_app.is_running(): # 检测应用是否仍在运行(窗口未关闭)# 执行单步仿真(物理计算+渲染更新),循环频率由dt参数控制sim.step()
5 退出仿真并关闭窗口
simulation_app.close()