Orbit 使用指南 08 | 登记注册环境 | Isaac Sim | Omniverse

2024-03-23 10:04

本文主要是介绍Orbit 使用指南 08 | 登记注册环境 | Isaac Sim | Omniverse,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如是我闻: 在上一个指南中,我们学习了如何创建一个自定义的车杆环境。我们通过导入环境类及其配置类来手动创建了一个环境实例

    # create environment configurationenv_cfg = CartpoleEnvCfg()env_cfg.scene.num_envs = args_cli.num_envs# setup RL environmentenv = RLTaskEnv(cfg=env_cfg)

虽然这种方法直接明了,但当我们拥有大量的环境时,这种方法并咋能扩展。在指南08中,我们将展示如何使用gymnasium.register()方法将环境注册到gymnasium注册表中。这样我们就可以通过gymnasium.make()函数创建环境。

import omni.isaac.orbit_tasks  # noqa: F401
from omni.isaac.orbit_tasks.utils import parse_env_cfgdef main():"""Random actions agent with Orbit environment."""# create environment configurationenv_cfg = parse_env_cfg(args_cli.task, use_gpu=not args_cli.cpu, num_envs=args_cli.num_envs, use_fabric=not args_cli.disable_fabric)# create environmentenv = gym.make(args_cli.task, cfg=env_cfg)

指南对应于orbit/source/standalone/environments目录中的random_agent.py脚本。让我们先搂一眼完整代码长啥样。

# Copyright (c) 2022-2024, The ORBIT Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause"""Script to an environment with random action agent."""from __future__ import annotations"""Launch Isaac Sim Simulator first."""import argparsefrom omni.isaac.orbit.app import AppLauncher# add argparse arguments
parser = argparse.ArgumentParser(description="Random agent for Orbit environments.")
parser.add_argument("--cpu", action="store_true", default=False, help="Use CPU pipeline.")
parser.add_argument("--disable_fabric", action="store_true", default=False, help="Disable fabric and use USD I/O operations."
)
parser.add_argument("--num_envs", type=int, default=None, help="Number of environments to simulate.")
parser.add_argument("--task", type=str, default=None, help="Name of the task.")
# 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 gymnasium as gym
import torchimport omni.isaac.contrib_tasks  # noqa: F401
import omni.isaac.orbit_tasks  # noqa: F401
from omni.isaac.orbit_tasks.utils import parse_env_cfgdef main():"""Random actions agent with Orbit environment."""# create environment configurationenv_cfg = parse_env_cfg(args_cli.task, use_gpu=not args_cli.cpu, num_envs=args_cli.num_envs, use_fabric=not args_cli.disable_fabric)# create environmentenv = gym.make(args_cli.task, cfg=env_cfg)# print info (this is vectorized environment)print(f"[INFO]: Gym observation space: {env.observation_space}")print(f"[INFO]: Gym action space: {env.action_space}")# reset environmentenv.reset()# simulate environmentwhile simulation_app.is_running():# run everything in inference modewith torch.inference_mode():# sample actions from -1 to 1actions = 2 * torch.rand(env.action_space.shape, device=env.unwrapped.device) - 1# apply actionsenv.step(actions)# close the simulatorenv.close()if __name__ == "__main__":# run the main functionmain()# close sim appsimulation_app.close()

代码解析

envs.RLTaskEnv类继承自gymnasium.Env类以遵循标准接口。然而,与传统的Gym环境不同,envs.RLTaskEnv实现了一个向量化环境。这意味着多个环境实例同时在同一个进程中运行,并且所有数据都以批处理方式返回。

使用gym登记档

要注册一个环境,我们使用gymnasium.register()方法。这个方法接收环境名称、环境类的入口点以及环境配置类的入口点。对于车杆环境,以下是在omni.isaac.orbit_tasks.classic.cartpole子包中的注册调用示例:

import gymnasium as gymfrom . import agents
from .cartpole_env_cfg import CartpoleEnvCfg##
# Register Gym environments.
##gym.register(id="Isaac-Cartpole-v0",entry_point="omni.isaac.orbit.envs:RLTaskEnv",disable_env_checker=True,kwargs={"env_cfg_entry_point": CartpoleEnvCfg,"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_ppo_cfg.yaml","rsl_rl_cfg_entry_point": agents.rsl_rl_ppo_cfg.CartpolePPORunnerCfg,"skrl_cfg_entry_point": f"{agents.__name__}:skrl_ppo_cfg.yaml","sb3_cfg_entry_point": f"{agents.__name__}:sb3_ppo_cfg.yaml",},
)

id参数是环境的名称。约定俗成的,我们将所有环境都以前缀Isaac-命名,以便于在注册表中搜索它们。环境名称通常由任务名称跟随,然后是机器人的名称。例如,对于在平坦地形上的四足机器人ANYmal C的步态运动,环境被称为Isaac-Velocity-Flat-Anymal-C-v0。版本号v<N>通常用于指定同一环境的不同变体。否则,环境的名称可能变得过长且难以阅读。

entry_point参数是环境类的入口点。入口点是形如:的字符串。在车杆环境的案例中,入口点是omni.isaac.orbit.envs:RLTaskEnv。入口点用于在创建环境实例时导入环境类。

env_cfg_entry_point参数指定了环境的默认配置。默认配置使用omni.isaac.orbit_tasks.utils.parse_env_cfg()函数加载。然后,它被传递给gymnasium.make()函数以创建环境实例。配置入口点可以是一个YAML文件或一个python配置类。

创建环境

为了让gym注册表了解omni.isaac.orbit_tasks扩展提供的所有环境,我们必须在脚本开始时导入该模块。这将执行__init__.py文件,该文件遍历所有子包并注册它们各自的环境。

import omni.isaac.orbit_tasks  # noqa: F401

在本指南中,任务名称从命令行读取。任务名称用于解析默认配置以及创建环境实例。此外,其他解析的命令行参数,如环境数量、模拟设备和是否渲染,用于覆盖默认配置。

    # create environment configurationenv_cfg = parse_env_cfg(args_cli.task, use_gpu=not args_cli.cpu, num_envs=args_cli.num_envs, use_fabric=not args_cli.disable_fabric)# create environmentenv = gym.make(args_cli.task, cfg=env_cfg)

一旦创建了环境,其余的执行将遵循标准的重置和步进过程。

代码运行

现在让我们运行脚本来查看结果:

./orbit.sh -p source/standalone/environments/random_agent.py --task Isaac-Cartpole-v0 --num_envs 32

这应该会打开一个展台,其内容与之前的创建RL环境教程类似。要停止模拟,可以选择关闭窗口,或在终端中按Ctrl+C。
在这里插入图片描述

此外,还可以通过添加--cpu指示,将模拟设备从GPU更改为CPU:

./orbit.sh -p source/standalone/environments/random_agent.py --task Isaac-Cartpole-v0 --num_envs 32 --cpu

使用--cpu指示,模拟将在CPU上运行。这对于调试模拟很有用。然而,模拟在CPU上的运行速度将比在GPU上慢得多(拜老黄)。

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

以上

这篇关于Orbit 使用指南 08 | 登记注册环境 | Isaac Sim | Omniverse的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/837961

相关文章

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex