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.pswp.cn/news/717996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717996.shtml
英文地址,請注明出處:http://en.pswp.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…