Exemplo n.º 1
0
  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()
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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()