def create_source_config_agents(self, agent_states, agent_geometries,
                                 behavior_models, execution_models,
                                 dynamic_models, goal_definitions,
                                 controlled_agent_ids, world, agent_params,
                                 **kwargs):
     num_agents = len(agent_states)
     if any(
             len(lst) != num_agents for lst in [
                 agent_geometries, behavior_models, execution_models,
                 dynamic_models, goal_definitions, controlled_agent_ids
             ]):
         raise ValueError(
             "Config readers did not return equal sized of lists")
     agents = []
     controlled_ids = []
     for idx, agent_state in enumerate(agent_states):
         bark_agent = Agent(np.array(agent_state), behavior_models[idx],
                            dynamic_models[idx], execution_models[idx],
                            agent_geometries[idx], agent_params,
                            goal_definitions[idx], world.map)
         if "agent_ids" in kwargs:
             bark_agent.SetAgentId(kwargs["agent_ids"][idx])
             if controlled_agent_ids[idx]:
                 controlled_ids.append(kwargs["agent_ids"][idx])
         else:
             bark_agent.SetAgentId(idx)
             if controlled_agent_ids[idx]:
                 controlled_ids.append(idx)
         agents.append(bark_agent)
     return agents, controlled_ids
    def AgentFromTrackfile(self, track_params, param_server,
                           scenario_track_info, agent_id):
        if scenario_track_info.GetEgoTrackInfo().GetTrackId() == agent_id:
            agent_track_info = scenario_track_info.GetEgoTrackInfo()
        elif agent_id in scenario_track_info.GetOtherTrackInfos().keys():
            agent_track_info = scenario_track_info.GetOtherTrackInfos(
            )[agent_id]
        else:
            raise ValueError("unknown agent id {}".format(agent_id))
        fname = agent_track_info.GetFileName()  # track_params["filename"]
        track_id = agent_track_info.GetTrackId()  # track_params["track_id"]
        agent_id = agent_track_info.GetTrackId()
        track = self.TrackFromTrackfile(fname, track_id)
        start_time = scenario_track_info.GetStartTs()
        end_time = scenario_track_info.GetEndTs()

        behavior_model = track_params["behavior_model"]
        model_converter = ModelJsonConversion()
        if behavior_model is None:
            # each agent need's its own param server
            behavior = BehaviorFromTrack(
                track, param_server.AddChild("agent{}".format(agent_id)),
                start_time, end_time)
        else:
            behavior = behavior_model

        try:
            initial_state = InitStateFromTrack(track, start_time)
        except:
            raise ValueError(
                "Could not retrieve initial state of agent {} at t={}.".format(
                    agent_id, start_time))

        try:
            dynamic_model = model_converter.convert_model(
                track_params["dynamic_model"], param_server)
        except:
            raise ValueError("Could not create dynamic_model")

        try:
            execution_model = model_converter.convert_model(
                track_params["execution_model"], param_server)
        except:
            raise ValueError("Could not retrieve execution_model")

        try:
            vehicle_shape = ShapeFromTrack(
                track, param_server["DynamicModel"]["wheel_base", "Wheel base",
                                                    2.7])
        except:
            raise ValueError("Could not create vehicle_shape")

        bark_agent = Agent(initial_state, behavior, dynamic_model,
                           execution_model, vehicle_shape,
                           param_server.AddChild("agent{}".format(agent_id)),
                           GoalDefinitionFromTrack(track, end_time),
                           track_params["map_interface"])
        # set agent id from track
        bark_agent.SetAgentId(track_id)
        return bark_agent
Exemple #3
0
    def AgentFromTrackfile(self, track_params, param_server,
                           scenario_track_info, agent_id, goal_def):

        if scenario_track_info.GetEgoTrackInfo().GetTrackId() == agent_id:
            agent_track_info = scenario_track_info.GetEgoTrackInfo()
        elif agent_id in scenario_track_info.GetOtherTrackInfos().keys():
            agent_track_info = scenario_track_info.GetOtherTrackInfos(
            )[agent_id]
        else:
            raise ValueError("unknown agent id {}".format(agent_id))
        fname = agent_track_info.GetFileName()  # track_params["filename"]
        track_id = agent_track_info.GetTrackId()  # track_params["track_id"]
        agent_id = agent_track_info.GetTrackId()
        track = self.TrackFromTrackfile(fname, track_id)

        xy_offset = scenario_track_info.GetXYOffset()

        # create behavior model from track, we use start time of scenario here
        start_time = scenario_track_info.GetStartTimeMs()
        end_time = scenario_track_info.GetEndTimeMs()
        behavior_model = track_params["behavior_model"]
        model_converter = ModelJsonConversion()
        if behavior_model is None:
            # each agent need's its own param server
            behavior = BehaviorFromTrack(
                track, param_server.AddChild("agent{}".format(agent_id)),
                xy_offset, start_time, end_time)
        else:
            behavior = behavior_model

        # retrieve initial state of valid agent
        if agent_id in scenario_track_info._other_agents_track_infos:
            start_time_init_state = max(
                scenario_track_info._other_agents_track_infos[agent_id].
                GetStartTimeMs(), start_time)
        else:
            start_time_init_state = start_time
        try:
            initial_state = InitStateFromTrack(track, xy_offset,
                                               start_time_init_state)
        except:
            raise ValueError(
                "Could not retrieve initial state of agent {} at t={}.".format(
                    agent_id, start_time_init_state))

        if self._use_shape_from_track:
            wb = WheelbaseFromTrack(track)
            crad = ColRadiusFromTrack(track)
        else:
            wb = self._wb
            crad = self._crad

        param_server["DynamicModel"]["wheel_base"] = wb
        try:
            dynamic_model = model_converter.convert_model(
                track_params["dynamic_model"], param_server)
        except:
            raise ValueError("Could not create dynamic_model")

        try:
            execution_model = model_converter.convert_model(
                track_params["execution_model"], param_server)
        except:
            raise ValueError("Could not retrieve execution_model")

        try:
            if self._use_rectangle_shape:
                vehicle_shape = GenerateCarRectangle(wb, crad)
            else:
                vehicle_shape = GenerateCarLimousine(wb, crad)
        except:
            raise ValueError("Could not create vehicle_shape")

        if goal_def is None:
            goal_def = GoalDefinitionFromTrack(track,
                                               end_time,
                                               xy_offset=xy_offset)

        bark_agent = Agent(initial_state, behavior, dynamic_model,
                           execution_model, vehicle_shape,
                           param_server.AddChild("agent{}".format(agent_id)),
                           goal_def, track_params["map_interface"])
        # set agent id from track
        bark_agent.SetAgentId(track_id)
        return bark_agent