Esempio n. 1
0
def execute_wallgrasp_right(group, bin_min_x, bin_min_y, bin_max_y, bin_min_z):
    try:
        poses = []
        retreats = []

        theta = numpy.pi/4.0
        x = self.fingerlength * numpy.cos(theta)
        y = self.fingerlength * numpy.sin(theta)

        # Bin values
        point_x = bin_min_x
        point_y = bin_max_y

        # pregrasp right
        y_msg_right = right_point_y + y
        x_msg_right = right_point_x - x + 0.07 # extra 7cm to move past the vertical beam

        # pregrasp message
        pregrasp = Pose()
        approach = Pose()

        unit_vector = PoseFromComponents([0, 0, 0], [0, 0, 0, 1])
        quat = QuaternionFromAxisAngle( [0, 0, 1], numpy.pi/4.0 )
        Rotz = PoseFromComponents([0, 0, 0], quat)
        Rotz_msg = ComposePoses(unit_vector, Rotz)
        rospy.logerr('>>>>>>>>>>>>>>>>>>>>>> after rotation >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')

        pregrasp.position.x = x_msg
        pregrasp.position.y = y_msg
        pregrasp.postiion.z = bin_min_z + 0.02
        pregrasp.rotation = Rotz_msg.rotation
        approach = deepcopy(pregrasp)
        approach.position.x -= 0.1 # set approach to be 10cm back from pregrasp

        # Cartesian move
        poses.append(approach)
        poses.append(pregrasp)
        poses.append(deepcopy(poses[-1])) # move 1cm into wall
        poses[-1].position.y -= 0.01
        poses.append(deepcopy(poses[-1])) # move forward into bin
        poses[-1].position.x += x_depth

        if not follow_path(self.arm, poses, False):
            return False, "open"

        if not gripper.grab():
            rospy.loginfo("Executing cartesian retreat")
            follow_path(group, [grasp.approach])  # If grasp fails, move back to approach pose
            return False, "closed"

        # TODO: Retreat
        retreats.append(deepcopy(poses[-1]))
        retreats.append(deepcopy(retreats[-1]))
        retreats[-1].position.y += 0.02
        retreats.append(deepcopy(retreats[-1]))
        retreats[-1].position.x -= x_depth - 0.05

        if not follow_path(self.arm, retreats, False):
            return False, "closed"
    except:
        print traceback.format_exc()
        rospy.logerr(str(traceback.format_exc()))

    return success