summaryrefslogtreecommitdiff
path: root/examples/pybullet/gym/pybullet_envs/scene_abstract.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pybullet/gym/pybullet_envs/scene_abstract.py')
-rw-r--r--examples/pybullet/gym/pybullet_envs/scene_abstract.py103
1 files changed, 52 insertions, 51 deletions
diff --git a/examples/pybullet/gym/pybullet_envs/scene_abstract.py b/examples/pybullet/gym/pybullet_envs/scene_abstract.py
index b50dd524b..f4bbfae0c 100644
--- a/examples/pybullet/gym/pybullet_envs/scene_abstract.py
+++ b/examples/pybullet/gym/pybullet_envs/scene_abstract.py
@@ -1,78 +1,79 @@
import sys, os
sys.path.append(os.path.dirname(__file__))
-import pybullet
+import pybullet
import gym
class Scene:
- "A base class for single- and multiplayer scenes"
+ "A base class for single- and multiplayer scenes"
- def __init__(self, bullet_client, gravity, timestep, frame_skip):
- self._p = bullet_client
- self.np_random, seed = gym.utils.seeding.np_random(None)
- self.timestep = timestep
- self.frame_skip = frame_skip
+ def __init__(self, bullet_client, gravity, timestep, frame_skip):
+ self._p = bullet_client
+ self.np_random, seed = gym.utils.seeding.np_random(None)
+ self.timestep = timestep
+ self.frame_skip = frame_skip
- self.dt = self.timestep * self.frame_skip
- self.cpp_world = World(self._p, gravity, timestep, frame_skip)
+ self.dt = self.timestep * self.frame_skip
+ self.cpp_world = World(self._p, gravity, timestep, frame_skip)
- self.test_window_still_open = True # or never opened
- self.human_render_detected = False # if user wants render("human"), we open test window
+ self.test_window_still_open = True # or never opened
+ self.human_render_detected = False # if user wants render("human"), we open test window
- self.multiplayer_robots = {}
+ self.multiplayer_robots = {}
- def test_window(self):
- "Call this function every frame, to see what's going on. Not necessary in learning."
- self.human_render_detected = True
- return self.test_window_still_open
+ def test_window(self):
+ "Call this function every frame, to see what's going on. Not necessary in learning."
+ self.human_render_detected = True
+ return self.test_window_still_open
- def actor_introduce(self, robot):
- "Usually after scene reset"
- if not self.multiplayer: return
- self.multiplayer_robots[robot.player_n] = robot
+ def actor_introduce(self, robot):
+ "Usually after scene reset"
+ if not self.multiplayer: return
+ self.multiplayer_robots[robot.player_n] = robot
- def actor_is_active(self, robot):
- """
+ def actor_is_active(self, robot):
+ """
Used by robots to see if they are free to exclusiveley put their HUD on the test window.
Later can be used for click-focus robots.
"""
- return not self.multiplayer
+ return not self.multiplayer
- def episode_restart(self, bullet_client):
- "This function gets overridden by specific scene, to reset specific objects into their start positions"
- self.cpp_world.clean_everything()
- #self.cpp_world.test_window_history_reset()
+ def episode_restart(self, bullet_client):
+ "This function gets overridden by specific scene, to reset specific objects into their start positions"
+ self.cpp_world.clean_everything()
+ #self.cpp_world.test_window_history_reset()
- def global_step(self):
- """
+ def global_step(self):
+ """
The idea is: apply motor torques for all robots, then call global_step(), then collect
observations from robots using step() with the same action.
"""
- self.cpp_world.step(self.frame_skip)
+ self.cpp_world.step(self.frame_skip)
-class SingleRobotEmptyScene(Scene):
- multiplayer = False # this class is used "as is" for InvertedPendulum, Reacher
-class World:
+class SingleRobotEmptyScene(Scene):
+ multiplayer = False # this class is used "as is" for InvertedPendulum, Reacher
- def __init__(self, bullet_client, gravity, timestep, frame_skip):
- self._p = bullet_client
- self.gravity = gravity
- self.timestep = timestep
- self.frame_skip = frame_skip
- self.numSolverIterations = 5
- self.clean_everything()
-
-
- def clean_everything(self):
- #p.resetSimulation()
- self._p.setGravity(0, 0, -self.gravity)
- self._p.setDefaultContactERP(0.9)
- #print("self.numSolverIterations=",self.numSolverIterations)
- self._p.setPhysicsEngineParameter(fixedTimeStep=self.timestep*self.frame_skip, numSolverIterations=self.numSolverIterations, numSubSteps=self.frame_skip)
-
- def step(self, frame_skip):
- self._p.stepSimulation()
+class World:
+ def __init__(self, bullet_client, gravity, timestep, frame_skip):
+ self._p = bullet_client
+ self.gravity = gravity
+ self.timestep = timestep
+ self.frame_skip = frame_skip
+ self.numSolverIterations = 5
+ self.clean_everything()
+
+ def clean_everything(self):
+ #p.resetSimulation()
+ self._p.setGravity(0, 0, -self.gravity)
+ self._p.setDefaultContactERP(0.9)
+ #print("self.numSolverIterations=",self.numSolverIterations)
+ self._p.setPhysicsEngineParameter(fixedTimeStep=self.timestep * self.frame_skip,
+ numSolverIterations=self.numSolverIterations,
+ numSubSteps=self.frame_skip)
+
+ def step(self, frame_skip):
+ self._p.stepSimulation()