def setup_targets(self):
     self.targets = [AgentDoubleInt2D(agent_id = 'target-' + str(i),
                     dim=self.target_dim, sampling_period=self.sampling_period, 
                     limit=self.limit['target'],
                     collision_func=lambda x: map_utils.is_collision(self.MAP, x),
                     A=self.targetA, W=self.target_true_noise_sd) 
                     for i in range(self.num_targets)]
Example #2
0
    def get_init_pose_random(
            self,
            lin_dist_range_target=(METADATA['init_distance_min'],
                                   METADATA['init_distance_max']),
            ang_dist_range_target=(-np.pi, np.pi),
            lin_dist_range_belief=(METADATA['init_belief_distance_min'],
                                   METADATA['init_belief_distance_max']),
            ang_dist_range_belief=(-np.pi, np.pi),
            blocked=False,
            **kwargs):
        is_agent_valid = False
        init_pose = {}
        init_pose['agents'] = []
        for ii in range(self.num_agents):
            is_agent_valid = False
            if self.MAP.map is None and ii == 0:
                if blocked:
                    raise ValueError(
                        'Unable to find a blocked initial condition. There is no obstacle in this map.'
                    )
                a_init = self.agent_init_pos[:2]
            else:
                while (not is_agent_valid):
                    a_init = np.random.random(
                        (2, )) * (self.MAP.mapmax -
                                  self.MAP.mapmin) + self.MAP.mapmin
                    is_agent_valid = not (map_utils.is_collision(
                        self.MAP, a_init))
            init_pose_agent = [
                a_init[0], a_init[1],
                np.random.random() * 2 * np.pi - np.pi
            ]
            init_pose['agents'].append(init_pose_agent)

        init_pose['targets'], init_pose['belief_targets'] = [], []
        for jj in range(self.num_targets):
            is_target_valid = False
            while (not is_target_valid):
                rand_agent = np.random.randint(self.num_agents)
                is_target_valid, init_pose_target = self.gen_rand_pose(
                    init_pose['agents'][rand_agent][:2],
                    init_pose['agents'][rand_agent][2],
                    lin_dist_range_target[0], lin_dist_range_target[1],
                    ang_dist_range_target[0], ang_dist_range_target[1])
                is_blocked = map_utils.is_blocked(
                    self.MAP, init_pose['agents'][rand_agent][:2],
                    init_pose_target[:2])
                if is_target_valid:
                    is_target_valid = (blocked == is_blocked)
            init_pose['targets'].append(init_pose_target)

            is_belief_valid, init_pose_belief = False, np.zeros((2, ))
            while ((not is_belief_valid) and is_target_valid):
                is_belief_valid, init_pose_belief = self.gen_rand_pose(
                    init_pose['targets'][jj][:2], init_pose['targets'][jj][2],
                    lin_dist_range_belief[0], lin_dist_range_belief[1],
                    ang_dist_range_belief[0], ang_dist_range_belief[1])
            init_pose['belief_targets'].append(init_pose_belief)
        return init_pose
Example #3
0
 def setup_agents(self):
     self.agents = [
         AgentSE2(
             agent_id='agent-' + str(i),
             dim=self.agent_dim,
             sampling_period=self.sampling_period,
             limit=self.limit['agent'],
             collision_func=lambda x: map_utils.is_collision(self.MAP, x))
         for i in range(self.num_agents)
     ]
Example #4
0
 def setup_belief_targets(self):
     self.belief_targets = [
         KFbelief(
             agent_id='target-' + str(i),
             dim=self.target_dim,
             limit=self.limit['target'],
             A=self.targetA,
             W=self.target_noise_cov,
             obs_noise_func=self.observation_noise,
             collision_func=lambda x: map_utils.is_collision(self.MAP, x))
         for i in range(self.num_targets)
     ]
Example #5
0
 def setup_targets(self):
     self.targets = [
         AgentDoubleInt2D_Avoidance(
             agent_id='target-' + str(i),
             dim=self.target_dim,
             sampling_period=self.sampling_period,
             limit=self.limit['target'],
             collision_func=lambda x: map_utils.is_collision(self.MAP, x),
             A=self.targetA,
             W=self.target_true_noise_sd,
         )
         # obs_check_func=lambda x: self.MAP.get_closest_obstacle(
         # x, fov=2*np.pi, r_max=10e2))
         for i in range(self.num_targets)
     ]
    def gen_rand_pose(self, o_xy, c_theta, min_lin_dist, max_lin_dist, min_ang_dist, max_ang_dist):
        """Generates random position and yaw.
        Parameters
        --------
        o_xy : xy position of a point in the global frame which we compute a distance from.
        c_theta : angular position of a point in the global frame which we compute an angular distance from.
        min_lin_dist : the minimum linear distance from o_xy to a sample point.
        max_lin_dist : the maximum linear distance from o_xy to a sample point.
        min_ang_dist : the minimum angular distance (counter clockwise direction) from c_theta to a sample point.
        max_ang_dist : the maximum angular distance (counter clockwise direction) from c_theta to a sample point.
        """
        if max_ang_dist < min_ang_dist:
            max_ang_dist += 2*np.pi
        rand_ang = util.wrap_around(np.random.rand() * \
                        (max_ang_dist - min_ang_dist) + min_ang_dist + c_theta)

        rand_r = np.random.rand() * (max_lin_dist - min_lin_dist) + min_lin_dist
        rand_xy = np.array([rand_r*np.cos(rand_ang), rand_r*np.sin(rand_ang)]) + o_xy
        is_valid = not(map_utils.is_collision(self.MAP, rand_xy))
        return is_valid, [rand_xy[0], rand_xy[1], rand_ang]