def test_default_body_contorls(action, expected): scene_graph = hsim.SceneGraph() agent_config = habitat_sim.AgentConfiguration() agent_config.action_space = dict( move_backward=habitat_sim.ActionSpec( "move_backward", habitat_sim.ActuationSpec(amount=0.25)), move_forward=habitat_sim.ActionSpec( "move_forward", habitat_sim.ActuationSpec(amount=0.25)), move_left=habitat_sim.ActionSpec( "move_left", habitat_sim.ActuationSpec(amount=0.25)), move_right=habitat_sim.ActionSpec( "move_right", habitat_sim.ActuationSpec(amount=0.25)), turn_left=habitat_sim.ActionSpec( "turn_left", habitat_sim.ActuationSpec(amount=10.0)), turn_right=habitat_sim.ActionSpec( "turn_right", habitat_sim.ActuationSpec(amount=10.0)), ) agent = habitat_sim.Agent(scene_graph.get_root_node().create_child(), agent_config) state = agent.state agent.act(action) new_state = agent.state _check_state_expected(state, new_state, expected) for k, v in state.sensor_states.items(): assert k in new_state.sensor_states _check_state_expected(v, new_state.sensor_states[k], expected)
def test_default_sensor_contorls(action, expected): scene_graph = hsim.SceneGraph() agent_config = habitat_sim.AgentConfiguration() agent_config.action_space = dict( move_up=habitat_sim.ActionSpec("move_up", habitat_sim.ActuationSpec(amount=0.25)), move_down=habitat_sim.ActionSpec( "move_down", habitat_sim.ActuationSpec(amount=0.25)), look_left=habitat_sim.ActionSpec( "look_left", habitat_sim.ActuationSpec(amount=10.0)), look_right=habitat_sim.ActionSpec( "look_right", habitat_sim.ActuationSpec(amount=10.0)), look_up=habitat_sim.ActionSpec("look_up", habitat_sim.ActuationSpec(amount=10.0)), look_down=habitat_sim.ActionSpec( "look_down", habitat_sim.ActuationSpec(amount=10.0)), ) agent = habitat_sim.Agent(agent_config) agent.attach(scene_graph.get_root_node().create_child()) state = agent.state agent.act(action) new_state = agent.state _check_state_same(state, new_state) for k, v in state.sensor_states.items(): assert k in new_state.sensor_states _check_state_expected(v, new_state.sensor_states[k], expected)
def test_no_move_fun(): scene_graph = hsim.SceneGraph() agent_config = habitat_sim.AgentConfiguration() agent_config.action_space = dict(move_forward=habitat_sim.ActionSpec( "DNF", habitat_sim.ActuationSpec(amount=0.25))) agent = habitat_sim.Agent(scene_graph.get_root_node().create_child(), agent_config) with pytest.raises(AssertionError): agent.act("move_forward")
def test_set_state(): scene_graph = hsim.SceneGraph() agent = habitat_sim.Agent(scene_graph.get_root_node().create_child()) state = agent.state agent.state = state new_state = agent.state _check_state_same(state, new_state) for k, v in state.sensor_states.items(): assert k in new_state.sensor_states _check_state_same(v, new_state.sensor_states[k])
def test_attach_detach(): scene_graph = hsim.SceneGraph() agent = habitat_sim.Agent() agent.attach(scene_graph.get_root_node().create_child()) habitat_sim.errors.assert_obj_valid(agent.body) for _, v in agent.sensors.items(): habitat_sim.errors.assert_obj_valid(v) with pytest.raises(habitat_sim.errors.InvalidAttachedObject): habitat_sim.errors.assert_obj_valid(agent.body) for _, v in agent.sensors.items(): with pytest.raises(habitat_sim.errors.InvalidAttachedObject): habitat_sim.errors.assert_obj_valid(v)
def test_reconfigure(): scene_graph = hsim.SceneGraph() agent = habitat_sim.Agent(scene_graph.get_root_node().create_child()) habitat_sim.errors.assert_obj_valid(agent.body) for _, v in agent.sensors.items(): habitat_sim.errors.assert_obj_valid(v) agent.reconfigure(agent.agent_config) for _, v in agent.sensors.items(): habitat_sim.errors.assert_obj_valid(v) agent.reconfigure(agent.agent_config, True) for _, v in agent.sensors.items(): habitat_sim.errors.assert_obj_valid(v)
def test_change_state(): scene_graph = hsim.SceneGraph() agent = habitat_sim.Agent(scene_graph.get_root_node().create_child()) for _ in range(100): state = agent.state state.position += np.random.uniform(-1, 1, size=3) state.rotation *= habitat_sim.utils.quat_from_angle_axis( np.random.uniform(0, 2 * np.pi), np.array([0.0, 1.0, 0.0])) for k, v in state.sensor_states.items(): v.position += np.random.uniform(-1, 1, size=3) v.rotation *= habitat_sim.utils.quat_from_angle_axis( np.random.uniform(0, 2 * np.pi), np.array([1.0, 1.0, 1.0])) agent.state = state new_state = agent.state _check_state_same(state, new_state) for k, v in state.sensor_states.items(): assert k in new_state.sensor_states _check_state_same(v, new_state.sensor_states[k])
def test_pyrobot_noisy_actions(noise_multiplier, robot, controller): np.random.seed(0) scene_graph = hsim.SceneGraph() agent_config = habitat_sim.AgentConfiguration() agent_config.action_space = dict( noisy_move_backward=habitat_sim.ActionSpec( "pyrobot_noisy_move_backward", habitat_sim.PyRobotNoisyActuationSpec( amount=1.0, robot=robot, controller=controller, noise_multiplier=noise_multiplier, ), ), noisy_move_forward=habitat_sim.ActionSpec( "pyrobot_noisy_move_forward", habitat_sim.PyRobotNoisyActuationSpec( amount=1.0, robot=robot, controller=controller, noise_multiplier=noise_multiplier, ), ), noisy_turn_left=habitat_sim.ActionSpec( "pyrobot_noisy_turn_left", habitat_sim.PyRobotNoisyActuationSpec( amount=90.0, robot=robot, controller=controller, noise_multiplier=noise_multiplier, ), ), noisy_turn_right=habitat_sim.ActionSpec( "pyrobot_noisy_turn_right", habitat_sim.PyRobotNoisyActuationSpec( amount=90.0, robot=robot, controller=controller, noise_multiplier=noise_multiplier, ), ), move_backward=habitat_sim.ActionSpec( "move_backward", habitat_sim.ActuationSpec(amount=1.0) ), move_forward=habitat_sim.ActionSpec( "move_forward", habitat_sim.ActuationSpec(amount=1.0) ), turn_left=habitat_sim.ActionSpec( "turn_left", habitat_sim.ActuationSpec(amount=90.0) ), turn_right=habitat_sim.ActionSpec( "turn_right", habitat_sim.ActuationSpec(amount=90.0) ), ) agent = habitat_sim.Agent(scene_graph.get_root_node().create_child(), agent_config) for base_action in set( act.replace("noisy_", "") for act in agent_config.action_space ): state = agent.state state.rotation = np.quaternion(1, 0, 0, 0) agent.state = state agent.act(base_action) base_state = agent.state delta_translations = [] delta_rotations = [] for _ in range(300): agent.state = state agent.act(f"noisy_{base_action}") noisy_state = agent.state delta_translations.append(_delta_translation(base_state, noisy_state)) delta_rotations.append(_delta_rotation(base_state, noisy_state)) delta_translations = np.stack(delta_translations) delta_rotations = np.stack(delta_rotations) if "move" in base_action: noise_model = pyrobot_noise_models[robot][controller].linear_motion else: noise_model = pyrobot_noise_models[robot][controller].rotational_motion EPS = 5e-2 assert ( np.linalg.norm( noise_model.linear.mean * noise_multiplier - np.abs(delta_translations.mean(0)) ) < EPS ) assert ( np.linalg.norm( noise_model.rotation.mean * noise_multiplier - np.abs(delta_rotations.mean(0)) ) < EPS ) assert ( np.linalg.norm( noise_model.linear.cov * noise_multiplier - np.diag(delta_translations.std(0) ** 2) ) < EPS ) assert ( np.linalg.norm( noise_model.rotation.cov * noise_multiplier - (delta_rotations.std(0) ** 2) ) < EPS )
def scene_graph(): return hsim.SceneGraph()