mirror of
https://github.com/wassname/pyrobolearn.git
synced 2026-09-11 12:31:07 +08:00
87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
#!/usr/bin/env python
|
|
"""
|
|
Provide the environment (world, states, actions, rewards, terminal conditions, etc) defined in the paper [1] using the
|
|
PyRoboLearn framework.
|
|
|
|
Reference:
|
|
[1] "Learning Dexterous In-Hand Manipulation", OpenAI et al., 2018 (https://arxiv.org/abs/1808.00177)
|
|
"""
|
|
|
|
# TODO: end the implementation
|
|
|
|
import os
|
|
import pyrobolearn as prl
|
|
|
|
__author__ = "Brian Delhaisse"
|
|
__copyright__ = "Copyright 2018, PyRoboLearn"
|
|
__credits__ = ["OpenAI et al."]
|
|
__license__ = "GNU GPLv3"
|
|
__version__ = "1.0.0"
|
|
__maintainer__ = "Brian Delhaisse"
|
|
__email__ = "briandelhaisse@gmail.com"
|
|
__status__ = "Development"
|
|
|
|
|
|
# define environment
|
|
class Openai2018LearningEnv(prl.envs.Env):
|
|
r"""Openai2018Learning Environment
|
|
|
|
Create the environment (world, states, actions, rewards, terminal conditions, etc) defined in the paper [1].
|
|
|
|
Reference:
|
|
[1] "Learning Dexterous In-Hand Manipulation", OpenAI et al., 2018 (https://arxiv.org/abs/1808.00177)
|
|
"""
|
|
|
|
def __init__(self, simulator=None):
|
|
r"""
|
|
Initialize the environment.
|
|
|
|
Args:
|
|
simulator (prl.simulators.Simulator): simulator instance or None. If None, it will use PyBullet by default.
|
|
"""
|
|
# create simulator if None
|
|
if simulator is None:
|
|
simulator = prl.simulators.Bullet()
|
|
if not isinstance(simulator, prl.simulators.Simulator):
|
|
raise TypeError("Expecting the given simulator to be None or an instance of `prl.simulators.Simulator`, "
|
|
"instead got: {}".format(type(simulator)))
|
|
|
|
# create world
|
|
world = prl.worlds.BasicWorld(simulator)
|
|
|
|
# load hand
|
|
robot = world.load_robot('shadowhand', position=(-0.2, 0, 0.5), orientation=(-0.5, 0.5, -0.5, 0.5), left=False)
|
|
robot.print_info()
|
|
|
|
# load cube in hand
|
|
cube = world.load_mesh(os.path.dirname(__file__) + '/meshes/cube.obj', position=[0.1, 0, 0.57],
|
|
scale=(.05, .05, .05), flags=0)
|
|
cube = prl.robots.Body(simulator, body_id=cube)
|
|
|
|
# create state: fingertip positions (5*3D), object position (3D), object orientation (4D=quaternion),
|
|
# target orientation (4D=quaternion), relative target orientation (4D=quaternion), hand joint angles (24D),
|
|
# hand joint velocities (24D), object velocity (3D), object angular velocity (3D)
|
|
state = prl.states.PositionState(cube) + prl.states.OrientationState(cube) + \
|
|
prl.states.JointPositionState(robot)
|
|
|
|
# create action
|
|
|
|
# create reward
|
|
|
|
super(Openai2018LearningEnv, self).__init__(world, state)
|
|
|
|
|
|
# Test environment
|
|
if __name__ == '__main__':
|
|
import time
|
|
from itertools import count
|
|
|
|
# create environment
|
|
env = Openai2018LearningEnv()
|
|
|
|
# run environment
|
|
for t in count():
|
|
env.step()
|
|
time.sleep(1./240)
|