Fix for 1643, allow to instantiate multiple PyBullet Gym environments (Ant, Humanoid, Hopper, Pendula etc) in the same process (same or other thread). It uses the pybullet_utils.bullet_client to achieve this.

This commit is contained in:
Erwin Coumans
2018-05-18 16:23:54 -07:00
parent d17d496f97
commit 0abe4151e5
24 changed files with 163 additions and 403 deletions

View File

@@ -1,6 +1,6 @@
import sys, os
sys.path.append(os.path.dirname(__file__))
import pybullet as p
import pybullet
import gym
@@ -8,13 +8,14 @@ import gym
class Scene:
"A base class for single- and multiplayer scenes"
def __init__(self, gravity, timestep, 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(gravity, timestep, 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
@@ -55,7 +56,8 @@ class SingleRobotEmptyScene(Scene):
class World:
def __init__(self, gravity, timestep, frame_skip):
def __init__(self, bullet_client, gravity, timestep, frame_skip):
self._p = bullet_client
self.gravity = gravity
self.timestep = timestep
self.frame_skip = frame_skip
@@ -65,12 +67,12 @@ class World:
def clean_everything(self):
#p.resetSimulation()
p.setGravity(0, 0, -self.gravity)
p.setDefaultContactERP(0.9)
self._p.setGravity(0, 0, -self.gravity)
self._p.setDefaultContactERP(0.9)
#print("self.numSolverIterations=",self.numSolverIterations)
p.setPhysicsEngineParameter(fixedTimeStep=self.timestep*self.frame_skip, numSolverIterations=self.numSolverIterations, numSubSteps=self.frame_skip)
self._p.setPhysicsEngineParameter(fixedTimeStep=self.timestep*self.frame_skip, numSolverIterations=self.numSolverIterations, numSubSteps=self.frame_skip)
def step(self, frame_skip):
p.stepSimulation()
self._p.stepSimulation()