def test_dataset_scenario_generation_full(self): """ Checking Track file with two track ids, both become valid at time 0. Two Scenarios should be created from this. """ params = ParameterServer() map_filename = os.path.join(os.path.dirname(__file__), "data/DR_DEU_Merging_MT_v01_shifted.xodr") track_filename = os.path.join( os.path.dirname(__file__), "data/interaction_dataset_DEU_Merging_dummy_track.csv") params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "MapFilename"] = map_filename params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "TrackFilenameList"] = [track_filename] params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"]["StartingOffsetMs"] = 0 scenario_generation = InteractionDatasetScenarioGenerationFull( params=params, num_scenarios=2) self.assertEqual(scenario_generation.get_num_scenarios(), 2) # first scenario scenario0 = scenario_generation.get_scenario(0) agent11 = scenario0.GetWorldState().agents[1] agent12 = scenario0.GetWorldState().agents[2] self.assertEqual(agent11.first_valid_timestamp, 0.0) self.assertEqual(agent12.first_valid_timestamp, 0.0) # agents are initialized with Behavior::NotValidYet self.assertEqual(list(scenario0.GetWorldState().agents_valid.keys()), []) scenario0.GetWorldState().Step(0.01) self.assertEqual(list(scenario0.GetWorldState().agents_valid.keys()), [1, 2]) # second scenario scenario1 = scenario_generation.get_scenario(1) agent21 = scenario1.GetWorldState().agents[1] agent22 = scenario1.GetWorldState().agents[2] self.assertEqual(agent21.first_valid_timestamp, 0.0) self.assertEqual(agent22.first_valid_timestamp, 0.0) self.assertEqual(list(scenario1.GetWorldState().agents_valid.keys()), []) scenario1.GetWorldState().Step(0.01) self.assertEqual(list(scenario1.GetWorldState().agents_valid.keys()), [1, 2])
def test_dataset_scenario_generation_full_late(self): # test wether agent 2 coming in late is correctly identified as invalid at first world time step params = ParameterServer() map_filename = os.path.join(os.path.dirname(__file__), "data/DR_DEU_Merging_MT_v01_shifted.xodr") track_filename = os.path.join( os.path.dirname(__file__), "data/interaction_dataset_dummy_track_late.csv") params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "MapFilename"] = map_filename params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "TrackFilenameList"] = [track_filename] params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"]["StartingOffsetMs"] = 0 scenario_generation = InteractionDatasetScenarioGenerationFull( params=params, num_scenarios=1) scenario = scenario_generation.get_scenario(0) world_state = scenario.GetWorldState() agent1 = world_state.GetAgent(1) agent2 = world_state.GetAgent(2) self.assertAlmostEqual(agent1.first_valid_timestamp, 0.0) self.assertAlmostEqual(agent2.first_valid_timestamp, 0.3) self.assertEqual(isinstance(agent1, Agent), True) self.assertEqual(agent1.IsValidAtTime(world_state.time), True) self.assertEqual(isinstance(agent2, Agent), True) self.assertEqual(agent2.IsValidAtTime(world_state.time), False)
def test_dataset_scenario_generation_full_outside3(self): """ Checking Track file with three track ids. test wether agent 3 (the ego agent of the scenario) outside at the beginning is correctly identified as valid at first world time step (although in the track files, it becomes valid later than the other agents -> will be cut off for scenario) """ params = ParameterServer() map_filename = os.path.join(os.path.dirname(__file__), "data/DR_DEU_Merging_MT_v01_shifted.xodr") track_filename = os.path.join( os.path.dirname(__file__), "data/interaction_dataset_DEU_Merging_dummy_track_outside.csv") params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "MapFilename"] = map_filename params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "TrackFilenameList"] = [track_filename] params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"]["StartingOffsetMs"] = 0 scenario_generation = InteractionDatasetScenarioGenerationFull( params=params, num_scenarios=3) scenario = scenario_generation.get_scenario(2) self.assertAlmostEqual(scenario.eval_agent_ids, [3]) world_state = scenario.GetWorldState() agent31 = world_state.GetAgent(1) agent32 = world_state.GetAgent(2) agent33 = world_state.GetAgent(3) # they all should be valid at the beginning world_state.time = 0 self.assertEqual(isinstance(agent31, Agent), True) self.assertEqual(agent31.IsValidAtTime(world_state.time), True) self.assertEqual(agent31.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent32, Agent), True) self.assertEqual(agent32.IsValidAtTime(world_state.time), True) self.assertEqual(agent32.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent33, Agent), True) self.assertEqual(agent33.IsValidAtTime(world_state.time), True) self.assertEqual(agent33.InsideRoadCorridor(), True) world_state.Step(0.05) self.assertEqual(len(world_state.agents_valid), 3)
def test_dataset_scenario_generation_full_incomplete(self): """ Checking Track file with three track ids, but agent 1 is never inside the map, so it should only generate 2 scenarios """ params = ParameterServer() map_filename = os.path.join(os.path.dirname(__file__), "data/DR_CHN_Merging_ZS_partial_v02.xodr") track_filename = os.path.join( os.path.dirname(__file__), "data/interaction_dataset_CHN_Merging_dummy_track_incomplete.csv") params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "MapFilename"] = map_filename params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "TrackFilenameList"] = [track_filename] params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"]["StartingOffsetMs"] = 0 scenario_generation = InteractionDatasetScenarioGenerationFull( params=params, num_scenarios=3) self.assertEqual(scenario_generation.get_num_scenarios(), 2) # first scenario agent12 = scenario_generation.get_scenario(0).GetWorldState().agents[2] agent17 = scenario_generation.get_scenario(0).GetWorldState().agents[7] self.assertEqual(agent12.first_valid_timestamp, 0.0) self.assertEqual(agent17.first_valid_timestamp, 0.0) # second scenario agent22 = scenario_generation.get_scenario(1).GetWorldState().agents[2] agent27 = scenario_generation.get_scenario(1).GetWorldState().agents[7] self.assertEqual(agent22.first_valid_timestamp, 0.0) self.assertEqual(agent27.first_valid_timestamp, 0.0)
def test_dataset_scenario_generation_full_outside3_behavior_overwritten( self): """ Checking Track file with three track ids. test wether agent 3 (the ego agent of the scenario) outside at the beginning is correctly identified as valid at first world time step (although in the track files, it becomes valid later than the other agents -> will be cut off for scenario). Overwriting Behavior Model. """ params = ParameterServer() map_filename = os.path.join(os.path.dirname(__file__), "data/DR_DEU_Merging_MT_v01_shifted.xodr") track_filename = os.path.join( os.path.dirname(__file__), "data/interaction_dataset_DEU_Merging_dummy_track_outside.csv") params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "MapFilename"] = map_filename params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "TrackFilenameList"] = [track_filename] params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"]["StartingOffsetMs"] = 0 params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "BehaviorModel"] = "BehaviorMobilRuleBased" scenario_generation = InteractionDatasetScenarioGenerationFull( params=params, num_scenarios=3) scenario = scenario_generation.get_scenario(2) self.assertAlmostEqual(scenario.eval_agent_ids, [3]) world_state = scenario.GetWorldState() agent31 = world_state.GetAgent(1) agent32 = world_state.GetAgent(2) agent33 = world_state.GetAgent(3) # others are defined as BehaviorMobilRuleBased self.assertTrue( isinstance(agent31.behavior_model, BehaviorMobilRuleBased)) self.assertTrue( isinstance(agent32.behavior_model, BehaviorMobilRuleBased)) self.assertTrue( isinstance(agent33.behavior_model, BehaviorStaticTrajectory)) # they all should be valid at the beginning world_state.time = 0 self.assertEqual(isinstance(agent31, Agent), True) self.assertEqual(agent31.IsValidAtTime(world_state.time), True) self.assertEqual(agent31.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent32, Agent), True) self.assertEqual(agent32.IsValidAtTime(world_state.time), True) self.assertEqual(agent32.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent33, Agent), True) self.assertEqual(agent33.IsValidAtTime(world_state.time), True) self.assertEqual(agent33.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent33, Agent), True) self.assertEqual(agent33.IsValidAtTime(world_state.time), True) self.assertEqual(agent33.InsideRoadCorridor(), True) evaluator = EvaluatorCollisionAgents() world_state.AddEvaluator("collision", evaluator) info = world_state.Evaluate() self.assertEqual(info["collision"], False) world_state.Step(0.05) evaluator = EvaluatorCollisionAgents() world_state.AddEvaluator("collision", evaluator) info = world_state.Evaluate() self.assertEqual(info["collision"], False) self.assertEqual(len(world_state.agents_valid), 3)
def test_dataset_scenario_generation_full_outside1_behavior_overwritten( self): """ Checking Track file with three track ids. test wether agent 3 (not the ego agent of the scenario) outside at the beginning is correctly identified as invalid at first world time step, but becomes valid later. Overwriting Behavior Model. """ params = ParameterServer() map_filename = os.path.join(os.path.dirname(__file__), "data/DR_DEU_Merging_MT_v01_shifted.xodr") track_filename = os.path.join( os.path.dirname(__file__), "data/interaction_dataset_DEU_Merging_dummy_track_outside.csv") params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "MapFilename"] = map_filename params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "TrackFilenameList"] = [track_filename] params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"]["StartingOffsetMs"] = 0 params["Scenario"]["Generation"][ "InteractionDatasetScenarioGenerationFull"][ "BehaviorModel"] = "BehaviorMobilRuleBased" scenario_generation = InteractionDatasetScenarioGenerationFull( params=params, num_scenarios=1) scenario = scenario_generation.get_scenario(0) self.assertAlmostEqual(scenario.eval_agent_ids, [1]) world_state = scenario.GetWorldState() agent11 = world_state.GetAgent(1) agent12 = world_state.GetAgent(2) agent13 = world_state.GetAgent(3) # others are defined as BehaviorMobilRuleBased self.assertTrue( isinstance(agent11.behavior_model, BehaviorStaticTrajectory)) self.assertTrue( isinstance(agent12.behavior_model, BehaviorMobilRuleBased)) self.assertTrue( isinstance(agent13.behavior_model, BehaviorMobilRuleBased)) self.assertAlmostEqual(agent11.first_valid_timestamp, 0.0) self.assertAlmostEqual(agent12.first_valid_timestamp, 0.0) self.assertNotEqual(agent13.first_valid_timestamp, 0.0) # agent13 should not be valid at the beginning, as he is outside of map world_state.time = 0 self.assertEqual(isinstance(agent11, Agent), True) self.assertEqual(agent11.IsValidAtTime(world_state.time), True) self.assertEqual(agent11.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent12, Agent), True) self.assertEqual(agent12.IsValidAtTime(world_state.time), True) self.assertEqual(agent12.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent13, Agent), True) self.assertEqual(agent13.IsValidAtTime(world_state.time), False) # as we use only state once it's in map, this will be true, although the time step is not valid yet self.assertEqual(agent13.InsideRoadCorridor(), True) # agent13 should not be valid at the beginning, as he is outside of map world_state.Step(0.05) self.assertEqual(isinstance(agent11, Agent), True) self.assertEqual(agent11.IsValidAtTime(world_state.time), True) self.assertEqual(agent11.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent12, Agent), True) self.assertEqual(agent12.IsValidAtTime(world_state.time), True) self.assertEqual(agent12.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent13, Agent), True) self.assertEqual(agent13.IsValidAtTime(world_state.time), False) # as we use only state once it's in map, this will be true, although the time step is not valid yet self.assertEqual(agent13.InsideRoadCorridor(), True) self.assertEqual(list(world_state.agents_valid.keys()), [1, 2]) # agent13 should be valid at some point world_state.Step(agent13.first_valid_timestamp) world_state.Step( 0.01 ) # agent13.IsValidAtTime() uses previous time stamp, therefore we increment it one more step self.assertEqual(isinstance(agent11, Agent), True) self.assertEqual(agent11.IsValidAtTime(world_state.time), True) self.assertEqual(agent11.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent12, Agent), True) self.assertEqual(agent12.IsValidAtTime(world_state.time), True) self.assertEqual(agent12.InsideRoadCorridor(), True) self.assertEqual(isinstance(agent13, Agent), True) self.assertEqual(agent13.IsValidAtTime(world_state.time), True) self.assertEqual(agent13.InsideRoadCorridor(), True) self.assertEqual(list(world_state.agents_valid.keys()), [1, 2, 3])