def generate(self, context=None): self.enumerated = True # Prevents from being resampled grip_name, pose1, pose2 = self.inputs if not ph.do_motion: path = (pose1, pose2) command = Command([ClosedTrajectory(grip_name, path)]) return [(command, )] kitchen = ph.make_kitchen(planning=True) if self.use_context and (context is not None): for atom in context.conditions: _, name, pose = atom.head.args if name not in [grip_name ] and not isinstance(pose, SharedOutputSet): ph.make_body(kitchen, name, pose) gripper = Gripper(kitchen, init_pos=pose1[:2], init_angle=pose1[2]) gripper.set_closed() path = gripper.plan_path(pose2[:2], pose2[2], collision_buffer=ph.buffer_distance) if path is None: return [] command = Command([ClosedTrajectory(grip_name, path)]) return [(command, )]
def test_collision(command, body_name, pose): ''' Returns True if the trajectory associated by command is colliding with a body of name body_name and pose pose. Otherwise False. ''' if not ph.do_collisions: return False for traj in command.trajectories: if body_name == traj.gripper or (isinstance(traj, HoldingTrajectory) and (body_name == traj.body)): continue kitchen = ks.b2WorldInterface(False) init_pose = ph.gripperInitPos gripper = Gripper(kitchen, init_pos=init_pose[:2], init_angle=init_pose[2]) if isinstance(traj, FreeTrajectory): gripper.release() gripper.set_open() elif isinstance(traj, PushTrajectory): body = ph.make_body(kitchen, traj.body, traj.init_pose) gripper.set_closed() gripper.attach(body) elif isinstance(traj, ClosedTrajectory): gripper.release() gripper.set_closed() else: body = ph.make_body(kitchen, traj.body, ph.cupInitPos) gripper.set_grasped(body, traj.pos_ratio, init_pose[:2], init_pose[2]) ph.make_body(kitchen, body_name, pose) g2 = gripper.simulate_itself() for q in traj.path: if g2.check_point_collision(q[:2], q[2]): print 'Collision: {}'.format(body_name) return True return False