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:
@@ -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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user