当前位置: 首页 > news >正文

IsaacLab | Workflow 中 rsl_rl 的 play.py 脚本精读

如是我闻: 在用IsaacLab 做强化学习实验时,回顾已训练好的模型需要调用workflow中的play.py脚本,以下是对rsl_rlplay.py脚本的逐行精读。

1. 版权声明和文件描述

# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause"""Script to play a checkpoint if an RL agent from RSL-RL.""""""Launch Isaac Sim Simulator first."""

2. 导入模块

import argparse
from omni.isaac.lab.app import AppLauncher# local imports
import cli_args  # isort: skip
  • 功能
    • argparse:用于解析命令行参数,允许用户在运行脚本时指定一些选项。
    • AppLauncher:用于启动和管理 Isaac Sim 应用程序。
    • cli_args:本地导入模块,可能包含特定的命令行参数设置(如强化学习相关的参数)。

3. 命令行参数解析

# add argparse arguments
parser = argparse.ArgumentParser(description="Train an RL agent with RSL-RL.")
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.")
parser.add_argument("--seed", type=int, default=None, help="Seed used for the environment")
# append RSL-RL cli arguments
cli_args.add_rsl_rl_args(parser)
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
args_cli = parser.parse_args()
  • 功能
    • 这里设置了一些命令行参数,用户可以在运行时指定这些参数,如是否使用 CPU、模拟环境的数量、任务名称等。
    • 通过 cli_args.add_rsl_rl_args(parser)AppLauncher.add_app_launcher_args(parser) 添加了更多与 RSL-RL 和 AppLauncher 相关的参数。

4. 启动 Isaac Sim 应用

# launch omniverse app
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app
  • 功能
    • 通过 AppLauncher 类,根据解析的命令行参数启动 Isaac Sim 应用,并创建一个 simulation_app 实例用于管理模拟器。

5. 导入其他库

import gymnasium as gym
import os
import torchfrom rsl_rl.runners import OnPolicyRunnerimport omni.isaac.lab_tasks  # noqa: F401
from omni.isaac.lab_tasks.utils import get_checkpoint_path, parse_env_cfg
from omni.isaac.lab_tasks.utils.wrappers.rsl_rl import (RslRlOnPolicyRunnerCfg,RslRlVecEnvWrapper,export_policy_as_jit,export_policy_as_onnx,
)
  • 功能
    • gymnasium:强化学习的标准库,用于创建和管理环境。
    • torch:用于深度学习的库,主要用于处理神经网络模型。
    • OnPolicyRunner:来自 RSL-RL 的一个类,用于管理强化学习代理的训练和推理过程。
    • omni.isaac.lab_tasks:Isaac Sim 相关的模块,提供了环境配置、模型检查点加载和策略导出等功能。

6. 主函数定义

def main():"""Play with RSL-RL agent."""# parse 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)agent_cfg: RslRlOnPolicyRunnerCfg = cli_args.parse_rsl_rl_cfg(args_cli.task, args_cli)
  • 功能

    • env_cfg(环境配置)

      • 用途env_cfg 是一个环境配置对象,包含了用于设置模拟环境的参数。这些参数可能包括:
      • 任务的名称(决定要执行哪个任务)。
      • 是否使用 GPU(决定是否使用 GPU 进行加速)。
      • 模拟环境的数量(决定要同时运行多少个环境)。
      • 是否启用或禁用某些特定功能(例如 fabric 或 USD I/O 操作)。
    • 总结env_cfg 是一个“设置包”,里面装着各种关于环境的设置,它告诉模拟器应该如何配置和运行你的任务。

    • agent_cfg(强化学习代理配置)

      • 用途agent_cfg 是一个强化学习代理的配置对象,包含了与强化学习算法和代理相关的参数。这些参数可能包括:
      • 强化学习模型的具体设置(例如网络架构、学习率等)。
      • 从哪个检查点加载训练好的模型。
      • 日志和保存路径等其他信息。
    • 总结agent_cfg 是另一个“设置包”,但它的重点是告诉强化学习代理应该如何行动、如何学习,以及从哪里开始。

总的来说

  • env_cfg 配置了“舞台”——也就是你的模拟环境。
  • agent_cfg 配置了“演员”——也就是你的强化学习代理,它决定了演员如何在舞台上表演。

7. 创建和包装环境

    # create isaac environmentenv = gym.make(args_cli.task, cfg=env_cfg)# wrap around environment for rsl-rlenv = RslRlVecEnvWrapper(env)
  • 功能
    • env_cfg 只是模拟环境,我们还需要创建并初始化一个强化学习环境 env,这个环境由 gym.make 创建,并使用 RSL-RL 的 RslRlVecEnvWrapper 进行封装,使其兼容 RSL-RL 的训练和推理流程。

8. 日志路径和模型加载

    # specify directory for logging experimentslog_root_path = os.path.join("logs", "rsl_rl", agent_cfg.experiment_name)log_root_path = os.path.abspath(log_root_path)print(f"[INFO] Loading experiment from directory: {log_root_path}")resume_path = get_checkpoint_path(log_root_path, agent_cfg.load_run, agent_cfg.load_checkpoint)print(f"[INFO]: Loading model checkpoint from: {resume_path}")
  • 功能
    • 设置日志记录的路径,并根据训练运行的名称和检查点的编号加载已保存的模型检查点。

9. 加载已训练的模型

    # load previously trained modelppo_runner = OnPolicyRunner(env, agent_cfg.to_dict(), log_dir=None, device=agent_cfg.device)ppo_runner.load(resume_path)print(f"[INFO]: Loading model checkpoint from: {resume_path}")
  • 功能
    • 使用 OnPolicyRunner 类加载之前训练好的强化学习模型,并恢复到之前的状态。

10. 获取推理策略并导出

    # obtain the trained policy for inferencepolicy = ppo_runner.get_inference_policy(device=env.unwrapped.device)# export policy to onnxexport_model_dir = os.path.join(os.path.dirname(resume_path), "exported")export_policy_as_jit(ppo_runner.alg.actor_critic, ppo_runner.obs_normalizer, path=export_model_dir, filename="policy.pt")export_policy_as_onnx(ppo_runner.alg.actor_critic, path=export_model_dir, filename="policy.onnx")
  • 功能
    • 获取用于推理的策略,并将其导出为 JIT 和 ONNX 格式,以便后续使用。

11. 环境模拟循环

    # reset environmentobs, _ = env.get_observations()# simulate environmentwhile simulation_app.is_running():# run everything in inference modewith torch.inference_mode():# agent steppingactions = policy(obs)# env steppingobs, _, _, _ = env.step(actions)
  • 功能
    • 重置环境,获取初始观测值,然后在模拟器运行期间,不断通过加载的策略生成动作,并用这些动作推进环境状态。

12. 关闭模拟器和环境

    # close the simulatorenv.close()
  • 功能
    • 在模拟结束时关闭环境,释放资源。

13. 入口函数

if __name__ == "__main__":# run the main functionmain()# close sim appsimulation_app.close()
  • 功能
    • 这个部分确保当脚本作为主程序运行时,main() 函数被执行,并在结束时关闭模拟器应用。

那我估计我也就是拿这个脚本来改动了,行。

非常的有品

以上

相关文章:

IsaacLab | Workflow 中 rsl_rl 的 play.py 脚本精读

如是我闻: 在用IsaacLab 做强化学习实验时,回顾已训练好的模型需要调用workflow中的play.py脚本,以下是对rsl_rl的play.py脚本的逐行精读。 1. 版权声明和文件描述 # Copyright (c) 2022-2024, The Isaac Lab Project Developers. # All ri…...

PYTHON专题-(8)我错了该怎么整?

什么是异常处理? 异常处理是一种机制,用于在程序执行期间发生错误或异常时,对发生的异常进行捕获、处理和恢复,以确保程序能够继续执行或正确地终止。异常处理可以包括捕获异常、处理异常,以及执行相应的操作来处理异常…...

【自然资源】设施农业用地的学习梳理

【自然资源】设施农业用地的学习梳理 什么是设施农业用地? 2019年12月17日,自然资源部 、农业农村部印发的《关于设施农业用地管理有关问题的通知》规定:设施农业用地包括农业生产中直接用于作物种植和畜禽水产养殖的设施用地。其中&#x…...

【秋招笔试】24-07-27-OPPO-秋招笔试题(后端卷)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 💡 01.二进制反转游戏 问题描述 K小姐…...

JS 补充内容

一、dir 打印对象 二、获取 html 中的元素 常用的两种方式 其他获取元素的方法 三、 innerText 四、innerHTML 五、修改元素的值 六、鼠标放上去,显示图片的提示文字 img . title 七、获取 N ~ M 之间的随机整数 八、修改属性样式 1. style 2. className 将后面 …...

H5+JS 4096小游戏

主要实现 1.使用WASD或方向按钮控制游戏 2.最高值4096,玩到4096视为胜利 3.随机生成2、4、8方块 4.移动方块 5.合并方块 JS代码干了什么 初始化游戏界面:创建游戏板和控制按钮。 定义游戏相关变量:如棋盘大小、棋盘状态、得分等。 初始化棋…...

常见中间件漏洞(二、WebLogin合集)

目录 二、WebLogic Weblogic介绍 2.1 后台弱口令GetShell 漏洞描述 影响范围 环境搭建 漏洞复现 2.2 CVE-2017-3506 漏洞描述 影响版本 环境搭建 漏洞复现 2.3 CVE-2019-2725 漏洞描述 影响版本 环境搭建 漏洞复现 2.4 CVE-2018-2628 漏洞描述 漏洞影响 环…...

LeetCode LCR147.最小栈

LeetCode LCR147.最小栈 思路🤔: 建立两个栈,一个栈正常入栈出栈,一个栈只用于出入最小数,当push值小于minst栈顶才入栈,当pop值等于minst栈顶才出栈。 代码🔎: class MinStack { pu…...

目标检测的算法有哪些

目标检测是计算机视觉领域的一个重要任务,它涉及识别图像或视频中的对象,并确定它们的位置和类别。随着深度学习的发展,出现了许多高效且准确的目标检测算法。以下是一些主要的目标检测算法: 两阶段检测器(Region-bas…...

HDU多校-交通管控

Problem - 7498 (hdu.edu.cn) 直接dfs显然不行,达到了2^500,那么我们可以考虑枚举所有红绿灯的状态,总共有三种状态,k的范围小于等于10,因此所有状态数为3^10不会超,所以通过三进制状压dp即可完成&#xf…...

【C++】string类

🚀个人主页:奋斗的小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥1、标准库中的string类💥1.1string类的常用接口💥string类对象常见…...

Python中各类常用内置转换函数

Python中各类常用内置转换函数 函数功能说明int(x)将 x 转换为整数类型float(x)将 x 转换为浮点数类型str(x)将 x 转换为字符串repr(x)将 x 转换为表达式字符串eval(str)计算在字符串中的有效Python表达式,并返回一个对象list(s)将序列 s 转换为一个列表tuple(s)将…...

LangChain与JWT:构建安全认证的桥梁

LangChain与JWT:构建安全认证的桥梁 在现代Web应用和微服务架构中,安全认证是保护数据和资源访问的关键。JSON Web Tokens(JWT)作为一种广泛使用的开放标准,为安全传输提供了一种简洁而自包含的方式。LangChain&#…...

ai写作软件哪个好用?怎么帮自己找到好用的ai写作软件?

ai写作软件的出现是随着ai技术的迅猛发展下的产物,它主要应用于内容创作领域,可以是文章内容创作、视频内容创作、绘图创作等等,不同的ai写作软件可能应用的领域不同,但也有的ai写作软件应用的范围却是比较广。今天小编主要来跟大…...

关于gunicorn+flask+docker模型的高并发部署

这是一个结合了现代Web技术的高效部署方案,旨在提高Web应用的并发处理能力和可扩展性。以下是对该模型高并发部署的详细解析: 一、模型概述 GunicornFlaskDocker模型结合了Flask的轻量级和灵活性、Gunicorn的高并发处理能力以及Docker的容器化优势&…...

35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

ViT论文详解

文章目录 前言一、ViT理论二、模型结构三、实验结果总结 前言 ViT是谷歌团队在2021年3月发表的一篇论文,论文全称是《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》一张图片分成16x16大小的区域:使用Transformer进行按比…...

常见中间件漏洞(三、Jboss合集)

目录 三、Jboss Jboss介绍 3.1 CVE-2015-7501 漏洞介绍 影响范围 环境搭建 漏洞复现 3.2 CVE-2017-7504 漏洞介绍 影响范围 环境搭建 漏洞复现 3.3 CVE-2017-12149 漏洞简述 漏洞范围 漏洞复现 3.4 Administration Console弱囗令 漏洞描述 影响版本 环境搭建…...

ios如何动态添加控件及动画

在ViewController中添加 // // ViewController.m // iosstudy2024 // // Created by figo on 2024/8/5. //#import "ViewController.h"interface ViewController () property (weak, nonatomic) IBOutlet UIButton *xigua; - (IBAction)xigua:(id)sender;endimpl…...

【数学建模】——【A题 信用风险识别问题】全面解析

目录 1.题目 2.解答分析 问题1:指标筛选 1.1 问题背景 1.2 数据预处理 1.3 特征选择方法 1.4 多重共线性检测 1.5 实现步骤 问题2:信用评分模型 2.1 问题背景 2.2 数据分割 2.3 处理不平衡数据 2.4 模型选择与理由 问题3:模型对…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...