def weight_regions(oracle, body_name, region_names): # TODO - take into account the size of obstacles
  region_weights = {region_name: oracle.regions[region_name].area() for region_name in region_names}
  for obj in oracle.objects:
    if oracle.is_active(obj) and obj != body_name:
      for region in region_names:
        if oracle.region_contains(region, obj, oracle.get_pose(obj)):
          region_weights[region] -= aabb_area(oracle.get_aabb(obj))
  return region_weights
Beispiel #2
0
def weight_regions(
        oracle, body_name,
        region_names):  # TODO - take into account the size of obstacles
    region_weights = {
        region_name: oracle.regions[region_name].area()
        for region_name in region_names
    }
    for obj in oracle.objects:
        if oracle.is_active(obj) and obj != body_name:
            for region in region_names:
                if oracle.region_contains(region, obj, oracle.get_pose(obj)):
                    region_weights[region] -= aabb_area(oracle.get_aabb(obj))
    return region_weights
 def fn(self, body_name, region_name):
   oracle = self.oracle
   poses = []
   region = oracle.get_region(region_name)
   for _ in range(int(self.poses_per_ratio*region.area()/aabb_area(oracle.get_aabb(body_name)) + 1)):
     theta = uniform(0, 2*PI)
     quat = quat_from_z_rot(theta)
     aabb = oracle.get_aabb(body_name, trans_from_quat(quat))
     cspace = region.cspace(aabb)
     if cspace is None: continue # NOTE - does not add more placements
     ((minx, maxx), (miny, maxy)) = cspace
     x = uniform(minx, maxx)
     y = uniform(miny, maxy)
     z = region.z + aabb.extents()[2] + REGION_PLACEMENT_Z_OFFSET
     point = np.array([x, y, z]) - aabb.pos()
     poses.append(Pose(pose_from_quat_point(quat, point)))
   return poses
Beispiel #4
0
 def fn(self, body_name, region_name):
     oracle = self.oracle
     poses = []
     region = oracle.get_region(region_name)
     for _ in range(
             int(self.poses_per_ratio * region.area() /
                 aabb_area(oracle.get_aabb(body_name)) + 1)):
         theta = uniform(0, 2 * PI)
         quat = quat_from_z_rot(theta)
         aabb = oracle.get_aabb(body_name, trans_from_quat(quat))
         cspace = region.cspace(aabb)
         if cspace is None: continue  # NOTE - does not add more placements
         ((minx, maxx), (miny, maxy)) = cspace
         x = uniform(minx, maxx)
         y = uniform(miny, maxy)
         z = region.z + aabb.extents()[2] + REGION_PLACEMENT_Z_OFFSET
         point = np.array([x, y, z]) - aabb.pos()
         poses.append(Pose(pose_from_quat_point(quat, point)))
     return poses