コード例 #1
0
ファイル: test_environment.py プロジェクト: wassname/diy-gym
class TestEnvironment(unittest.TestCase):
    def setUp(self):
        config_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                   'basic_env.yaml')
        self.env = DIYGym(config_file)

    def test_load_environment(self):
        self.assertTrue('plane' in self.env.models)
        self.assertTrue('red_marble' in self.env.models)
        self.assertTrue('green_marble' in self.env.models)
        self.assertTrue('blue_marble' in self.env.models)

    def test_spaces(self):
        self.assertTrue('force' in self.env.action_space['blue_marble'].spaces)
        self.assertTrue(
            'camera' in self.env.observation_space['basic_env'].spaces)
        self.assertTrue(
            'pose' in self.env.observation_space['green_marble'].spaces)

    def test_episode(self):
        observation = self.env.reset()
        initial_position = observation['green_marble']['pose']['position']

        # try to run the blue marble into the other two
        for _ in range(500):
            observation, _, _, _ = self.env.step(
                {'blue_marble': {
                    'force': [0, -100, 0]
                }})

        final_position = observation['green_marble']['pose']['position']

        # check that the green marble has moved
        self.assertNotAlmostEqual(np.linalg.norm(initial_position),
                                  np.linalg.norm(final_position),
                                  places=0)

        observation = self.env.reset()
        reset_position = observation['green_marble']['pose']['position']

        # check that the green marble has been reset back to its starting position
        self.assertAlmostEqual(np.linalg.norm(initial_position),
                               np.linalg.norm(reset_position),
                               places=1)
コード例 #2
0
#!/usr/bin/env python

import numpy as np
import os
from diy_gym import DIYGym

if __name__ == '__main__':

    config_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'ur_high_5.yaml')

    env = DIYGym(config_file)

    observation = env.reset()

    while True:
        action = env.action_space.sample()
        action['ur5_l']['controller']['linear'][:] = observation['ur_high_5']['distance_to_target']['position'] * 0.
        action['ur5_r']['controller']['linear'][:] = -observation['ur_high_5']['distance_to_target']['position'] * 0.
        action['ur5_l']['controller']['rotation'][:] = 0
        action['ur5_r']['controller']['rotation'][:] = 0

        observation, reward, terminal, info = env.step(action)

        if terminal:
            print('slap!')
            observation = env.reset()
コード例 #3
0
ファイル: r2d2_maze.py プロジェクト: wassname/diy-gym
if __name__ == '__main__':

    config_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                               'r2d2_maze.yaml')
    env = DIYGym(config_file)

    speed = 10.

    key_and_delta = {
        p.B3G_LEFT_ARROW: [-1, -1, 1, 1],
        p.B3G_RIGHT_ARROW: [1, 1, -1, -1],
        p.B3G_UP_ARROW: [-1, -1, -1, -1],
        p.B3G_DOWN_ARROW: [1, 1, 1, 1]
    }

    action = env.action_space.sample()

    while True:
        action['r2d2']['wheel_driver'][:] = 0

        keys = p.getKeyboardEvents()

        if 32 in keys and keys[32] & p.KEY_WAS_RELEASED:
            env.reset()

        for key, delta in key_and_delta.items():
            if key in keys and keys[key] & p.KEY_IS_DOWN:
                action['r2d2']['wheel_driver'] += np.array(delta) * speed

        observation, reward, terminal, info = env.step(action)