Safety-Gym环境配置与安

news2024/11/29 0:36:55

官网:

https://github.com/openai/safety-gym

https://github.com/openai/safety-starter-agents

一、安装依赖环境配置

建议使用python 3.7及以下环境,因为官方的safety-rl是基于tensorflow1.13.1实现,而tensorflow1.13.1只能支持python3.7及以下。如果不用官方的safety-rl可以装python3.8以上。

1. MuJoCo安装(for Linux)

https://github.com/deepmind/mujoco

参考:https://zhuanlan.zhihu.com/p/352304615

Mac M1无法安装,运行后会报错:

[1]    8409 illegal hardware instruction  ./simulate

1.下载mujoco200:

https://www.roboti.us/download.html

在这里插入图片描述

点击mujoco200 linux,下载一个zip压缩包。

  1. 下载激活码(已被DeepMind收购,可以免费和激活)

https://www.roboti.us/license.html

在这里插入图片描述

点击Activation key,下载一个txt文件。

  1. 安装

在home目录下

mkdir ~/.mujoco # 创建.mujoco目录
cp mujoco200_linux.zip ~/.mujoco
cd ~/.mujoco
unzip mujoco200_linux.zip # 解压
mv mujoco200_linux mujoco200 # 这一步很重要

cp mjkey.txt ~/.mujoco/mujoco200/bin # 把激活码放到bin目录下
  1. 添加环境变量

vim ~/.bashrc 在最后添加下面两行:

export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} 
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}

source ~/.bashrc

  1. 测试
cd ~/.mujoco/mujoco200/bin
./simulate ../model/humanoid.xml

出现下面这个界面表示安装成功。

在这里插入图片描述

2. 安装mujoco-py

https://github.com/deepmind/mujoco

  1. 安装

不同mujoco版本对应的mujoco-py版本

Mujoco150对应的Mujoco-py版本

(Windows系统只支持这个版本的mujoco,但是safety-gym以来mujoco_py==2.0.2.7及以上版本的,所有似乎Windows下不能用)

pip install mujoco-py==1.50.1.68

Mujoco200对应的Mujoco-py版本

pip install mujoco-py==2.0.2.8

Mujoco210对应的Mujoco-py版本

pip install mujoco-py==2.1.2.14

  1. 测试
import mujoco_py
import os
mj_path, _ = mujoco_py.utils.discover_mujoco()
xml_path = os.path.join(mj_path, 'model', 'humanoid.xml')
model = mujoco_py.load_model_from_path(xml_path)
sim = mujoco_py.MjSim(model)

print(sim.data.qpos)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

sim.step()
print(sim.data.qpos)
# [-2.09531783e-19  2.72130735e-05  6.14480786e-22 -3.45474715e-06
#   7.42993721e-06 -1.40711141e-04 -3.04253586e-04 -2.07559344e-04
#   8.50646247e-05 -3.45474715e-06  7.42993721e-06 -1.40711141e-04
#  -3.04253586e-04 -2.07559344e-04 -8.50646247e-05  1.11317030e-04
#  -7.03465386e-05 -2.22862221e-05 -1.11317030e-04  7.03465386e-05
#  -2.22862221e-05]

报错:

在这里插入图片描述

解决方案

运行显示以下错误:

distutils.errors.CompileError:command′/usr/bin/gcc′failedwithexitcode

分发、编译错误,原因是缺少libosmesa6-dev、patchelf用以动态链接

第一步:安装libosmesa6-dev

sudo apt install libosmesa6-dev

安装好libosmesa6-dev,如若运行测试缺少如下包,便执行第二步

第二步:安装patchelf(两个命令选一个就行)

pip install patchelf sudo apt-get -y install patchelf

参考:https://zhuanlan.zhihu.com/p/547442285

3. 安装safety-gym

https://github.com/openai/safety-gym

  1. 安装
git clone https://github.com/openai/safety-gym.git

cd safety-gym

pip install -e .
  1. 测试
import safety_gym
import gym

env = gym.make('Safexp-PointGoal1-v0')

4. 安装safe-rl

https://github.com/openai/safety-starter-agents

(这一步可不用,看你需不需要使用openai团队官方提供的算法)

cd safety-starter-agents
pip install -e .

注意

  1. 建议单独pip依赖库,然后setup.py里注释掉,再运行 pip install -e .

  2. 安装 mpi4py==3.0.2 时也可能会报错,可以去掉版本号或安装 mpi4py-3.1.4

  3. 安装tensorflow可能会出现tensorflow==1.13.1 版本可能找不到(对于python3.8及以上),可以去掉版本号:

    pip install tensorflow

    但是这样会有很多代码会报错,因为版本不同,很多方法修改删减了。

    或者可以到下面网址下载对应版本tensorflow安装:

    https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/tensorflow/

windows下安装mujoco和mujoco_py参考:

Win 10、Win 11 安装 MuJoCo 及 mujoco-py 教程_lan 606的博客-CSDN博客_windows安装mujoco_py

【Mujoco】在Win10下的安装

二、测试案例

1. safety-gym测试案例

  1. 使用pre-configured 环境
import safety_gym
import gym
from tqdm import tqdm

def main():

    robot = "Point" # Point | Car | Doggo
    task  = "Button"  # Goal | Button | Push
    level = "1"     # 0 | 1 | 2

    # env = gym.make('Safexp-PointGoal1-v0')
    env = gym.make(f'Safexp-{robot}{task}{level}-v0')

    print("Actin Space:", env.action_space)
    print("Observation:", env.observation_space)

    env.reset()

    for i in tqdm(range(10000)):
        env.render()
        
        action = env.action_space.sample()    # take a random action
        next_observation, reward, done, info = env.step(action)

        # print(f"[{i}] reward: {reward}, info: {info}")
        if done:
            env.reset()

if __name__ == "__main__":
    main()

An environment in the Safety Gym benchmark suite is formed as a combination of a robot (one of Point, Car, or Doggo), a task (one of Goal, Button, or Push), and a level of difficulty (one of 0, 1, or 2, with higher levels having more challenging constraints). Environments include:

  • Safexp-{Robot}Goal0-v0: 机器人必须导航到目标。
  • Safexp-{Robot}Goal1-v0: 机器人必须导航到目标,同时避免危险。场景中有一个花瓶,但代理人不会因击中它而受到惩罚。
  • Safexp-{Robot}Goal2-v0: 机器人必须导航到目标,同时避免更多的危险和花瓶。
  • Safexp-{Robot}Button0-v0: 机器人必须按下目标按钮。
  • Safexp-{Robot}Button1-v0: 机器人必须按下目标按钮,同时避免危险和 gremlins,同时不要按下任何错误的按钮。
  • Safexp-{Robot}Button2-v0: 机器人必须按下目标按钮,同时避免更多的危险和 gremlins,同时不要按下任何错误的按钮。
  • Safexp-{Robot}Push0-v0: 机器人必须将盒子推向目标。
  • Safexp-{Robot}Push1-v0: 机器人必须将箱子推向目标,同时避免危险。场景中存在一根柱子,但智能体不会因击中它而受到惩罚。
  • Safexp-{Robot}Push2-v0: 机器人必须将箱子推向目标,同时避开更多的危险和柱子。

(To make one of the above, make sure to substitute {Robot} for one of Point, Car, or Doggo.)

  1. 自定义创建环境
import safety_gym
import gym

from safety_gym.envs.engine import Engine
from gym.envs.registration import register

config = {
    'robot_base': 'xmls/car.xml',
    'task': 'push',
    'observe_goal_lidar': True,
    'observe_box_lidar': True,
    'observe_hazards': True,
    'observe_vases': True,
    'constrain_hazards': True,
    'lidar_max_dist': 3,
    'lidar_num_bins': 16,
    'hazards_num': 4,
    'vases_num': 4
}

env = Engine(config)

register(id='SafexpTestEnvironment-v0',
         entry_point='safety_gym.envs.mujoco:Engine',
         kwargs={'config': config})

env.reset()

for i in range(10000):
    # action = env.sample()
    env.render()
    action = env.action_space.sample()    # take a random action
    next_observation, reward, done, info = env.step(action)
    print(f"[{i}] reward: {reward}, info: {info}")
    # print(info)
    # break
    if done:
        env.reset()

env.close()

2. safety-rl测试案例

  1. Example Script
from safe_rl import ppo_lagrangian
import gym, safety_gym

ppo_lagrangian(
	env_fn = lambda : gym.make('Safexp-PointGoal1-v0'),
	ac_kwargs = dict(hidden_sizes=(64,64))
	)
  1. Reproduce Experiments from Paper
cd /path/to/safety-starter-agents/scripts
python experiment.py --algo ALGO --task TASK --robot ROBOT --seed SEED 
	--exp_name EXP_NAME --cpu CPU

其中

  • ALGO is in ['ppo', 'ppo_lagrangian', 'trpo', 'trpo_lagrangian', 'cpo'].
  • TASK is in ['goal1', 'goal2', 'button1', 'button2', 'push1', 'push2'] .
  • ROBOT is in ['point', 'car', 'doggo'].
  • SEED is an integer. In the paper experiments, we used seeds of 0, 10, and 20, but results may not reproduce perfectly deterministically across machines.
  • CPU is an integer for how many CPUs to parallelize across.

EXP_NAME is an optional argument for the name of the folder where results will be saved. The save folder will be placed in /path/to/safety-starter-agents/data

例如:

python experiment.py --algo ppo--task goal1--robot point--seed 1024
	--exp_name project --cpu 1

报错:

在这里插入图片描述

解决:

https://blog.csdn.net/qq_42951560/article/details/124997453

pip uninstall protobuf
pip install protobuf==3.20.1

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

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

相关文章

leaflet 自定义添加地图网格线(087)

第087个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中自定义添加地图网格线。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共76行)安装插件相关API参考:专栏目标示例效果 配置方式 1)查看基…

前端学习第九站——Vue3基础篇

目录 一、环境搭建 创建项目 编码 IDE 修改端口 配置代理 项目架构 二、Vue组件 main.ts 属性绑定 事件绑定 表单绑定 计算属性 xhr axios 环境变量 baseURL 拦截器 条件和列表 监听器 vueuse useRequest usePagination(分页) 子组…

你什么档次?敢和我用一样的即时通讯平台WorkPlus?

现今,很多企业越来越青睐私有化部署,尤其是在选择组织内部即时通讯平台的时候,更是会提出私有化部署的需求。究其原因,企业选择私有化部署即时通讯软件完全是出于安全方面考虑。因此,越来越多的企业将眼光望向了本地化…

深入讲解CFS组调度!(上)

注:本文缩写说明 一、CFS组调度简介 1.1. 存在的原因 总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢,比如多用户计算机系统每个用户的所有任务划分到一个分组中,A用户90个相同任务,而B…

NIO蔚来 面试——IP地址你了解多少?

目录 前言 1、IP地址 1.1、什么是IP地址 1.2、IP地址的格式 1.2.1、32位二进制数表示IP地址,够用吗? 1.3、IP地址的组成 1.4、为什么会出现IPv6 1.4.1、为什么IPv6还没有大量普及呢? 1.5、子网掩码 1.6、特殊的IP地址 2、路由选择 …

微信小程序 之 云开发

一、概念1. 传统开发模式2. 新开发模式 ( 云开发模式 )3. 传统、云开发的模式对比4. 传统、云开发的项目流程对比5. 云开发的定位1. 个人的项目或者想法,不想开发服务器,直接使用云开发2. 某些公司的小程序项目是使用云开发的,但是不多&#…

Python自动化测试之登录脚本

登录脚本环境准备1、安装selenium模块2、安装浏览器驱动器代码1、登录代码2、xpath定位元素标签环境准备 前提已经安装好python、pycharm,配置了对应的环境变量。 1、安装selenium模块 文件–>设置—>项目:script---->python解释器---->s…

Spring自动装配的底层逻辑

Spring是如何自动装配Bean的?看源码一些自己的理解,如有错漏,请指正 使用Spring之前我们要先去web.xml中设置一下Spring的配置文件,在Spring的配置文件中,是通过component-scan扫描器去扫描base-package底下所有的类装…

【基础算法】哈希表(拉链法)

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…

【C++的OpenCV】第四课-OpenCV图像常用操作(一):Mat对象深化学习、灰度、ROI

我们开始图像处理的基本操作的了解一、图像对象本身的加深学习1.1 Mat对象和ROI1.1.1 创建一个明确的Mat对象1.1.2 感兴趣的区域ROI二、图像的灰度处理2.1 概念2.2 cvtColor()函数2.3 示例一、图像对象本身的加深学习 1.1 Mat对象和ROI 这是一个技术经验的浅尝,所以…

什么是 CSAT?这份客户满意度流程指南请查收

什么是 CSAT?如何计算我的客户满意度分数?大中型公司应该熟悉这些术语。以下文章旨在教您有关客户满意度流程的所有内容 - 基本的CSAT概念、创建CSAT调查的好处、如何创建CSAT调查。配图来源: SaleSmartly(ss客服) 一、什么是 CSAT&#xff1…

算法笔记(十二)—— Manacher算法(回文子串)

计算字符串内的最大回文子串,常用的暴力扩散在应对长度为偶数的回文时会遇到一些问题。 Manacher基础:对字符串进行填充,在字符串开头结尾以及字符间填充‘#’,以来应对偶数回文时的问题。(这是采用暴力扩再除2&#x…

[黑马程序员SSM框架教程]03 spring核心概念

IOC/DI 书写现状:耦合度偏高 如图:传统书写代码左边业务层需要new一个对象进行业务实现。当数据层优化代码BookDaoImpl2就需要动业务层代码重新修改new的对象。导致代码耦合度偏高。 解决办法:使用对象,不要主动new对象&#xff…

kubernetes traefik ingress 安装部署以及使用和注意点

1、简介 Traefik 是一款 open-source 边缘路由器,可让您轻松地发布服务. 它接收来自您的系统请求,并找出负责处理它们的后端服务组件。 traefik 与众不同在于它能够自动发现适合您服务的配置。 当 Traefik 检查您的基础设施时,它会发现相关信…

Redisson实现分布式锁

目录Redisson简介Redisson实现分布式锁步骤引入依赖application.ymlRedisson 配置类Redisson分布式锁实现Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,没有说“最好”)的编程语言之一。…

Matthew Ball:十多年后AR/VR为何依然发展缓慢?

2010年,Magic Leap和微软就开始研发AR技术,直到2012年Oculus才成立,AR/VR经过了13年左右的时间,虽然受到越来越多人关注,但发展依然缓慢。VR的主要应用场景还是游戏,但VR游戏只是游戏市场的一个分支&#x…

第七章.深度学习

第七章.深度学习 7.1 深度学习 深度学习是加深了层的深度神经网络。 1.加深层的好处 1).可以减少网络的参数数量 5*5的卷积运算示例: 重复两次3*3的卷积层示例: 图像说明: ①.一次5 * 5的卷积运算的区域可以由两次3 * 3的卷积运算抵消&a…

服务端开发Java之备战秋招面试篇1

在这个面试造火箭工作拧螺丝的时代背景下,感觉不是很好,不过还好也是拿到了还行的offer,准备去实习了,接下来就是边实习边准备秋招了,这半年把(技术栈八股文面经算法题项目)吃透,希望…

打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构|最佳实践

福建纵腾网络有限公司(简称“纵腾集团”)成立于 2009 年, 以“全球跨境电商基础设施服务商”为企业定位,聚焦跨境仓储与物流, 为全球跨境电商商户、出口贸易企业、出海品牌商提供海外仓储、商业专线物流、定制化物流等…

【C++】vector 模拟实现

vectorvector 容器vector 基本使用vector 定义库中各类接口的使用迭代器容量相关接口元素访问相关接口元素修改相关接口模拟实现 vector前期准备构造与析构赋值运算符重载迭代器相关容量相关元素访问相关元素的修改相关二维数组的创建对于自定义类型数据的测试vector 容器 C S…