#!/usr/bin/env python import os, logging, gym from baselines import logger from baselines.common import set_global_seeds from baselines.common.misc_util import boolean_flag from baselines import bench from baselines.a2c.a2c import learn from baselines.common.vec_env.subproc_vec_env import SubprocVecEnv from baselines.common.vec_env.vec_frame_stack import VecFrameStack import time import gym from gym import spaces import pybullet as p from itertools import cycle import numpy as np camTargetPos = [0,0,0] cameraUp = [0,0,1] cameraPos = [1,1,1] pitch = -10.0 roll=0 upAxisIndex = 2 camDistance = 4 pixelWidth = 320 pixelHeight = 200 nearPlane = 0.01 farPlane = 100 fov = 60 class TestEnv(gym.Env): def __init__(self, renderer = 'tiny', # ('tiny', 'egl', 'debug') ): self.action_space = spaces.Discrete(2) self.iter = cycle(range(0,360,10)) # how we want to show assert renderer in ('tiny', 'egl', 'debug','plugin') self._renderer = renderer self._render_width = 84 self._render_height = 84 # connecting if self._renderer == "tiny" or self._renderer == "plugin": optionstring='--width={} --height={}'.format(self._render_width,self._render_height) p.connect(p.DIRECT, options=optionstring) if self._renderer == "plugin": plugin_fn = os.path.join(p.__file__.split("bullet3")[0],"bullet3/build/lib.linux-x86_64-3.5/eglRenderer.cpython-35m-x86_64-linux-gnu.so") plugin = p.loadPlugin(plugin_fn,"_tinyRendererPlugin") if plugin < 0: print("\nPlugin Failed to load! Try installing via `pip install -e .`\n") sys.exit() print("plugin =",plugin) elif self._renderer == "egl": optionstring='--width={} --height={}'.format(self._render_width,self._render_height) optionstring += ' --window_backend=2 --render_device=0' p.connect(p.GUI, options=optionstring) elif self._renderer == "debug": #print("Connection: SHARED_MEMORY") #cid = p.connect(p.SHARED_MEMORY) #if (cid<0): cid = p.connect(p.GUI) p.resetDebugVisualizerCamera(1.3,180,-41,[0.52,-0.2,-0.33]) p.configureDebugVisualizer(p.COV_ENABLE_GUI,0) p.configureDebugVisualizer(p.COV_ENABLE_SEGMENTATION_MARK_PREVIEW,0) p.configureDebugVisualizer(p.COV_ENABLE_DEPTH_BUFFER_PREVIEW,0) p.configureDebugVisualizer(p.COV_ENABLE_RGB_BUFFER_PREVIEW,0) def __del__(self): p.disconnect() def reset(self): pass def step(self,action): p.stepSimulation() start = time.time() yaw = next(self.iter) viewMatrix = p.computeViewMatrixFromYawPitchRoll(camTargetPos, camDistance, yaw, pitch, roll, upAxisIndex) aspect = pixelWidth / pixelHeight; projectionMatrix = p.computeProjectionMatrixFOV(fov, aspect, nearPlane, farPlane); img_arr = p.getCameraImage(pixelWidth, pixelHeight, viewMatrix, projectionMatrix, shadow=1,lightDirection=[1,1,1], renderer=p.ER_BULLET_HARDWARE_OPENGL) #renderer=pybullet.ER_TINY_RENDERER) self._observation = img_arr[2] return np.array(self._observation), 0, 0, {} def seed(self, seed=None): pass def train(env_id, num_timesteps=300, seed=0,num_env=2,renderer='tiny'): def make_env(rank): def _thunk(): if env_id == "TestEnv": env = TestEnv(renderer=renderer) #gym.make(env_id) else: env = gym.make(env_id) env.seed(seed + rank) env = bench.Monitor(env, logger.get_dir() and os.path.join(logger.get_dir(), str(rank))) gym.logger.setLevel(logging.WARN) # only clip rewards when not evaluating return env return _thunk set_global_seeds(seed) env = SubprocVecEnv([make_env(i) for i in range(num_env)]) env.reset() start = time.time() for i in range(num_timesteps): action = [env.action_space.sample() for _ in range(num_env)] env.step(action) stop = time.time() duration = (stop - start) if (duration): fps = num_timesteps/duration else: fps=0 env.close() return num_env, fps if __name__ == "__main__": env_id = "TestEnv" res = [] for renderer in ('tiny','plugin', 'egl'): for i in (1,8): tmp = train(env_id,num_env=i,renderer=renderer) print(renderer,tmp) res.append((renderer,tmp)) print() print("rendertest_sync.py") print("back nenv fps fps_tot") for renderer,i in res: print(renderer,'\t', i[0],round(i[1]),'\t',round(i[0]*i[1]))