summaryrefslogtreecommitdiff
path: root/examples/pybullet/gym/pybullet_envs/minitaur/envs/minitaur_ball_gym_env.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pybullet/gym/pybullet_envs/minitaur/envs/minitaur_ball_gym_env.py')
-rw-r--r--examples/pybullet/gym/pybullet_envs/minitaur/envs/minitaur_ball_gym_env.py72
1 files changed, 30 insertions, 42 deletions
diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs/minitaur_ball_gym_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs/minitaur_ball_gym_env.py
index c2ec7ded4..b40d6f0d4 100644
--- a/examples/pybullet/gym/pybullet_envs/minitaur/envs/minitaur_ball_gym_env.py
+++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs/minitaur_ball_gym_env.py
@@ -4,10 +4,10 @@
import math
import random
-import os, inspect
+import os, inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(os.path.dirname(currentdir))
-os.sys.path.insert(0,parentdir)
+os.sys.path.insert(0, parentdir)
from gym import spaces
import numpy as np
@@ -52,61 +52,52 @@ class MinitaurBallGymEnv(minitaur_gym_env.MinitaurGymEnv):
that its walking gait is clearer to visualize.
render: Whether to render the simulation.
"""
- super(MinitaurBallGymEnv, self).__init__(
- urdf_root=urdf_root,
- self_collision_enabled=self_collision_enabled,
- pd_control_enabled=pd_control_enabled,
- leg_model_enabled=leg_model_enabled,
- on_rack=on_rack,
- render=render)
+ super(MinitaurBallGymEnv, self).__init__(urdf_root=urdf_root,
+ self_collision_enabled=self_collision_enabled,
+ pd_control_enabled=pd_control_enabled,
+ leg_model_enabled=leg_model_enabled,
+ on_rack=on_rack,
+ render=render)
self._cam_dist = 2.0
self._cam_yaw = -70
self._cam_pitch = -30
self.action_space = spaces.Box(np.array([-1]), np.array([1]))
- self.observation_space = spaces.Box(np.array([-math.pi, 0]),
- np.array([math.pi, 100]))
+ self.observation_space = spaces.Box(np.array([-math.pi, 0]), np.array([math.pi, 100]))
def reset(self):
self._ball_id = 0
super(MinitaurBallGymEnv, self).reset()
self._init_ball_theta = random.uniform(-INIT_BALL_ANGLE, INIT_BALL_ANGLE)
self._init_ball_distance = INIT_BALL_DISTANCE
- self._ball_pos = [self._init_ball_distance *
- math.cos(self._init_ball_theta),
- self._init_ball_distance *
- math.sin(self._init_ball_theta), 1]
+ self._ball_pos = [
+ self._init_ball_distance * math.cos(self._init_ball_theta),
+ self._init_ball_distance * math.sin(self._init_ball_theta), 1
+ ]
self._ball_id = self._pybullet_client.loadURDF(
"%s/sphere_with_restitution.urdf" % self._urdf_root, self._ball_pos)
return self._get_observation()
def _get_observation(self):
world_translation_minitaur, world_rotation_minitaur = (
- self._pybullet_client.getBasePositionAndOrientation(
- self.minitaur.quadruped))
+ self._pybullet_client.getBasePositionAndOrientation(self.minitaur.quadruped))
world_translation_ball, world_rotation_ball = (
self._pybullet_client.getBasePositionAndOrientation(self._ball_id))
- minitaur_translation_world, minitaur_rotation_world = (
- self._pybullet_client.invertTransform(world_translation_minitaur,
- world_rotation_minitaur))
- minitaur_translation_ball, _ = (
- self._pybullet_client.multiplyTransforms(minitaur_translation_world,
- minitaur_rotation_world,
- world_translation_ball,
- world_rotation_ball))
- distance = math.sqrt(minitaur_translation_ball[0]**2 +
- minitaur_translation_ball[1]**2)
- angle = math.atan2(minitaur_translation_ball[0],
- minitaur_translation_ball[1])
+ minitaur_translation_world, minitaur_rotation_world = (self._pybullet_client.invertTransform(
+ world_translation_minitaur, world_rotation_minitaur))
+ minitaur_translation_ball, _ = (self._pybullet_client.multiplyTransforms(
+ minitaur_translation_world, minitaur_rotation_world, world_translation_ball,
+ world_rotation_ball))
+ distance = math.sqrt(minitaur_translation_ball[0]**2 + minitaur_translation_ball[1]**2)
+ angle = math.atan2(minitaur_translation_ball[0], minitaur_translation_ball[1])
self._observation = [angle - math.pi / 2, distance]
return self._observation
def _transform_action_to_motor_command(self, action):
if self._leg_model_enabled:
for i, action_component in enumerate(action):
- if not (-self._action_bound - ACTION_EPS <=
- action_component <= self._action_bound + ACTION_EPS):
- raise ValueError("{}th action {} out of bounds.".format
- (i, action_component))
+ if not (-self._action_bound - ACTION_EPS <= action_component <=
+ self._action_bound + ACTION_EPS):
+ raise ValueError("{}th action {} out of bounds.".format(i, action_component))
action = self._apply_steering_to_locomotion(action)
action = self.minitaur.ConvertFromLegModel(action)
return action
@@ -126,15 +117,12 @@ class MinitaurBallGymEnv(minitaur_gym_env.MinitaurGymEnv):
return action
def _distance_to_ball(self):
- world_translation_minitaur, _ = (
- self._pybullet_client.getBasePositionAndOrientation(
- self.minitaur.quadruped))
- world_translation_ball, _ = (
- self._pybullet_client.getBasePositionAndOrientation(
- self._ball_id))
- distance = math.sqrt(
- (world_translation_ball[0] - world_translation_minitaur[0])**2 +
- (world_translation_ball[1] - world_translation_minitaur[1])**2)
+ world_translation_minitaur, _ = (self._pybullet_client.getBasePositionAndOrientation(
+ self.minitaur.quadruped))
+ world_translation_ball, _ = (self._pybullet_client.getBasePositionAndOrientation(
+ self._ball_id))
+ distance = math.sqrt((world_translation_ball[0] - world_translation_minitaur[0])**2 +
+ (world_translation_ball[1] - world_translation_minitaur[1])**2)
return distance
def _goal_state(self):