def testMovableCameraSetGetPose(self): height, width = 240, 320 camera = engine.MovableCamera(self._physics, height, width) image = camera.render().copy() pose = camera.get_pose() lookat_offset = np.array([0.01, 0.02, -0.03]) # Would normally pass the new values directly to camera.set_pose instead of # using the namedtuple _replace method, but this makes the asserts at the # end of the test a little cleaner. new_pose = pose._replace(distance=pose.distance * 1.5, lookat=pose.lookat + lookat_offset, azimuth=pose.azimuth + -15, elevation=pose.elevation - 10) camera.set_pose(*new_pose) self.assertEqual(new_pose.distance, camera.get_pose().distance) self.assertEqual(new_pose.azimuth, camera.get_pose().azimuth) self.assertEqual(new_pose.elevation, camera.get_pose().elevation) np.testing.assert_allclose(new_pose.lookat, camera.get_pose().lookat) self.assertFalse(np.all(image == camera.render()))
def render(self, mode='human', camera_id=None, height=1920, width=2560, depth=False, segmentation=False): if mode == 'rgb_array': # TODO: cache camera? doesn't seem to affect performance that much # also use camera._scene.free()? though it will slow things down if camera_id is None: camera_id = self.camera_id camera = engine.MovableCamera(self.sim, height=height, width=width) camera.set_pose(**CAMERAS[camera_id]) # http://www.mujoco.org/book/APIreference.html#mjvOption # https://github.com/deepmind/dm_control/blob/9e0fe0f0f9713a2a993ca78776529011d6c5fbeb/dm_control/mujoco/engine.py#L200 # mjtRndFlag(mjRND_SHADOW=0, mjRND_WIREFRAME=1, mjRND_REFLECTION=2, mjRND_ADDITIVE=3, mjRND_SKYBOX=4, mjRND_FOG=5, mjRND_HAZE=6, mjRND_SEGMENT=7, mjRND_IDCOLOR=8, mjNRNDFLAG=9) if not (depth or segmentation): img = camera.render(render_flag_overrides=dict( skybox=False, fog=False, haze=False)) # RGB else: img = camera.render(depth=depth, segmentation=segmentation) return img else: super(KitchenTaskRelaxV1, self).render()
def render(self, mode='human'): if mode =='rgb_array': camera = engine.MovableCamera(self.sim, 1920, 2560) camera.set_pose(distance=2.2, lookat=[-0.2, .5, 2.], azimuth=70, elevation=-35) img = camera.render() return img else: super(KitchenTaskRelaxV1, self).render()
def after_compile(self, physics): """Instantiate the camera and ensure rendering buffer is large enough.""" buffer_height = max(self._height, physics.model.vis.global_.offheight) buffer_width = max(self._width, physics.model.vis.global_.offwidth) physics.model.vis.global_.offheight = buffer_height physics.model.vis.global_.offwidth = buffer_width self._camera = engine.MovableCamera(physics, height=self._height, width=self._width)
def render(self, mode="human"): if mode == "rgb_array": camera = engine.MovableCamera(self.sim, 256, 256) camera.set_pose( distance=2.2, lookat=[-0.2, 0.5, 2.0], azimuth=70, elevation=-35 ) img = camera.render() return img else: super(KitchenTaskRelaxV1, self).render()