解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

ops/2025/1/17 22:36:54/

1. IsaacGymEnvs项目介绍

IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境

IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎,专为机器人学和强化学习等应用设计。它利用 GPU 加速,支持大规模的并行仿真,使得多智能体强化学习和机器学习任务的训练速度大大提升。

1.1. 主要特点

  1. GPU 加速 : Isaac Gym 使用 GPU 进行并行计算,可以高效地模拟多个环境,支持快速的仿真训练,特别适合强化学习和深度学习任务。
  2. 多智能体支持IsaacGymEnvs 提供了多种多智能体环境的支持,适合训练多个机器人或智能体进行协作或竞争。
  3. 高性能 : 相比于传统的基于 CPU 的仿真引擎,Isaac Gym 通过 GPU 的并行计算,极大地提高了仿真速度和训练效率。
  4. 适用于强化学习IsaacGymEnvs 设计支持与强化学习框架(如 RLlib、Stable Baselines3、PyTorch 和 TensorFlow)集成,方便用户进行机器人控制、策略优化等任务。
  5. 物理引擎和仿真 : 它结合了 NVIDIA 物理引擎,提供了高精度的碰撞检测、物体交互、重力模拟等功能,适用于训练基于物理仿真的任务。
  6. 丰富的环境 : 提供了多种预定义的环境,如操控任务、导航任务、物体抓取等,可以作为快速原型设计和实验的基础。
  7. 易于扩展 : 用户可以创建自定义的环境,通过修改现有的环境或开发新环境来满足特定的需求。

1.2. 常见使用场景

  • 机器人控制:训练机器人在模拟环境中执行复杂的任务,如抓取、操作物体、导航等。
  • 强化学习:开发和训练基于强化学习的算法,进行自我学习和优化策略。
  • 多智能体协作与对抗:训练多个机器人或智能体进行协作、对抗或竞争任务。
  • 物理仿真研究:研究机器人与环境交互中的物理现象,优化机器人设计和控制策略。

1.3. 集成与使用

IsaacGymEnvs 可以与多个流行的强化学习库结合使用,如:

  • RLlib:一个强化学习库,能够处理分布式强化学习任务。
  • Stable Baselines3:一个用于强化学习的高层次库,提供简单的接口和算法实现。
  • PyTorchTensorFlow:深度学习框架,可以与 IsaacGymEnvs 进行无缝集成,用于训练深度强化学习模型。

2. 保存视频报错及修改

isaac gym实现了标准 env.render(mode='rgb_rray') gym API 来提供模拟器查看器的图像。 此外,可以利用gym.wrappers.RecordVideo来帮助录制显示智能体运动过程的视频。 官方给出了示例代码如下,该文件应在视频文件夹中生成视频。

假如已经训练好了,用预训练模型参数保存视频的代码是:

python train.py task=FrankaCubeStack test=True checkpoint=runs/FrankaCubeStack_09-12-14-22/nn/last_FrankaCubeStack_ep_500_rew_773.4196.pth headless=False num_envs=64 capture_video=True

2.1. 提示缺包:

在这里插入图片描述
重装pillow:

 sudo apt-get install xvfb 

2.2. 继续报错:

在这里插入图片描述
OSError: Pillow was built without XCB support 表示当前环境中的 Pillow(Python 的图像处理库)不支持 XCB 功能,可能与图像显示或处理环境不兼容。

卸载、重装pillow:

pip uninstall pillow
pip install pillow

在这里插入图片描述

2.3. 继续报错:

Unknown encoder 'libx264'
ERROR: VideoRecorder encoder failed: None
ERROR: VideoRecorder encoder failed: None

在这里插入图片描述此时可以生成视频,但是视频无法写入图像内容,视频大小是0 bytes:在这里插入图片描述

查看系统是否安装了 ffmpeg,ffmpeg是否支持 libx264 编码器:

ffmpeg -encoders | grep libx264

在这里插入图片描述
问题分析: 从输出信息来看,ffmpeg 已经安装,但是 libx264 编码器没有被启用,说明当前的 ffmpeg 配置没有包含 libx264 编码支持。
解决方法: 需重新编译 ffmpeg,并确保启用 libx264 编码器。

conda install -c conda-forge ffmpeg

在这里插入图片描述

2.4. 成功写出视频

再次运行

python train.py task=FrankaCubeStack test=True checkpoint=runs/FrankaCubeStack_09-12-14-22/nn/last_FrankaCubeStack_ep_500_rew_773.4196.pth headless=False num_envs=64 capture_video=True

成功写出视频:
在这里插入图片描述

rl-video-step-0


http://www.ppmy.cn/ops/150936.html

相关文章

从零深度学习:(2)最小二乘法

今天我们从比较简单的线性回归开始讲起,还是一样我们先导入包 import numpy as np import torch import matplotlib as mpl import matplotlib.pyplot as plt a torch.arange(1,5).reshape(2,2).float() a 我们利用刚刚导入的画图的包将这两个点画出来&#xff0…

【云岚到家】-day02-客户管理-认证授权

第二章 客户管理 1.认证模块 1.1 需求分析 1.基础概念 一般情况有用户交互的项目都有认证授权功能,首先我们要搞清楚两个概念:认证和授权 认证: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等 授权:则是该用…

XML序列化和反序列化的学习

1、基本介绍 在工作中,经常为了调通上游接口,从而对请求第三方的参数进行XML序列化,这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…

EF Core实体跟踪

快照更改跟踪 实体类没有实现属性值改变的通知机制,EF Core是如何检测到变化的呢? 快照更改跟踪:首次跟踪一个实体的时候,EF Core 会创建这个实体的快照。执行SaveChanges()等方法时,EF Core将会把存储的快照中的值与…

C# 多线程发展史(面试思路)

多线程技术 本身是为了 提高 cpu利用率 提高效率而生 因为 cpu分片机制 导致 多线程存在顺序与业务不符合情况 为了满足 正确的执行业务顺序 而诞生第一个要点线程同步 无论是控制主线程的同步等待 thread join task result task wait() 还是线程之间对于共享资源 同步的多种…

【MacOS】恢复打开系统设置的安全性的允许以下来源的应用程序的“任何来源”

在系统更新后,系统设置的安全性的允许以下来源的应用程序的“任何来源”可能会被修改为“来自APP开发者”。 操作步骤: So, I figured it out how to allow apps from anywhere. But learned its the order of operations on how to enable this optio…

STM32-Flash存储

目录 1.0 闪存模块组织 2.0 Flash基本结构 3.0 Flash解锁 4.0 指针访问存储器地址 5.0 程序存储器编程 6.0 选项字节 7.0 选项字节编程 8.0 选项字节擦除 9.0 电子签名 10.0 手册解读 定义: STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部…

Linux服务器网络丢包场景及解决办法

一、Linux网络丢包概述 在数字化浪潮席卷的当下,网络已然成为我们生活、工作与娱乐不可或缺的基础设施,如同空气般,无孔不入地渗透到各个角落。对于 Linux 系统的用户而言,网络丢包问题却宛如挥之不去的 “噩梦”,频繁…