def _build_master_scenario(self, world, ego_vehicle, route, town_name, timeout=300, debug_mode=False): """ Create the MasterScenario """ # We have to find the target. # we also have to convert the route to the expected format master_scenario_configuration = ScenarioConfiguration() master_scenario_configuration.target = route[-1][ 0] # Take the last point and add as target. master_scenario_configuration.route = convert_transform_to_location( route) master_scenario_configuration.town = town_name # TODO THIS NAME IS BIT WEIRD SINCE THE EGO VEHICLE IS ALREADY THERE, IT IS MORE ABOUT THE TRANSFORM master_scenario_configuration.ego_vehicle = ActorConfigurationData( 'vehicle.lincoln.mkz2017', ego_vehicle.get_transform(), 'hero') master_scenario_configuration.trigger_points = [ ego_vehicle.get_transform() ] # Provide an initial blackboard entry to ensure all scenarios are running correctly blackboard = py_trees.blackboard.Blackboard() blackboard.set('master_scenario_command', 'scenarios_running') return MasterScenario(world, [ego_vehicle], master_scenario_configuration, timeout=timeout, debug_mode=debug_mode)
def parse_scenario_configuration(scenario_config_file, scenario_name): """ Parse scenario configuration file and provide a list of ScenarioConfigurations @return If scenario_name starts with "group:" all scenarios within the config file will be returned. Otherwise only the scenario, that matches the scenario_name. """ single_scenario_only = True if scenario_name.startswith("group:"): single_scenario_only = False scenario_name = scenario_name[6:] tree = ET.parse(scenario_config_file) scenario_configurations = [] for scenario in tree.iter("scenario"): new_config = ScenarioConfiguration() new_config.town = scenario.attrib.get('town', None) new_config.name = scenario.attrib.get('name', None) new_config.type = scenario.attrib.get('type', None) new_config.other_actors = [] new_config.ego_vehicles = [] new_config.trigger_points = [] for weather in scenario.iter("weather"): new_config.weather.cloudiness = float(weather.attrib.get("cloudiness", 0)) new_config.weather.precipitation = float(weather.attrib.get("precipitation", 0)) new_config.weather.precipitation_deposits = float(weather.attrib.get("precipitation_deposits", 0)) new_config.weather.wind_intensity = float(weather.attrib.get("wind_intensity", 0.35)) new_config.weather.sun_azimuth_angle = float(weather.attrib.get("sun_azimuth_angle", 0.0)) new_config.weather.sun_altitude_angle = float(weather.attrib.get("sun_altitude_angle", 15.0)) for ego_vehicle in scenario.iter("ego_vehicle"): new_config.ego_vehicles.append(ActorConfiguration(ego_vehicle, 'hero')) new_config.trigger_points.append(new_config.ego_vehicles[-1].transform) for target in scenario.iter("target"): new_config.target = TargetConfiguration(target) for route in scenario.iter("route"): route_conf = RouteConfiguration() route_conf.parse_xml(route) new_config.route = route_conf for other_actor in scenario.iter("other_actor"): new_config.other_actors.append(ActorConfiguration(other_actor, 'scenario')) if single_scenario_only: if new_config.name == scenario_name: scenario_configurations.append(new_config) else: scenario_configurations.append(new_config) return scenario_configurations
def build_master_scenario(self, route, town_name, timeout, terminate_on_collision): # We have to find the target. # we also have to convert the route to the expected format master_scenario_configuration = ScenarioConfiguration() master_scenario_configuration.target = route[-1][0] # Take the last point and add as target. master_scenario_configuration.route = convert_transform_to_location(route) master_scenario_configuration.town = town_name master_scenario_configuration.ego_vehicle = ActorConfigurationData('vehicle.lincoln.mkz2017', self._ego_actor.get_transform()) master_scenario_configuration.trigger_point = self._ego_actor.get_transform() CarlaDataProvider.register_actor(self._ego_actor) return MasterScenario(self.world, [self._ego_actor], master_scenario_configuration, timeout=timeout, terminate_on_collision=terminate_on_collision)