这个库包含了一系列使用GymansiumAPI的强化学习机器人环境。这些环境运行在MuJoCo物理引擎和维护的mujoco python绑定上。
文档网站位于robotics.farama.org,我们还有一个公开的discord服务器(我们也用它来协调开发工作),你可以在这里加入:https://discord.gg/YymmHrvS
安装
要安装Gymnasium-Robotics环境,请使用pip install gymnasium-robotics
这些环境还需要安装Deepmind的MuJoCo引擎。安装物理引擎的说明可以在MuJoCo网站和MuJoCo Github仓库找到。
请注意,最新的环境版本使用MuJoCo团队维护的最新mujoco python绑定。如果你希望使用依赖于mujoco-py的旧版环境,请使用pip install gymnasium-robotics[mujoco-py]
安装此库。
我们支持并测试Linux和macOS上的Python 3.8、3.9、3.10和3.11版本。我们会接受与Windows相关的PR,但不官方支持它。
环境
Gymnasium-Robotics
包括以下环境组:
- Fetch - 一系列具有7自由度机器人手臂的环境,需要执行诸如到达、推动、滑动或抓取和放置等操作任务。
- Shadow Dexterous Hand - 一系列具有24自由度拟人机器人手的环境,需要执行对立方体、蛋形物体或笔的物体操作任务。这些环境的变体还在观察空间中包括来自92个触觉传感器的数据。
D4RL环境现已可用。这些环境已经重构,可能与原始环境的动作/观察空间不同,请阅读它们的文档。
-
迷宫环境 - 代理需要在迷宫中导航以到达特定目标位置。可以使用两种不同的代理:一个2自由度力控制的球,或来自Gymnasium MuJoCo环境的经典
Ant
代理。环境可以以不同难度级别的各种迷宫形状初始化。 -
Adroit手臂 - 一系列使用Shadow灵巧手的环境,增加了手臂移动的自由度。不同任务包括钉钉子、开门、转笔或拾取和移动球。
-
Franka厨房 - 多任务环境,其中一个9自由度的Franka机器人被放置在一个包含几个常见家居物品的厨房中。每个任务的目标是与物品互动以达到所需的目标配置。
-
MaMuJoCo - Gymnasium/MuJoCo环境的多代理分解集合,以及用于分解机器人环境的框架,使用pettingzoo.ParallelEnv API。
进行中:使用Minari生成新的D4RL
环境数据集。
多目标API
机器人环境通过继承GoalEnv类来扩展核心Gymnasium API。新API要求环境具有包含3个键的字典观察空间:
observation
- 环境的实际观察desired_goal
- 代理需要达到的目标achieved_goal
- 代理当前实际达到的目标。环境的目标是使这个值接近desired_goal
该API还公开了奖励函数以及终止和截断信号,以便用不同的目标重新计算它们的值。这个功能对于使用回顾经验回放(HER)的算法很有用。
以下示例演示了如何使用公开的奖励、终止和截断函数来用替代目标重新计算值。info字典可用于存储重新计算奖励可能需要的额外信息,但这些信息与目标无关,例如从模拟中派生的状态。
import gymnasium as gym
env = gym.make("FetchReach-v3")
env.reset()
obs, reward, terminated, truncated, info = env.step(env.action_space.sample())
# 以下总是成立:
assert reward == env.compute_reward(obs["achieved_goal"], obs["desired_goal"], info)
assert truncated == env.compute_truncated(obs["achieved_goal"], obs["desired_goal"], info)
assert terminated == env.compute_terminated(obs["achieved_goal"], obs["desired_goal"], info)
# 但目标也可以被替换:
substitute_goal = obs["achieved_goal"].copy()
substitute_reward = env.compute_reward(obs["achieved_goal"], substitute_goal, info)
substitute_terminated = env.compute_terminated(obs["achieved_goal"], substitute_goal, info)
substitute_truncated = env.compute_truncated(obs["achieved_goal"], substitute_goal, info)
GoalEnv
类也可用于自定义环境。
项目维护者
主要贡献者:Rodrigo Perez-Vicente、Kallinteris Andreas、Jet Tai
本项目的维护还得到了更广泛的Farama团队的贡献:farama.org/team。
引用
如果您在研究中使用了本项目,请引用:
@software{gymnasium_robotics2023github,
author = {Rodrigo de Lazcano and Kallinteris Andreas and Jun Jet Tai and Seungjae Ryan Lee and Jordan Terry},
title = {Gymnasium Robotics},
url = {http://github.com/Farama-Foundation/Gymnasium-Robotics},
version = {1.2.4},
year = {2023},
}