当前位置: 首页 > 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:模型对…...

关于ACT模型使用时的注意点和部署调试方法

目录 1.模型训练的输入图像必须是RGB格式 2.训练数据中需要处理action的数据 3.通过输入训练数据中的qpos和image来验证推理的代码是否正确 4.通过提前录入一组未在训练集中的数据作为模型输入,观察输入的action和预测的action曲线 5.模型推理后根据情况执行多少步,而不是全部…...

如何突破Stable Diffusion生成瓶颈?ComfyUI_TensorRT实战解密

如何突破Stable Diffusion生成瓶颈?ComfyUI_TensorRT实战解密 【免费下载链接】ComfyUI_TensorRT 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_TensorRT 你是否曾在等待Stable Diffusion图像生成时感到焦虑?每次点击"生成"按…...

蓝桥杯第15届单片机满分

1. 为什么会在第 5 位显示出 8&#xff1f;freq_jiaofreqseg_jiao;//频率数据的最终结果 if(freq_jiao<0) {wrong1;//频率界面数码管显示LL,表示此状态错误 } else wrong0;而在 serviceT1 的中断里&#xff0c;每 1000ms 更新一次 freq&#xff1a;当测试系统改变输入频率&a…...

K8s RBAC实战:一个实验搞定权限控制

RBAC 详解(基于角色的访问控制) 一个实验搞定RBAC 在Kubernetes中&#xff0c;授权有ABAC&#xff08;基于属性的访问控制&#xff09;、RBAC&#xff08;基于角色的访问控制&#xff09;、Webhook、Node、AlwaysDeny&#xff08;一直拒绝&#xff09;和AlwaysAllow&#xff08…...

从A*到Theta*:探索任意角度路径规划的演进与实战

1. 从A到Theta&#xff1a;路径规划的技术演进 十年前我第一次用A算法给游戏角色做路径规划时&#xff0c;被那些生硬的"阶梯式"移动路线折磨得不轻。想象一下&#xff0c;你的游戏角色明明可以直线奔向目标&#xff0c;却非要像象棋里的马一样走"日"字形&…...

最新版临时文件快传系统源码 全开源附教程

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 9月更新 临时文件快传系统源码 全开源附教程 更新日志&#xff1a; 新增&#xff1a; 独立分享页面新增返回首页按钮 目录分享页面显示统计信息 会员等级中心显示是否默认永久存储 后台会员等级权限…...

解密高效网络监控:专业级开源测速工具实战指南

解密高效网络监控&#xff1a;专业级开源测速工具实战指南 【免费下载链接】Speed-Test SpeedTest by OpenSpeedTest™ is a Free and Open-Source HTML5 Network Performance Estimation Tool Written in Vanilla Javascript and only uses built-in Web APIs like XMLHttpReq…...

工业领域再发力,麒麟信安树立自主创新基础软件规模化应用又一新标杆

当前&#xff0c;随着我国工业数字化、智能化转型持续深入&#xff0c;基础软件的自主创新实践成为保障产业链安全的关键一环。麒麟信安作为基础软件代表厂商&#xff0c;正加速在工业关键场景的纵深布局&#xff0c;已与上下游厂家联合推进工业软硬件全栈自主解决方案&#xf…...

glogg终极指南:如何通过智能架构设计实现高性能日志分析

glogg终极指南&#xff1a;如何通过智能架构设计实现高性能日志分析 【免费下载链接】glogg A fast, advanced log explorer. 项目地址: https://gitcode.com/gh_mirrors/gl/glogg glogg是一款专为开发者和系统管理员设计的跨平台日志查看器&#xff0c;它巧妙地将grep的…...

千帆竞发:126颗卫星升空背后的全球卫星互联网竞速

2026年4月7日21时32分&#xff0c;长征八号运载火箭在海南商业航天发射场拔地而起&#xff0c;以“一箭十八星”的方式将千帆星座第七批18颗组网卫星送入预定轨道。发射取得圆满成功。此次发射后&#xff0c;千帆星座在轨卫星总数达到126颗&#xff0c;标志着我国自主可控的低轨…...