def place_agents_along_linestring(self, world, linestring, s_start, s_end,
                                      agent_params, goal_definition):
        s = s_start
        if s_end < s_start:
            linestring.Reverse()
            s = s_end
            s_end = s_start
        agent_list = []
        while s < s_end:
            # set agent state on linestring with random velocity
            xy_point = GetPointAtS(linestring, s)
            angle = GetTangentAngleAtS(linestring, s)

            velocity = self.sample_velocity_uniform(self._other_velocity_range)
            agent_state = np.array(
                [0, xy_point.x(),
                 xy_point.y(), angle, velocity])

            agent_params = self._agent_params.copy()
            agent_params["state"] = agent_state
            agent_params["goal_definition"] = goal_definition
            agent_params["map_interface"] = world.map

            converter = ModelJsonConversion()
            bark_agent = converter.agent_from_json(agent_params,
                                                   self._params["Agent"])
            agent_list.append(bark_agent)

            # move forward on linestring based on vehicle size and max/min distance
            s += bark_agent.shape.front_dist + bark_agent.shape.rear_dist + \
                        self.sample_distance_uniform(self._vehicle_distance_range)
        return agent_list
Example #2
0
  def create_single_scenario(self):
    scenario = Scenario(map_file_name=None,
                        json_params=self._params.ConvertToDict())
    scenario._agent_list = []
    for agent_json in self.drone_params:
      agent_json["drone_model"]["map_interface"] = None
      agent_json["drone_model"]["goal_definition"] = self._build_sequential_goal_definition()
      json_converter = ModelJsonConversion()
      agent = json_converter.agent_from_json(agent_json["drone_model"],
                                                   param_server=self._local_params)
      agent.SetAgentId(agent_json["drone_model"]["id"])
      scenario._agent_list.append(agent)

    scenario._eval_agent_ids = [self._local_params["EgoAgentId",
                                "ID of the ego-agent",
                                0]]
    return scenario
    def create_single_scenario(self):
        scenario = Scenario(map_file_name=self._map_file_name,
                            json_params=self._params.ConvertToDict())
        world = scenario.GetWorldState()
        agent_list = []
        # OTHER AGENTS
        for idx, source in enumerate(self._others_source):
            connecting_center_line, s_start, s_end = \
              self.center_line_between_source_and_sink(world.map,
                                                       source,
                                                       self._others_sink[idx])
            goal_polygon = Polygon2d([0, 0, 0], [
                Point2d(-1.5, 0),
                Point2d(-1.5, 8),
                Point2d(1.5, 8),
                Point2d(1.5, 0)
            ])
            goal_polygon = goal_polygon.Translate(
                Point2d(self._others_sink[idx][0], self._others_sink[idx][1]))
            goal_definition = GoalDefinitionPolygon(goal_polygon)
            agent_list.extend(
                self.place_agents_along_linestring(world,
                                                   connecting_center_line,
                                                   s_start, s_end,
                                                   self._agent_params,
                                                   goal_definition))

        description = self._params.ConvertToDict()
        description["ScenarioGenerator"] = "UniformVehicleDistribution"

        # EGO AGENT
        ego_agent = None
        if len(self._ego_route) == 0:
            # take agent in the middle of list
            num_agents = len(agent_list)
            ego_agent = agent_list[math.floor(num_agents / 4)]
        else:
            connecting_center_line, s_start, s_end  = \
            self.center_line_between_source_and_sink(world.map,
                                                     self._ego_route[0],
                                                     self._ego_route[1])

            sego = self.sample_srange_uniform([s_start, s_end])
            xy_point = GetPointAtS(connecting_center_line, sego)
            angle = GetTangentAngleAtS(connecting_center_line, sego)
            velocity = self.sample_velocity_uniform(self._ego_velocity_range)
            agent_state = np.array(
                [0, xy_point.x(),
                 xy_point.y(), angle, velocity])

            agent_params = self._agent_params.copy()
            agent_params["state"] = agent_state
            # goal for driving corridor generation
            goal_polygon = Polygon2d([0, 0, 0], [
                Point2d(-1.5, 0),
                Point2d(-1.5, 8),
                Point2d(1.5, 8),
                Point2d(1.5, 0)
            ])
            goal_polygon = goal_polygon.Translate(
                Point2d(self._ego_route[1][0], self._ego_route[1][1]))
            goal_definition = GoalDefinitionPolygon(goal_polygon)
            agent_params["goal_definition"] = goal_definition
            agent_params["map_interface"] = world.map

            converter = ModelJsonConversion()
            ego_agent = converter.agent_from_json(agent_params,
                                                  self._params["Agent"])
            # TODO(@bernhard): ensure that ego agent not collides with others

        agent_list.append(ego_agent)

        # EGO Agent Goal Definition
        if len(self._ego_goal_start) == 0:
            if len(self._ego_route) == 0:
                # ego agent is one of the random agents, so the goal definition is
                # already set
                pass
            else:
                goal_polygon = Polygon2d([0, 0, 0], [
                    Point2d(-1.5, 0),
                    Point2d(-1.5, 8),
                    Point2d(1.5, 8),
                    Point2d(1.5, 0)
                ])
                goal_polygon = goal_polygon.Translate(
                    Point2d(self._ego_goal_end[0], self._ego_goal_end[1]))
                ego_agent.goal_definition = GoalDefinitionPolygon(goal_polygon)
        else:
            connecting_center_line, s_start, s_end = \
            self.center_line_between_source_and_sink(world.map,
                                                     self._ego_goal_start,
                                                     self._ego_goal_end)

            goal_center_line = GetLineFromSInterval(connecting_center_line,
                                                    s_start, s_end)

            # build polygon representing state limits
            lims = self._ego_goal_state_limits
            goal_limits_left = goal_center_line.Translate(
                Point2d(-lims[0], -lims[1]))
            goal_limits_right = goal_center_line.Translate(
                Point2d(lims[0], lims[1]))
            goal_limits_right.Reverse()
            goal_limits_left.AppendLinestring(goal_limits_right)
            polygon = Polygon2d([0, 0, 0], goal_limits_left)

            ego_agent.goal_definition = GoalDefinitionStateLimits(
                polygon, (1.57 - 0.08, 1.57 + 0.08))

        # only one agent is ego in the middle of all other agents
        scenario._agent_list = agent_list
        scenario._eval_agent_ids = [ego_agent.id]
        return scenario
class DeterministicDroneChallengeGeneration(ScenarioGeneration):
    def __init__(self, num_scenarios, params=None, random_seed=None):
        super(DeterministicDroneChallengeGeneration,
              self).__init__(params, num_scenarios)
        self.initialize_params(params)

    def initialize_params(self, params):
        self._local_params = \
          self._params["Scenario"]["Generation"]["DeterministicDroneChallengeGeneration"]

        self.goal_frame_center = self._local_params["goal_frame"][
            "center_pose", "Center pose of the goal frames", [1, 0, 0]]
        self.goal_frame_points = self._local_params["goal_frame"][
            "polygon_points", "Points of the goal frame polygon",
            [[0., 0.], [2., 0.], [2., 0.5], [0., 0.5], [0., 0.]]]
        self.goal_frame_poses = self._local_params[
            "goal_poses",
            "A list with x,y, theta specyfing the sequence of the goal frames",
            [[5, 10, -0.3], [10, 15, -1.2], [20, 10, -2.9], [15, 2, -3.9]]]

        self._map_file_name = self._local_params[
            "MapFilename", "Path to the open drive map",
            "bark/runtime/tests/data/Crossing8Course.xodr"]
        self._json_converter = ModelJsonConversion()

    def create_scenarios(self, params, num_scenarios, random_seed):
        """ 
        see baseclass
    """
        scenario_list = []
        for scenario_idx in range(0, num_scenarios):
            scenario = self.create_single_scenario()
            scenario_list.append(scenario)
        return scenario_list

    def _build_sequential_goal_definition(self):
        goal_list = []
        for goal_pose in self.goal_frame_poses:
            goal_polygon = Polygon2d(self.goal_frame_center,
                                     np.array(self.goal_frame_points))
            goal_polygon = goal_polygon.Transform(goal_pose)
            goal_definition = GoalDefinitionPolygon(goal_polygon)
            goal_list.append(goal_definition)

        return GoalDefinitionSequential(goal_list)

    def create_single_scenario(self):
        scenario = Scenario(map_file_name=self._map_file_name,
                            json_params=self._params.ConvertToDict())
        scenario._map_interface = None
        world = scenario.GetWorldState()
        agent_list = []
        scenario._agent_list = []
        for agent_json_ in self._local_params["Agents"]:
            agent_json = agent_json_["VehicleModel"].copy()
            agent_json["map_interface"] = world.map
            goal_polygon = Polygon2d([0, 0, 0],
                                     np.array(
                                         agent_json["goal"]["polygon_points"]))
            goal_polygon = goal_polygon.Translate(
                Point2d(agent_json["goal"]["center_pose"][0],
                        agent_json["goal"]["center_pose"][1]))

            agent_json[
                "goal_definition"] = self._build_sequential_goal_definition()
            agent_state = np.array(agent_json["state"])
            if len(np.shape(agent_state)) > 1:
                agent_state = np.random.uniform(low=agent_state[:, 0],
                                                high=agent_state[:, 1])
            agent_json["state"] = agent_state.tolist()
            agent = self._json_converter.agent_from_json(
                agent_json, param_server=self._local_params)
            agent.SetAgentId(agent_json["id"])
            scenario._agent_list.append(agent)
        scenario._eval_agent_ids = [
            self._local_params["EgoAgentId", "ID of the ego-agent", 0]
        ]
        return scenario
Example #5
0
class DeterministicScenarioGeneration(ScenarioGeneration):
    def __init__(self, num_scenarios, params=None, random_seed=None):
        super(DeterministicScenarioGeneration,
              self).__init__(params, num_scenarios)
        self.initialize_params(params)

    def initialize_params(self, params):
        self._local_params = \
          self._params["Scenario"]["Generation"]["DeterministicScenarioGeneration"]

        self._map_file_name = self._local_params[
            "MapFilename", "Path to the open drive map",
            "bark/runtime/tests/data/Crossing8Course.xodr"]
        self._json_converter = ModelJsonConversion()

    def create_scenarios(self, params, num_scenarios):
        """ 
        see baseclass
    """
        scenario_list = []
        for scenario_idx in range(0, num_scenarios):
            scenario = self.create_single_scenario()
            scenario_list.append(scenario)
        return scenario_list

    def create_single_scenario(self):
        scenario = Scenario(map_file_name=self._map_file_name,
                            json_params=self._params.ConvertToDict())
        world = scenario.GetWorldState()
        agent_list = []
        scenario._agent_list = []
        for agent_json_ in self._local_params["Agents"]:
            agent_json = agent_json_["VehicleModel"].clone()
            agent_json["map_interface"] = world.map
            goal_polygon = Polygon2d([0, 0, 0],
                                     np.array(
                                         agent_json["goal"]["polygon_points"]))
            goal_polygon = goal_polygon.Translate(
                Point2d(agent_json["goal"]["center_pose"][0],
                        agent_json["goal"]["center_pose"][1]))

            sequential_goals = []
            goal = GoalDefinitionPolygon(goal_polygon)
            if "goal_type" in agent_json["goal"]:
                goal_type = agent_json["goal"]["goal_type"]
                if goal_type == "GoalDefinitionStateLimits":
                    goal = GoalDefinitionStateLimits(goal_polygon,
                                                     (1.49, 1.65))

            # state_limit_goal = GoalDefinitionStateLimits(goal_polygon, (1.49, 1.65))
            for _ in range(self._local_params["goal"]["num_reached", "num",
                                                      5]):
                sequential_goals.append(goal)
            sequential_goal = GoalDefinitionSequential(sequential_goals)
            agent_json["goal_definition"] = sequential_goal

            agent_state = np.array(agent_json["state"])
            if len(np.shape(agent_state)) > 1:
                agent_state = np.random.uniform(low=agent_state[:, 0],
                                                high=agent_state[:, 1])
            agent_json["state"] = agent_state.tolist()
            agent = self._json_converter.agent_from_json(
                agent_json, param_server=self._params)
            agent.SetAgentId(agent_json["id"])
            scenario._agent_list.append(agent)

        # TODO(@hart): this could be mult. agents
        scenario._eval_agent_ids = self._local_params[
            "controlled_ids", "IDs of agents to be controlled. ", [0]]
        return scenario