Ejemplo n.º 1
0
  def test_walker_is_correctly_reinitialized(
      self, position_offset, rotate_180_degrees, use_variations):
    walker_spawn_position = position_offset

    if not rotate_180_degrees:
      walker_spawn_rotation = None
    else:
      walker_spawn_rotation = np.pi

    if use_variations:
      walker_spawn_position = deterministic.Constant(position_offset)
      walker_spawn_rotation = deterministic.Constant(walker_spawn_rotation)

    walker = cmu_humanoid.CMUHumanoid()
    arena = corridor_arenas.EmptyCorridor()
    task = corridor_tasks.RunThroughCorridor(
        walker=walker,
        arena=arena,
        walker_spawn_position=walker_spawn_position,
        walker_spawn_rotation=walker_spawn_rotation)

    # Randomize the initial pose and joint positions in order to check that they
    # are set correctly by `initialize_episode`.
    random_state = np.random.RandomState(12345)
    task.initialize_episode_mjcf(random_state)
    physics = mjcf.Physics.from_mjcf_model(task.root_entity.mjcf_model)

    walker_joints = walker.mjcf_model.find_all('joint')
    physics.bind(walker_joints).qpos = random_state.uniform(
        size=len(walker_joints))
    walker.set_pose(physics,
                    position=random_state.uniform(size=3),
                    quaternion=rotations.UniformQuaternion()(random_state))

    task.initialize_episode(physics, random_state)
    physics.forward()

    with self.subTest('Correct joint positions'):
      walker_qpos = physics.bind(walker_joints).qpos
      if walker.upright_pose.qpos is not None:
        np.testing.assert_array_equal(walker_qpos, walker.upright_pose.qpos)
      else:
        walker_qpos0 = physics.bind(walker_joints).qpos0
        np.testing.assert_array_equal(walker_qpos, walker_qpos0)

    walker_xpos, walker_xquat = walker.get_pose(physics)

    with self.subTest('Correct position'):
      expected_xpos = walker.upright_pose.xpos + np.array(position_offset)
      np.testing.assert_array_equal(walker_xpos, expected_xpos)

    with self.subTest('Correct orientation'):
      upright_xquat = walker.upright_pose.xquat.copy()
      upright_xquat /= np.linalg.norm(walker.upright_pose.xquat)
      if rotate_180_degrees:
        expected_xquat = (-upright_xquat[3], -upright_xquat[2],
                          upright_xquat[1], upright_xquat[0])
      else:
        expected_xquat = upright_xquat
      np.testing.assert_allclose(walker_xquat, expected_xquat)
Ejemplo n.º 2
0
 def testMultiplicative(self, use_constant_variation_object):
     amount = 23
     if use_constant_variation_object:
         variation = noises.Multiplicative(deterministic.Constant(amount))
     else:
         variation = noises.Multiplicative(amount)
     initial_value = 3
     current_value = initial_value
     for _ in range(NUM_ITERATIONS):
         current_value = variation(initial_value=initial_value,
                                   current_value=current_value)
         self.assertEqual(current_value, initial_value * amount)
Ejemplo n.º 3
0
 def testAdditiveCumulative(self, use_constant_variation_object):
     amount = 3
     if use_constant_variation_object:
         variation = noises.Additive(deterministic.Constant(amount),
                                     cumulative=True)
     else:
         variation = noises.Additive(amount, cumulative=True)
     initial_value = 1
     current_value = initial_value
     for i in range(NUM_ITERATIONS):
         current_value = variation(initial_value=initial_value,
                                   current_value=current_value)
         self.assertEqual(current_value, initial_value + amount * (i + 1))
Ejemplo n.º 4
0
 def test_getitem(self):
     value = deterministic.Constant(np.array([4, 5, 6, 7, 8]))
     np.testing.assert_array_equal(variation.evaluate(value[[3, 1]]),
                                   [7, 5])
Ejemplo n.º 5
0
 def setUp(self):
     super(VariationTest, self).setUp()
     self.value_1 = 3
     self.variation_1 = deterministic.Constant(self.value_1)
     self.value_2 = 5
     self.variation_2 = deterministic.Constant(self.value_2)
Ejemplo n.º 6
0
 def setUp(self):
     self.value_1 = 3
     self.variation_1 = deterministic.Constant(self.value_1)
     self.value_2 = 5
     self.variation_2 = deterministic.Constant(self.value_2)