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上慢得多(拜老黄)。

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

以上

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

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

相关文章

在 Linux/Ubuntu/Debian 上安装 SQL Server 2019

Microsoft 为 Linux 发行版&#xff08;包括 Ubuntu&#xff09;提供 SQL Server。 以下是有关如何执行此操作的基本指南&#xff1a; 注册 Microsoft Ubuntu 存储库并添加公共存储库 GPG 密钥&#xff1a; sudo wget -qO- https://packages.microsoft.com/keys/microsoft.as…

jeect-boot queryFieldBySql接口RCE漏洞(CVE-2023-4450)复现

jeect-boot积木报表由于未授权的 API /jmreport/queryFieldBySql 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生。 1.漏洞级别 高危 2.漏洞搜索 fofa app"Jeecg-Boot 企业级快速开发平台"3.影响范围 JimuReport < 1.6.14.漏洞复现 这个漏洞的…

C/C++代码性能优化——编程实践

1. 编程实践 在一些关键的地方&#xff0c;相应的编程技巧能够给性能带来重大提升。 1.1. 参数传递 传递非基本类型时&#xff0c;使用引用或指针&#xff0c;这样可以避免传递过程中发生拷贝。参数根据是否需要返回&#xff0c;相应加上const修饰&#xff0c;代码更安全&am…

Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证

昨日&#xff0c;Redis 官方宣布了一项重要变更&#xff1a;他们将修改开源协议&#xff0c;未来所有版本将采用 “源代码可用” 的许可证。 具体来说&#xff0c;Redis 不再使用 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始&#xff0c;Redis 将采用 SSPLv1 和 RSA…

初学php反序列化

php中&#xff0c;序列化和反序列化是相对的两个过程&#xff0c;序列化是把变量或对象转化成字符串的过程 反序列化是把字符串转换为变量过着对象的过程 在php的反序列化中&#xff0c;存在类&#xff0c;当类被以特定的方式就会触发魔术方法&#xff0c;在实行序列化的过程…

CSS的使用与方法

什么是CSS CSS是层叠样式表。它是一种用于描述网页或者文档外观和样式的标记语言。 层级样式表&#xff1a;就是给HTML标签加样式的。 如果说HTML是个游戏英雄 、那么CSS就是游戏皮肤。 【一】注释语法 /* 注释 */ 【二】CSS的语法结构 选择符 {样式属性: 样式属性值;样…

深度学习新篇章:PyTorch在遥感地物分类的革命性应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

数据结构从入门到精通——排序的概念及运用

排序的概念及运用 前言一、排序的概念排序稳定性内部排序外部排序 二、排序运用三、常见的排序算法四、排序性能检测代码srand()clock() 五、oj排序测试代码 前言 排序是将数据按照一定规则重新排列的过程&#xff0c;常见规则有升序、降序等。排序算法如冒泡排序、快速排序等…

如何关闭Wifi的双频合一功能?很简单

前言 前段时间中国电信建议关闭路由器的双频合一功能&#xff0c;主要是为了解决Wi-Fi速度慢、信号弱等问题。 双频合一是啥&#xff1f;简单来说就是同个Wi-Fi信号有两种不同的通道……嗯&#xff0c;可能有点看不懂。。。 简单来说就是A地点到B地点有两条路&#xff0c;一条…

基于ssm的勤工助学管理系统+数据库+报告+免费远程调试

项目介绍: 基于ssm的勤工助学管理系统。Javaee项目&#xff0c;ssm项目。采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc Mybatisplus VuelayuiMaven来实现。有管理员和老…

第十五届蓝桥杯嵌入式模拟考试I

第十五届蓝桥杯嵌入式模拟考试I 时隔多日&#xff0c;蓝桥杯比赛将之&#xff0c;听老师说还有模拟题这个东西(以前从没听说过)&#xff0c;不模拟不知道&#xff0c;一模拟吓一跳&#xff0c;废话不多说直接上图&#xff0c;这是只做编程题的得分满分85,剩下的几分我实在拿不…

Python:熟悉简单的skfuzzy构建接近生活事件的模糊控制器”(附带详细注释说明)+ 测试结果

参考资料&#xff1a;https: // blog.csdn.net / shelgi / article / details / 126908418 ————通过下面这个例子&#xff0c;终于能理解一点模糊理论的应用了&#xff0c;感谢原作。 熟悉简单的skfuzzy构建接近生活事件的模糊控制器 假设下面这样的场景, 我们希望构建一套…

互联网思维:息共享、开放性、创新和快速反应、网络化、平台化、数据驱动和用户体验 人工智能思维:模拟人、解放劳动力、人工智能解决方案和服务

互联网思维&#xff1a;信息共享、开放性、创新和快速反应、网络化、平台化、数据驱动和用户体验 互联网思维是指一种以互联网为基础的思考方式&#xff0c;强调信息共享、开放性、创新和快速反应的特点。这种思维方式注重网络化、平台化、数据驱动和用户体验&#xff0c;以适…

TCP重传机制详解——01概述

文章目录 TCP重传机制详解——01概述什么是TCP重传&#xff1f;TCP为什么要重传&#xff1f;TCP如何做到重传&#xff1f;TCP重传方式有哪些超时重传(timeout or timer-based retransmission)快速重传(fast retransmission或者fast retransmit)改进的重传机制&#xff0c;早期重…

Avalonia(11.0.2)+.NET6 打包运行到银河麒麟V10桌面系统

操作系统配置 项目结构 .net版本 这次我们是在银河麒麟V10系统上打包运行Avalonia(11.0.2)+.NET6.0的程序 开始打包 准备Linux下的桌面快捷方式以及图标 调整AvaloniaApplication2.Desktop.csproj的配置项,重点看下图红色线圈出来的部分,里面涉及到了LinuxPath的设置。完整的配…

10、chrome拓展程序的实现

一、拓展程序的实现 拓展程序项目的构成 和前端项目一样&#xff0c;拓展程序也是有Html、CSS、JS文件实现的&#xff0c;现在看来它就是一个静态的前端页面。但是不同的是&#xff0c;拓展程序中还需要额外的一个清单文件&#xff0c;就是manifest.json&#xff0c;清单文件可…

Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性

Prompt进阶系列5:LangGPT(提示链Prompt Chain)–提升模型鲁棒性 随着对大模型的应用实践的深入&#xff0c;许多大模型的使用者&#xff0c; Prompt 创作者对大模型的应用越来越得心应手。和 Prompt 有关的各种学习资料&#xff0c;各种优质内容也不断涌现。关于 Prompt 的实践…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;九&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十一&#xff09; 38、sqlite3_column_value sqlite3_column_valu…

云计算系统等保测评对象和指标选取

1、云计算服务模式与控制范围关系 参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图&#xff0c;主要是云计算系统安全保护责任分担原则和云服务模式适用性原则&#xff0c;指导后续的测评对象和指标选取。 2、测评对象选择 测评对象 IaaS模式 PaaS模式…

Python Flask 返回json类型数据

from flask import Flask, make_responseapp Flask(__name__)app.route("/") def hello():data {"name": "张三"}return make_response(data)if __name__ __main__:app.run(debugTrue)如果像返回字符串那么可以用 return make_response(json.…