Orbit 使用指南 01| 创建空白场景 | Isaac Sim | Omniverse

如是我闻: 在使用指南01中

  1. 演示如何使用独立的Python脚本启动和控制Isaac Sim模拟器。
  2. 介绍Orbit框架中两个最常用的类app.AppLauncher和sim.SimulationContext。
  3. 实践在Oribit中设置一个空场景

代码

本指南对应于orbit/source/standalone/tutorials/00_sim目录中的create_empty.py脚本。

# Copyright (c) 2022-2024, The ORBIT Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause"""This script demonstrates how to create a simple stage in Isaac Sim... code-block:: bash# Usage./orbit.sh -p source/standalone/tutorials/00_sim/create_empty.py"""from __future__ import annotations"""Launch Isaac Sim Simulator first."""
import argparsefrom omni.isaac.orbit.app import AppLauncher# create argparser
parser = argparse.ArgumentParser(description="Tutorial on creating an empty stage.")
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
# parse the arguments
args_cli = parser.parse_args()
# launch omniverse app
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app"""Rest everything follows."""import tracebackimport carbfrom omni.isaac.orbit.sim import SimulationCfg, SimulationContextdef main():"""Main function."""# Initialize the simulation contextsim_cfg = SimulationCfg(dt=0.01, substeps=1)sim = SimulationContext(sim_cfg)# Set main camerasim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])# Play the simulatorsim.reset()# Now we are ready!print("[INFO]: Setup complete...")# Simulate physicswhile simulation_app.is_running():# perform stepsim.step()if __name__ == "__main__":try:# run the main executionmain()except Exception as err:carb.log_error(err)carb.log_error(traceback.format_exc())raisefinally:# close sim appsimulation_app.close()

代码解析

启动模拟器

在使用Orbit进行独立Python脚本开发时,第一步是启动模拟器应用。这一步是必要的,因为Isaac Sim的各种依赖模块只有在模拟器应用运行后才可用。

要实现这一步,我们可以使用app.AppLauncher类进行导入。这个实用程序类是基于,用于启动模拟器的omni.isaac.kit.SimulationApp类进行封装的。app.AppLauncher提供了使用命令行参数和环境变量配置模拟器的功能。

在本指南中,我们主要来看如何向用户自定义的argparse.ArgumentParser里,来添加命令行选项。通过将解析器实例传递给app.AppLauncher.add_app_launcher_args()方法,可以向解析器添加不同的参数。这些参数包括以无显模式启动应用程序、配置不同的实时流选项以及启用离屏渲染。

import argparsefrom omni.isaac.orbit.app import AppLauncher# create argparser
parser = argparse.ArgumentParser(description="Tutorial on creating an empty stage.")
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
# parse the arguments
args_cli = parser.parse_args()
# launch omniverse app
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app

导入python模块

当模拟应用启动后,我们可以导入来自Isaac Sim及其他库的多种Python模块。本例中,我们引入了两个重要模块:

  • carb:这是Omniverse提供的一个库,它包含了多种微服务和诊断工具,用于增强应用的功能和性能。

  • omni.isaac.orbit.sim:这是Orbit框架中的一个专门子包,专注于执行所有与核心模拟器操作相关的任务。


import carbfrom omni.isaac.orbit.sim import SimulationCfg, SimulationContext

设置模拟环境

通过独立脚本启动模拟器,我们可以控制模拟器的播放、暂停和逐步执行。这些操作均通过模拟环境(simulation context) 来实现。模拟环境负责管理时间线上的各种事件,并为模拟设置物理场景。

在Orbit平台中,sim.SimulationContext类是基于Isaac Sim中的omni.isaac.core.simulation_context.SimulationContext类进行扩展的,它通过Python的数据类对象来配置模拟环境,并处理模拟步进过程中的复杂情况。

在本指南中,我们将物理和渲染的时间间隔设定为0.01秒。这件事通过向sim.SimulationCfg传递物理和渲染的时间间隔的参数完成,进而用于创建一个模拟环境的实例。

   # Initialize the simulation contextsim_cfg = SimulationCfg(dt=0.01, substeps=1)sim = SimulationContext(sim_cfg)# Set main camerasim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])

在建立了模拟环境之后,我们至今为止只完成了对模拟场景中物理作用(physics acting)的配置。这涉及到选择模拟使用的设备、设定重力向量以及调整其他一些高级求解参数。接下来,为了让模拟运行起来,我们还需要完成两个核心步骤:

  1. 构建模拟场景 (Designing the simulation scene):向场景中添加传感器、机器人及其他模拟物体。
  2. 执行模拟循环 (Running the simulation loop):操作模拟器进行逐步执行,并从模拟器中设置及获取数据。

本指南将首先着眼于第二步,我们将从一个空白场景开始,优先考虑如何控制模拟过程。在随后的教程中,我们会深入讨论第一步,并学习如何通过模拟处理与模拟器进行互动。

运行模拟

在设置好模拟场景之后,首先要做的就是调用sim.SimulationContext.reset()方法。这个方法会播放时间线并在模拟器中的初始化物理处理。在开始模拟步进过程之前,sim.SimulationContext.reset()必须首先被调用,否则模拟处理将无法正确初始化。

sim.SimulationContext.reset() 区别于sim.SimulationContext.play() 方法,后者只播放时间线并不初始化物理处理

在播放模拟时间线之后,我们建立了一个简单的模拟循环,在模拟应用程序运行时不断地步进模拟器。sim.SimulationContext.step()方法接收一个参数render,该参数决定是否在步进中更新与渲染相关的事件。默认情况下,这个标志被设置为True。

while simulation_app.is_running():# perform stepsim.step()

退出模拟

最后,通过调用omni.isaac.kit.SimulationApp.close()方法,停止模拟应用程序并关闭其窗口。为了在发生错误时能够有品地关闭应用程序,我们在try-catch语句中执行这一操作。

        # close sim appsimulation_app.close()

运行代码

现在我们已经大致浏览了代码的各个部分,让我们来执行代码来看看最终的结果

./orbit.sh -p source/standalone/tutorials/00_sim/create_empty.py

运行后,模拟应该正常运行,场景应该正确渲染。要停止模拟,可以直接关闭窗口,或者在终端中按Ctrl+C

向上述脚本传递--help参数将显示app.AppLauncher类之前添加的不同命令行参数。要以无显模式运行脚本,可以执行以下操作:

./orbit.sh -p source/standalone/tutorials/00_sim/create_empty.py --headless

现在我们对如何使用独立的python脚本运行模拟,有一个基本的了解了,在下一篇指南中我们将一起探索如何向场景中添加物品(assets)。

愿本文渡一切机器人模拟器苦

非常的有品

以上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作耳机壳的UV树脂和塑料材质哪一个成本更高一些?

总体来说,制作耳机壳的UV树脂的成本可能会略高于塑料材质。 原材料成本:UV树脂通常是通过复杂的合成过程制成的。这些过程不仅需要大量的能源投入,还需要较高水平的技术和设备支持,因此原材料成本较高。相比之下,塑料…

04-prometheus服务的动态发现

一、概述 目前,我们每增加一个被监控的节点,就需要修改prometheus的配置文件,然后重新加载prometheus服务,这种方式比较繁琐,每次新增、删除被监控节点都需要重新操作一遍,不适合生产环境的大规模监控架构&…

Go-zero中分布式事务的实现(DTM分布式事务管理器,在一个APi中如何调用两个不同服务的rpc层,并保证两个不同服务之间的业务逻辑同时成功)

涉及到的相关技术 1.DTM分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 2.SAGA事务模式,SAGA事务模式是DTM中常用的一种模式,简单易上手.(当然还有其它更多的事务模式,这里采用的SAGA只不过是其中一种较为简单的方法) 3.Go-zero框架,ETCD服务注册... …

Windows 2012 设置 nginx 开机自启动(适用于windows2012/10)

Windows 2012 设置 nginx 开机自启动(适用于windows2012/10)https://www.cnblogs.com/xuegqcto/articles/7521483.html 在windows server 2012上安装nginx,同时配置开机自启动服务(推荐使用“Windows Service Wrapper”工具&…

leetcode 740.删除并活得点数

这道题和打家劫舍得思路很像。 思路:首先我们看到题目的意思,就是说我们如果选择了一个数,那么它相邻的数就会不得选入,也就是删除。这就是上一个题那个相邻的家不能偷的问题呗! 我们从那个地方转换一下,…

【Linux】线程概念|线程理解|线程控制

文章目录 线程概念Linux中线程是否存在的讨论线程创建和线程控制线程的终止和等待(三种终止方式 pthread_join()的void**retval) 线程概念 线程就是进程内部的一个执行流,线程在进程内运行,线程在进程的地址空间内运行&#xff0…

LeetCode-第14题-最长公共前缀

1.题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 2.样例描述 3.思路描述 按字符串数组每个数组的长度,将字符串数组从小到大排序;他们的公共前缀一定小于或等于最长元素长度…

(Aliyun AI ACP 06)视觉智能基础知识:视觉智能常用模型与算法

文章目录 阿里云人工智能工程师ACP认证考试知识点辅助阅读(Aliyun AI ACP 06)视觉智能基础知识:视觉智能常用模型与算法视觉智能建模流程图像预处理技术图像特征提取算法深度学习模型 阿里云人工智能工程师ACP认证考试知识点辅助阅读 &#…

2024年智能驾驶年度策略:自动驾驶开始由创造型行业转向工程型行业

感知模块技术路径已趋于收敛,自动驾驶从创造型行业迈向工程型行业。在特斯拉的引领下,国内主机厂2022年以来纷纷跟随特斯拉相继提出“重感知、轻地图”技术方案,全球自动驾驶行业感知模块技术路径从百花齐放开始走向收敛。我们认为主机厂智能…

2023.3.3周报

目录 摘要 一、文献阅读 1、题目 2、摘要 3、模型架构 4、文献解读 一、Introduction 二、实验 三、结论 二、PINN 一、PINN比传统数值方法有哪些优势 二、PINN方法 三、正问题与反问题 三、PINN实验 一、数学方程 二、模型搭建 总结 摘要 本周我阅读了一篇…

Postman上传文件的操作方法

前言 调用某个接口,测试上传文件功能。一时间不知如何上传文件,本文做个操作记录,期望与你有益。 步骤一、设置Headers key:Content-Type value:multipart/form-data 步骤二、设置Body 选择form-data key:file下拉框选择file类型value&…

STM32(8)NVIC编程

中断源由部分片上外设产生 在misc.h中找,杂项 配置NVIC GPIO和AFIO不能产生中断源,但能通过EXTI,由EXTI产生中断源 NVIC不需要开启时钟,因为NVIC模块位于内核内部,芯片一上电就能工作。 中断响应函数 中断向量表在启…

Java:JVM基础

文章目录 参考JVM内存区域程序计数器虚拟机栈本地方法栈堆方法区符号引用与直接引用运行时常量池字符串常量池直接内存 参考 JavaGuide JVM内存区域 程序计数器 程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器,各线程…

Unity 常用的4种灯光、制作镜子、灯光的调用修改数值、

创建灯光时,一般用4种:定向光、点光源、聚光、区域光、 定向光:太阳 点光源:灯泡 聚光灯:手电筒 区域光:烘焙-贴图 灯光选择已烘焙 需要先选择被烘焙的物体,然后再选择Contribute GI 等待进…

java中的set

Set Set集合概述和特点 不可以存储重复元素 没有索引,不能使用普通for循环遍历 哈希值 哈希值简介 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 如何获取哈希值 Object类中的public int hashCode():返回对象的哈希码值。 哈希值的特点 同一个…

分布式ID生成算法|雪花算法 Snowflake | Go实现

写在前面 在分布式领域中,不可避免的需要生成一个全局唯一ID。而在近几年的发展中有许多分布式ID生成算法,比较经典的就是 Twitter 的雪花算法(Snowflake Algorithm)。当然国内也有美团的基于snowflake改进的Leaf算法。那么今天我们就来介绍一下雪花算法…

计算机视觉基础知识(二)---数字图像

像素 像素是分辨率的单位;构成位图图像的最基本单元;每个像素都有自己的颜色; 图像分辨率 单位英寸内的像素点数;单位为PPI(Pixels Per Inch),为像素每英寸;PPI表示每英寸对角线上所拥有的像素数目:,x:长度像素数目,y:宽度像素数目,Z:屏幕大小;屏幕尺寸(大小)指的是对角线长…

GO语言学习笔记(与Java的比较学习)(八)

接口与反射 接口是什么 Go 语言不是一种 “传统” 的面向对象编程语言:它里面没有类和继承的概念。 但是 Go 语言里有非常灵活的 接口 概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来 说明 对象的行为:如果谁能搞定这件事&…

springer模板参考文献不显示

Spring期刊模板网站,我的问题是23年12月的版本 https://www.springernature.com/gp/authors/campaigns/latex-author-support/see-where-our-services-will-take-you/18782940 参考文献显示问好,在sn-article.tex文件中,这个sn-mathphys-num…

数据结构c版(3)——排序算法

本章我们来学习一下数据结构的排序算法! 目录 1.排序的概念及其运用 1.1排序的概念 1.2 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1基本思想: 2.1.2直接插入排序: 2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序 2.2…