def table1ToTable2(width):
	global numStacked
	GripUtils.go_to_relative_multi(0, 0, 0.2, True, 0, 0, 0.2, True, "base_footprint", None)
	goFromAToB("Table1", "Table2")
	GripUtils.go_to_relative_multi(0, 0, -0.2+0.02*numStacked, True, 0, 0, -0.2+0.02*numStacked, True, "base_footprint", None)
	numStacked += 1
	GripUtils.open_grippers()
def table1ToTable2(width):
	global numStacked
	GripUtils.go_to_relative_multi(0, 0, 0.2, True, 0, 0, 0.2, True, "base_footprint", None)
	goFromAToB("Table1", "Table2")
	GripUtils.go_to_relative_multi(0, 0, -0.2+0.02*numStacked, True, 0, 0, -0.2+0.02*numStacked, True, "base_footprint", None)
	numStacked += 1
	GripUtils.open_grippers()
    def executeDrag(self,gripPts,endPts,color='blue'):
        """
        drag from gripPts to endPts
        """          
        startpoints = []
        for vertex in gripPts:
            pt_world = self.convert_to_world_frame(vertex)
            now = rospy.Time.now()
            self.listener.waitForTransform("base_footprint",pt_world.header.frame_id,now,rospy.Duration(10.0))            
            pt_transformed = self.listener.transformPoint("base_footprint",pt_world)                        
            startpoints.append(pt_transformed)

        

        #print "grabbed (x,y,z)",startpoints[0].point.x,startpoints[0].point.y,startpoints[0].point.z
        

        if not GripUtils.grab_points(point_l=startpoints[0],roll_l=-pi/2,yaw_l=-pi/3,pitch_l=pi/4,x_offset_l=-0.01, z_offset_l=0.005,approach= True,
                                     point_r=startpoints[1],roll_r=pi/2,yaw_r= pi/3,pitch_r=pi/4,x_offset_r=-0.01, z_offset_r=0.005):
            print "failure"
            return False
        else:
            print "grabbed (x,y,z)",startpoints[0].point.x,startpoints[0].point.y,startpoints[0].point.z
            print "done"

        midpoints = []
        for vertex in endPts:
            pt_world = self.dupl_PointStamped(vertex)#self.convert_to_world_frame(vertex)            
            midpoints.append(pt_world)

        frame_l = frame_r = midpoints[0].header.frame_id
        if not GripUtils.go_to_multi (x_l=midpoints[0].point.x,y_l=midpoints[0].point.y,z_l=midpoints[0].point.z,roll_l=-pi/2,yaw_l=-pi/2,pitch_l=pi/4,grip_l=True,frame_l=frame_l
                                                                      ,x_r=midpoints[1].point.x, y_r= midpoints[1].point.y ,z_r= midpoints[1].point.z ,roll_r=pi/2,yaw_r=pi/2,pitch_r=pi/4,grip_r=True,frame_r=frame_r,dur=5):
            print "failure"
            #return False
        else:
            print "dragging done"

        if (color == 'blue'):
            GripUtils.open_grippers()
            
        return True
Beispiel #4
0
    def execute(self, userdata):
        bl = userdata.bl
        br = userdata.br
        tl = userdata.tl
        tr = userdata.tr

        center = bl
        center.point.x = (bl.point.x + tl.point.x + br.point.x +
                          tr.point.x) / 4
        center.point.y = (bl.point.y + tl.point.y + br.point.y +
                          tr.point.y) / 4
        center.point.z = (bl.point.z + tl.point.z + br.point.z +
                          tr.point.z) / 4

        #calculate width
        rightTip = PointStamped()
        rightTip.header.stamp = rospy.Time()
        rightTip.frame_id = "r_tip_frame"

        rFromL = self.listener.transformPoint("l_tip_frame", rightTip)

        width = math.sqrt(rFromL.point.x**2 + rFromL.point.y**2 +
                          rFromL.point.z**2)  #distance from right to left

        #set point_l and point_r (remember to set z to the height of the table)
        point_l = br
        point_l.x = center.point.x
        point_l.y = center.point.y + width / 2
        point_l.z = TABLE_HEIGHT  #is this wrong? what frame are bl, br, tl, and tr given in?

        point_r = tl
        point_r.x = center.point.x
        point_r.y = center.point.y - width / 2
        point_r.z = TABLE_HEIGHT  #is this wrong? what frame are bl, br, tl, and tr given in?

        if not GripUtils.go_to_pts(point_l,
                                   pi / 2,
                                   pi / 4,
                                   -pi / 2,
                                   True,
                                   point_r,
                                   -pi / 2,
                                   pi / 4,
                                   pi / 2,
                                   True,
                                   z_offset_l=0.4,
                                   z_offset_r=0.4):
            return FAILURE

        numTowelsInStack = 0
        try:
            numTowelsInStack = userdata.stackNum
        except KeyError:
            pass

        z_offset = -0.4 + 0.02 * numTowelsInStack
        if not GripUtils.go_to_relative_multi(
                0, 0, z_offset, True, 0, 0, z_offset, True, "base_footprint"):
            return FAILURE
        if not GripUtils.open_grippers():
            return FAILURE

        userdata.stackNum = numTowelsInStack + 1
        return SUCCESS
Beispiel #5
0
 def execute(self,userdata):
     if not GripUtils.open_grippers():
         return FAILURE
     return SUCCESS
Beispiel #6
0
    def executeBiGrip(self, fold_traj):
        tilts = fold_traj.tilts
        approach_points = fold_traj.approach_points
        grip_points = fold_traj.grip_points
        quarter_points = fold_traj.quarter_points
        weight_points = fold_traj.weight_points
        vertical_points = fold_traj.vertical_points
        goal_points = fold_traj.goal_points

        rolls = [pi / 2, pi / 2]
        #pitches = [pi/4,pi/4]
        pitches = [pi / 4, pi / 4]
        if not fold_traj.red:
            self.executeSmooth(self.last_traj)

            self.fold_stance("b")
            arms = self.getArms(fold_traj)
            #Initially, both are in "approach" mode
            (target1, target2) = self.gripPoints(point=approach_points[0],
                                                 grip=False,
                                                 tilt=tilts[0],
                                                 arm=arms[0],
                                                 preferred_pitch=pi / 4,
                                                 preferred_roll=rolls[0],
                                                 point2=approach_points[1],
                                                 grip2=False,
                                                 tilt2=tilts[1],
                                                 arm2=arms[1],
                                                 preferred_pitch2=pi / 4,
                                                 preferred_roll2=rolls[1])
            #pitches[0] = target1.pitch
            #Do the first pickup and nothing with the other arm
            self.gripPoints(point=grip_points[0],
                            grip=False,
                            tilt=tilts[0],
                            arm=arms[0],
                            preferred_pitch=pi / 4,
                            preferred_roll=rolls[0],
                            grab=True)
            StanceUtils.close_gripper(arms[0])
            #Do the second pickup, with the first arm interpolated
            first_dx = vertical_points[0].point.x - grip_points[0].point.x
            first_dy = vertical_points[0].point.y - grip_points[0].point.y
            first_dz = vertical_points[0].point.z - grip_points[0].point.z
            second_dx = vertical_points[1].point.x - grip_points[1].point.x
            second_dy = vertical_points[1].point.y - grip_points[1].point.y
            second_dz = vertical_points[1].point.z - grip_points[1].point.z
            interp_dx = first_dx - second_dx
            interp_dy = first_dy - second_dy
            interp_dz = first_dz - second_dz
            interp_x = grip_points[0].point.x + interp_dx
            interp_y = grip_points[0].point.y + interp_dy
            interp_z = grip_points[0].point.z + interp_dz
            interp_pt = PointStamped()
            interp_pt.point.x = interp_x
            interp_pt.point.y = interp_y
            interp_pt.point.z = interp_z
            interp_pt.header.frame_id = grip_points[0].header.frame_id
            #Go to the second approach point
            (target2, nothing) = self.gripPoints(point=interp_pt,
                                                 grip=True,
                                                 tilt=tilts[0],
                                                 arm=arms[0],
                                                 preferred_pitch=pi / 4,
                                                 preferred_roll=rolls[0],
                                                 point2=approach_points[1],
                                                 arm2=arms[1],
                                                 grip2=False,
                                                 tilt2=tilts[1],
                                                 preferred_pitch2=pi / 4,
                                                 preferred_roll2=rolls[1])
            #pitches[1] = target2.pitch
            self.gripPoints(point=interp_pt,
                            grip=True,
                            tilt=tilts[0],
                            arm=arms[0],
                            preferred_pitch=pi / 4,
                            preferred_roll=rolls[0],
                            point2=grip_points[1],
                            grip2=False,
                            tilt2=tilts[1],
                            arm2=arms[1],
                            preferred_pitch2=pi / 4,
                            preferred_roll2=rolls[1])
            self.gripPoints(point=grip_points[1],
                            grip=False,
                            tilt=tilts[1],
                            arm=arms[1],
                            preferred_pitch=pi / 4,
                            preferred_roll=rolls[1],
                            grab=True)

            StanceUtils.close_gripper(arms[1])
        else:
            arms = self.getArms(fold_traj)
        #Bring both to middle

        self.gripPoints(point=vertical_points[0],
                        grip=True,
                        tilt=tilts[0],
                        arm=arms[0],
                        preferred_pitch=pi / 2,
                        preferred_roll=rolls[0],
                        point2=vertical_points[1],
                        grip2=True,
                        tilt2=tilts[1],
                        arm2=arms[1],
                        preferred_pitch2=pi / 2,
                        preferred_roll2=rolls[1])  #FIX pi/4 -> pi/2

        #Set first one down
        first_dx = goal_points[0].point.x - vertical_points[0].point.x
        first_dy = goal_points[0].point.y - vertical_points[0].point.y
        first_dz = goal_points[0].point.z - vertical_points[0].point.z
        second_dx = goal_points[1].point.x - vertical_points[1].point.x
        second_dy = goal_points[1].point.y - vertical_points[1].point.y
        second_dz = goal_points[1].point.z - vertical_points[1].point.z
        interp_dx = first_dx - second_dx
        interp_dy = first_dy - second_dy
        interp_dz = first_dz - second_dz
        interp_x = goal_points[0].point.x - interp_dx
        interp_y = goal_points[0].point.y - interp_dy
        interp_z = goal_points[0].point.z - interp_dz
        interp_pt = PointStamped()
        interp_pt.point.x = interp_x
        interp_pt.point.y = interp_y
        interp_pt.point.z = interp_z
        interp_pt.header.frame_id = grip_points[0].header.frame_id
        self.gripPoints(point=interp_pt,
                        grip=True,
                        tilt=tilts[0],
                        arm=arms[0],
                        preferred_pitch=pi / 2,
                        preferred_roll=rolls[0],
                        point2=goal_points[1],
                        grip2=True,
                        tilt2=tilts[1],
                        arm2=arms[1],
                        preferred_pitch2=pi / 2,
                        preferred_roll2=rolls[1])
        #Finally, set last one down
        self.gripPoints(point=goal_points[0],
                        grip=True,
                        tilt=tilts[0],
                        arm=arms[0],
                        preferred_pitch=pi / 2,
                        preferred_roll=rolls[0],
                        point2=goal_points[1],
                        grip2=True,
                        tilt2=tilts[1],
                        arm2=arms[1],
                        preferred_pitch2=pi / 2,
                        preferred_roll2=rolls[1])
        GripUtils.open_grippers()
        goal_points[0].point.z += 0.03
        goal_points[1].point.z += 0.03
        self.gripPoints(point=goal_points[0],
                        grip=False,
                        tilt=tilts[0],
                        arm=arms[0],
                        preferred_pitch=pi / 2,
                        preferred_roll=rolls[0],
                        point2=goal_points[1],
                        grip2=False,
                        tilt2=tilts[1],
                        arm2=arms[1],
                        preferred_pitch2=pi / 2,
                        preferred_roll2=rolls[1])
        self.last_traj = fold_traj
    def executeBiGrip(self, fold_traj):
        tilts = fold_traj.tilts
        approach_points = fold_traj.approach_points
        grip_points = fold_traj.grip_points
        quarter_points = fold_traj.quarter_points
        weight_points = fold_traj.weight_points
        vertical_points = fold_traj.vertical_points
        goal_points = fold_traj.goal_points

        print "hi from bigrip"
        rolls = [pi/2,pi/2]
        #rolls  = [-pi/2,-pi/2]
        #rolls = [0,0]
        pitches = [pi/4,pi/4]
        #pitches = [0,0]
        if not fold_traj.red:
            self.executeSmooth(self.last_traj)
            
            self.fold_stance("b")
            arms = self.getArms(fold_traj)
            #Initially, both are in "approach" mode
            (target1,target2) = self.gripPoints(point=approach_points[0],grip=False,tilt=tilts[0],arm=arms[0],preferred_pitch=pi/4,preferred_roll=rolls[0],
                point2=approach_points[1],grip2=False,tilt2=tilts[1],arm2=arms[1],preferred_pitch2=pi/4,preferred_roll2=rolls[1])
            #pitches[0] = target1.pitch
            #Do the first pickup and nothing with the other arm
            self.gripPoints(point=grip_points[0],grip=False,tilt=tilts[0],arm=arms[0],preferred_pitch=0
,preferred_roll=rolls[0],grab=True)
            StanceUtils.close_gripper(arms[0])
            #Do the second pickup, with the first arm interpolated
            first_dx = vertical_points[0].point.x - grip_points[0].point.x
            first_dy = vertical_points[0].point.y - grip_points[0].point.y
            first_dz = vertical_points[0].point.z - grip_points[0].point.z
            second_dx = vertical_points[1].point.x - grip_points[1].point.x
            second_dy = vertical_points[1].point.y - grip_points[1].point.y
            second_dz = vertical_points[1].point.z - grip_points[1].point.z
            interp_dx = first_dx - second_dx
            interp_dy = first_dy - second_dy
            interp_dz = first_dz - second_dz
            interp_x = grip_points[0].point.x + interp_dx
            interp_y = grip_points[0].point.y + interp_dy
            interp_z = grip_points[0].point.z + interp_dz
            interp_pt = PointStamped()
            interp_pt.point.x = interp_x
            interp_pt.point.y = interp_y
            interp_pt.point.z = interp_z
            interp_pt.header.frame_id = grip_points[0].header.frame_id
            #Go to the second approach point
            (target2,nothing) = self.gripPoints(point=interp_pt,grip=True,tilt=tilts[0],arm=arms[0],preferred_pitch=pi/4,preferred_roll=rolls[0],
                                                point2=approach_points[1],arm2=arms[1],grip2=False,tilt2=tilts[1],preferred_pitch2=pi/4,preferred_roll2=rolls[1])
            #pitches[1] = target2.pitch
            self.gripPoints (point=interp_pt,grip=True,tilt=tilts[0],arm=arms[0],preferred_pitch=pi/4,preferred_roll=rolls[0]
                            ,point2=grip_points[1],grip2=False,tilt2=tilts[1],arm2=arms[1],preferred_pitch2=pi/4,preferred_roll2=rolls[1])
            self.gripPoints(point=grip_points[1],grip=False,tilt=tilts[1],arm=arms[1],preferred_pitch=pi/4,preferred_roll=rolls[1],grab=True)

            StanceUtils.close_gripper(arms[1])
        else:
            arms = self.getArms(fold_traj)
        #Bring both to middle

        self.gripPoints (point=vertical_points[0],grip=True,tilt=tilts[0],arm=arms[0],preferred_pitch=pi/2,preferred_roll=rolls[0]
                        ,point2=vertical_points[1],grip2=True,tilt2=tilts[1],arm2=arms[1],preferred_pitch2=pi/2,preferred_roll2=rolls[1]) #FIX pi/4 -> pi/2

        #Set first one down
        first_dx = goal_points[0].point.x - vertical_points[0].point.x
        first_dy = goal_points[0].point.y - vertical_points[0].point.y
        first_dz = goal_points[0].point.z - vertical_points[0].point.z
        second_dx = goal_points[1].point.x - vertical_points[1].point.x
        second_dy = goal_points[1].point.y - vertical_points[1].point.y
        second_dz = goal_points[1].point.z - vertical_points[1].point.z
        interp_dx = first_dx - second_dx
        interp_dy = first_dy - second_dy
        interp_dz = first_dz - second_dz
        interp_x = goal_points[0].point.x - interp_dx
        interp_y = goal_points[0].point.y - interp_dy
        interp_z = goal_points[0].point.z - interp_dz
        interp_pt = PointStamped()
        interp_pt.point.x = interp_x
        interp_pt.point.y = interp_y
        interp_pt.point.z = interp_z
        interp_pt.header.frame_id = grip_points[0].header.frame_id
        self.gripPoints  (point=interp_pt,grip=True,tilt=tilts[0],arm=arms[0],preferred_pitch=pi/2,preferred_roll=rolls[0]
                         ,point2=goal_points[1],grip2=True,tilt2=tilts[1],arm2=arms[1],preferred_pitch2=pi/2,preferred_roll2=rolls[1])
        #Finally, set last one down
        self.gripPoints(point=goal_points[0],grip=True,tilt=tilts[0],arm=arms[0],preferred_pitch=pi/2,preferred_roll=rolls[0]
                        ,point2=goal_points[1],grip2=True,tilt2=tilts[1],arm2=arms[1],preferred_pitch2=pi/2,preferred_roll2=rolls[1])
        GripUtils.open_grippers()
        goal_points[0].point.z += 0.03
        goal_points[1].point.z += 0.03
        self.gripPoints(point=goal_points[0],grip=False,tilt=tilts[0],arm=arms[0],preferred_pitch=pi/2,preferred_roll=rolls[0]
                        ,point2=goal_points[1],grip2=False,tilt2=tilts[1],arm2=arms[1],preferred_pitch2=pi/2,preferred_roll2=rolls[1])
        self.last_traj = fold_traj
Beispiel #8
0
    def execute(self, userdata):
        bl = userdata.bl
        br = userdata.br
        tl = userdata.tl
        tr = userdata.tr

        center = bl
        center.point.x = (bl.point.x + tl.point.x + br.point.x + tr.point.x) / 4
        center.point.y = (bl.point.y + tl.point.y + br.point.y + tr.point.y) / 4
        center.point.z = (bl.point.z + tl.point.z + br.point.z + tr.point.z) / 4

        # calculate width
        rightTip = PointStamped()
        rightTip.header.stamp = rospy.Time()
        rightTip.frame_id = "r_tip_frame"

        rFromL = self.listener.transformPoint("l_tip_frame", rightTip)

        width = math.sqrt(
            rFromL.point.x ** 2 + rFromL.point.y ** 2 + rFromL.point.z ** 2
        )  # distance from right to left

        # set point_l and point_r (remember to set z to the height of the table)
        point_l = br
        point_l.x = center.point.x
        point_l.y = center.point.y + width / 2
        point_l.z = TABLE_HEIGHT  # is this wrong? what frame are bl, br, tl, and tr given in?

        point_r = tl
        point_r.x = center.point.x
        point_r.y = center.point.y - width / 2
        point_r.z = TABLE_HEIGHT  # is this wrong? what frame are bl, br, tl, and tr given in?

        if not GripUtils.go_to_pts(
            point_l,
            pi / 2,
            pi / 4,
            -pi / 2,
            True,
            point_r,
            -pi / 2,
            pi / 4,
            pi / 2,
            True,
            z_offset_l=0.4,
            z_offset_r=0.4,
        ):
            return FAILURE

        numTowelsInStack = 0
        try:
            numTowelsInStack = userdata.stackNum
        except KeyError:
            pass

        z_offset = -0.4 + 0.02 * numTowelsInStack
        if not GripUtils.go_to_relative_multi(0, 0, z_offset, True, 0, 0, z_offset, True, "base_footprint"):
            return FAILURE
        if not GripUtils.open_grippers():
            return FAILURE

        userdata.stackNum = numTowelsInStack + 1
        return SUCCESS
Beispiel #9
0
 def execute(self, userdata):
     if not GripUtils.open_grippers():
         return FAILURE
     return SUCCESS