def Obj_Data_Calculation(center_X,center_Y,height_Z):  #Enter the number of objects that have been picked and place
    global objects_picked_num,target_base_avoidance,target_base_above_avoidance
    baseRequest = eye2baseRequest()
    center_X = center_X*100
    center_Y = center_Y*100
    height_Z = height_Z*100
    baseRequest.ini_pose = [center_X,center_Y,height_Z] 
    target_base = pixel_z_to_base_client(baseRequest) #[x,y,z]
    ## Increase four sides obstacle avoidance, posture conversion 0918
    #general A posture set
    A_posture = 0
    ### Avoid singularities for pushpin mission
    # if target_base[0] >= 30.5 and target_base[1] > 19.5 and target_base[1] <= 39.5:
    #     A_posture = 20
    # if target_base[0] >= 30.5 and target_base[1] >= 19.5 and target_base[1] <= 39.5:
    #     A_posture = 20
    if target_base[0] >= 30.5 and target_base[1] > 30 and target_base[1] <= 45:
        A_posture = 20
    if target_base[0] >= 30.5 and target_base[1] <= 30 and target_base[1] >= 9:
        A_posture = -20

    A_posture = 180 + A_posture
    ## ------0918
    avoidRequest_above = collision_avoidRequest()
    avoidRequest_above.ini_pose = [target_base[0],target_base[1],target_base[2],A_posture,0,0] ##0919
    avoidRequest_above.limit = 0.1 # test
    avoidRequest_above.dis = 15 # test 
    target_base_above_avoidance = base_avoidance_client(avoidRequest_above)
    avoidRequest = collision_avoidRequest()
    avoidRequest.ini_pose = [target_base[0],target_base[1],target_base[2],A_posture,0,0]  ##0919
    avoidRequest.limit = 0.1 # test
    avoidRequest.dis = 0 # test 
    target_base_avoidance = base_avoidance_client(avoidRequest)
예제 #2
0
    def Mission_Trigger(self):
        if self.arm_move == True and robot_ctr.get_robot_motion_state(
        ) == Arm_status.Isbusy:
            self.arm_move = False
        # if Arm_state_flag == Arm_status.Idle and Sent_data_flag == 1:
        if robot_ctr.get_robot_motion_state(
        ) == Arm_status.Idle and self.arm_move == False:
            if self.state == State.move:
                print('ffffffffffffffffffffffffffffffffffffffffffffffff')
                pos = self.pos[0]
                # position = [pos[0], pos[1], pos[2], pos[3], pos[4], pos[5]]
                req = collision_avoidRequest()
                req.ini_pose = pos
                req.limit = 2
                req.dis = 0
                position = np.array(self.easy_CA_client(req).tar_pose)
                print(position)
                robot_ctr.Set_ptp_speed(30)
                robot_ctr.Step_AbsLine_PosCmd(position)
                self.pos = np.delete(self.pos, 0, 0)
                self.state = State.take_pic
                self.arm_move = True

            elif self.state == State.take_pic:
                robot_ctr.Set_ptp_speed(80)
                robot_ctr.Step_AbsPTPCmd([16.5, 29.2, 3, -180, 0, 0])
                if len(self.pos) > 0:
                    self.state = State.move
                else:
                    self.state = State.finish
def Obj_Data_Calculation():
    baseRequest = eye2baseRequest()
    baseRequest.ini_pose = [boxes.x, boxes.y, camera_z]
    target_base = pixel_z_to_base_client(baseRequest)  #[x,y,z]
    avoidRequest = collision_avoidRequest()
    avoidRequest.ini_pose = [
        target_base[0], target_base[1], target_base[2], 180, 0, 0
    ]
    avoidRequest.limit = 1  # test
    avoidRequest.dis = 10  # test
    target_base_avoidance = base_avoidance_client(avoidRequest)
    # print("trans_pixel_to_base:",baseRequest.ini_pose)
    print("target_base:", target_base)
    print("target_base_avoidance:", target_base_avoidance)
def Obj_Data_Calculation(
):  #Enter the number of objects that have been picked and place
    global objects_picked_num, target_base_avoidance
    baseRequest = eye2baseRequest()
    baseRequest.ini_pose = [boxes.x, boxes.y, camera_z]
    target_base = pixel_z_to_base_client(baseRequest)  #[x,y,z]
    avoidRequest = collision_avoidRequest()
    avoidRequest.ini_pose = [
        target_base[0], target_base[1], target_base[2], 180, 0, 0
    ]
    avoidRequest.limit = 0.1  # test
    avoidRequest.dis = 0  # test
    target_base_avoidance = base_avoidance_client(avoidRequest)
    print("target_base:", target_base)
    print("target_base_avoidance:", target_base_avoidance)
    def Mission_Trigger(self):
        if self.arm_move == True and robot_ctr.get_robot_motion_state(
        ) == Arm_status.Isbusy:
            self.arm_move = False
        # if Arm_state_flag == Arm_status.Idle and Sent_data_flag == 1:
        if robot_ctr.get_robot_motion_state(
        ) == Arm_status.Idle and self.arm_move == False:
            if self.state == State.move:
                pos = self.pos[0]
                # position = [pos[0], pos[1], pos[2], pos[3], pos[4], pos[5]]
                req = collision_avoidRequest()
                req.ini_pose = pos
                req.limit = 5
                req.dis = 3
                res = self.CA_client(req)
                position = np.array(res.tar_pose)
                req = tool_angleRequest()
                req.angle = str(res.suc_angle)
                self.tool_angle_client(res.suc_angle)
                robot_ctr.Set_ptp_speed(30)
                robot_ctr.Step_AbsPTPCmd(position)
                self.pos = np.delete(self.pos, 0, 0)
                self.state = State.take_pic
                self.arm_move = True

            elif self.state == State.take_pic:
                robot_ctr.Set_ptp_speed(30)
                robot_ctr.Step_AbsPTPCmd([16.5, 29.2, 3, -180, 0, 0])
                if len(self.pos) > 0:
                    self.state = State.move
                else:
                    self.state = State.finish
                    req = ax_caliRequest()
                    req.cmd = 'dis'
                    self.tool_cali_client(req)
                    return
                req = tool_angleRequest()
                req.angle = 0
                self.tool_angle_client(req)
예제 #6
0
def MotionItem(ItemNo):
    global SpeedValue, PushFlag, MissionEndFlag, CurrentMissionType, MotionStep, objects_picked_num, obj_num, MissionType_Flag
    global target_base_avoidance, target_base_above_avoidance, arm_down_pick_flag, Stop_motion_flag, Absort_fail_to_Get_image
    global LineDown_Speed, ArmGernel_Speed
    for case in switch(ItemNo):
        if case(Arm_cmd.Arm_Stop):
            print("Arm_Stop")
            break
        if case(Arm_cmd.MoveToObj_Pick1):
            positon = [
                target_base_above_avoidance[0], target_base_above_avoidance[1],
                target_base_above_avoidance[2], target_base_above_avoidance[3],
                target_base_above_avoidance[4], target_base_above_avoidance[5]
            ]  ###target obj position
            robot_ctr.Step_AbsPTPCmd(positon)
            print("MoveToObj_Pick1")
            MotionStep += 1
            break
        if case(Arm_cmd.MoveToObj_Pick2):
            positon = [
                target_base_avoidance[0], target_base_avoidance[1], -26,
                target_base_avoidance[3], target_base_avoidance[4],
                target_base_avoidance[5]
            ]  ###target obj position
            robot_ctr.Step_AbsLine_PosCmd(positon, 0, 10)
            robot_ctr.Set_override_ratio(LineDown_Speed)  ##speed low

            arm_down_pick_flag = True
            robot_ctr.Set_digital_output(1, True)  # Absort_ON
            print("MoveToObj_Pick2")
            MotionStep += 1
            break
        if case(Arm_cmd.Absort_Check):
            robot_inputs_state = robot_ctr.Get_current_robot_inputs(
            )  # Determine whether the object is sucked
            if robot_inputs_state[0] == True:  # is digital IO input 1 pin
                print("Absort success check and mission continue")
                MotionStep += 1
            else:
                print("Absort fail and mission continue to Get image")
                '''''
                1.Suck next object
                MissionType_Flag = pick
                2.If there is no next object, take another photo
                ''' ''
                robot_ctr.Set_digital_output(1, False)  # Absort_OFF
                MissionType_Flag = MissionType.Get_Img
                GetKeyFlag = True
                ExecuteFlag = False
                MotionStep += 1  # tmp
            break
        if case(Arm_cmd.MoveToObj_PickUp):
            # time.sleep(0.3)  # pause pick for check sucker ready
            if Stop_motion_flag == True:  #There are early pick up items
                # Stop_motion_flag = False
                print("Absort success fucccccckkkkk")
                # MotionStep += 1
            # else: # Did not pick up items early
            positon = [
                target_base_above_avoidance[0], target_base_above_avoidance[1],
                target_base_above_avoidance[2], target_base_above_avoidance[3],
                target_base_above_avoidance[4], target_base_above_avoidance[5]
            ]  ###target obj position
            robot_ctr.Step_AbsLine_PosCmd(positon, 0, 10)
            robot_ctr.Set_override_ratio(ArmGernel_Speed)
            arm_down_pick_flag = False  #Initialize the flag to determine the next action
            print("MoveToObj_PickUp")
            MotionStep += 1
            break
        if case(Arm_cmd.MoveToTarget_Place):
            positon = [16.2, 10, 10, -180, 0, 0]
            robot_ctr.Step_AbsPTPCmd(positon)
            positon = [16.2, -11.3, 10, -180, 0, 0]
            robot_ctr.Step_AbsPTPCmd(positon)
            print("MoveToTarget_Place")
            MotionStep += 1
            break
        if case(Arm_cmd.Absort_OFF):
            robot_ctr.Set_digital_output(1, False)
            time.sleep(0.1)
            print("Absort_OFF")
            MotionStep += 1
            break
        if case(Arm_cmd.MoveToTarget_PlaceUp):
            positon = [16.2, 10, 10, -180, 0, 0]
            robot_ctr.Step_AbsPTPCmd(positon)
            MotionStep += 1
            break
        if case(Arm_cmd.Go_Image1):
            CurrentMissionType = MissionType.Get_Img
            ### test take pic point(1)
            positon = [11.3440, 26.4321, 11.23, 179.994, 10.002, -0.488]
            robot_ctr.Step_AbsPTPCmd(positon)
            # time.sleep(20) ### test 9/16
            MotionStep += 1
            break
        if case(Arm_cmd.Go_Image2):
            CurrentMissionType = MissionType.Get_Img2
            baseRequest = eye2baseRequest()
            baseRequest.ini_pose = [boxes.x, boxes.y, camera_z]
            Get_Image_Point_Base = pixel_z_to_base_client(
                baseRequest)  #[x,y,z]
            avoidRequest_Get_Image_Point = collision_avoidRequest()
            avoidRequest_Get_Image_Point.ini_pose = [
                Get_Image_Point_Base[0] - 7, Get_Image_Point_Base[1],
                Get_Image_Point_Base[2], 180, 10, 0
            ]
            avoidRequest_Get_Image_Point.limit = 0.1  # test
            avoidRequest_Get_Image_Point.dis = 30  # test
            Get_Image_Point_base_avoidance = base_avoidance_client(
                avoidRequest_Get_Image_Point)
            positon = [
                Get_Image_Point_base_avoidance[0],
                Get_Image_Point_base_avoidance[1],
                Get_Image_Point_base_avoidance[2],
                Get_Image_Point_base_avoidance[3],
                Get_Image_Point_base_avoidance[4],
                Get_Image_Point_base_avoidance[5]
            ]
            robot_ctr.Step_AbsPTPCmd(positon)
            MotionStep += 1
            break
        if case(Arm_cmd.Get_Image):
            CurrentMissionType = MissionType.Get_Img
            ### test take pic
            time.sleep(0.3)  # Delayed time to see
            Obj_Data_Calculation()
            if obj_num == 0:  # If you don't see the object,Mission End
                MissionType_Flag = MissionType.Mission_End
                # robot_ctr.Stop_motion()  #That is, it is sucked and started to place
                print("mission end")
            else:  # Have seen the object, take the action
                MissionType_Flag = MissionType.Pick
                # print("Get_Image success")
            '''''' '''''
            1.If the area object is not finished
            2.If there is no next object, take next photo spot
            MissionType_Flag = Get_Img2
            3.If next photo spot is elso noing, end of mission
            If ob_num == 0
            ''' '''''' ''
            MotionStep += 1
            break
        if case(Arm_cmd.Go_back_home):
            robot_ctr.Set_operation_mode(0)
            robot_ctr.Go_home()
            print("MissionEnd")
            MotionStep += 1
            break
        if case():
            print("something else!")
예제 #7
0
def Obj_Data_Calculation(
):  #Enter the number of objects that have been picked and place
    global objects_picked_num, target_base_avoidance, target_base_above_avoidance
    baseRequest = eye2baseRequest()
    baseRequest.ini_pose = [boxes.x, boxes.y, camera_z]
    target_base = pixel_z_to_base_client(baseRequest)  #[x,y,z]
    ## Increase four sides obstacle avoidance, posture conversion 0918
    ## The inner length and width of the box 59*39cm
    # Limit 8 cm
    #general B posture set ,C posture set
    C_posture = 0
    A_posture = 0
    # tool right
    # if target_base[1] >= 48.5 and target_base[0] >= 30.5: #ahead #left
    #     C_posture = -45
    # elif target_base[1] <= 9 and target_base[0] >= 30.5: #ahead #right
    #     C_posture = -135
    # elif target_base[0] <= 9 and target_base[1] >= 48.5: #left #rear
    #     C_posture = 45
    # elif target_base[0] <= 9 and target_base[1] <= 9:  #right#rear
    #     C_posture = 135
    # elif target_base[1] >= 48.5: #left
    #     C_posture = 0
    # elif target_base[1] <= 9: #right
    #     C_posture = -180
    # elif target_base[0] >= 30.5: #ahead
    #     C_posture = -90
    # elif target_base[0] <= 9: #rear
    #     C_posture = 90
    # ### Avoid singularities for pushpin mission
    # if target_base[0] >= 30.5 and target_base[1] > 19.5 and target_base[1] <= 39.5:
    #     B_posture = -10
    # if target_base[0] >= 30.5 and target_base[1] >= 19.5 and target_base[1] <= 39.5:
    #     B_posture = -10

    # tool left
    if target_base[1] >= 48.5 and target_base[0] >= 30.5:  #ahead #left
        C_posture = 135
    elif target_base[1] <= 9 and target_base[0] >= 30.5:  #ahead #right
        C_posture = 45
    elif target_base[0] <= 9 and target_base[1] >= 48.5:  #left #rear
        C_posture = -135
    elif target_base[0] <= 9 and target_base[1] <= 9:  #right#rear
        C_posture = -45
    elif target_base[1] >= 48.5:  #left
        C_posture = -180
    elif target_base[1] <= 9:  #right
        C_posture = 0
    elif target_base[0] >= 30.5:  #ahead
        C_posture = 90
    elif target_base[0] <= 9:  #rear
        C_posture = -90
    ### Avoid singularities for pushpin mission
    if target_base[0] >= 30.5 and target_base[1] > 19.5 and target_base[
            1] <= 39.5:
        A_posture = 20
    if target_base[0] >= 30.5 and target_base[1] >= 19.5 and target_base[
            1] <= 39.5:
        A_posture = 20

    A_posture = 180 + A_posture
    ## ------0918
    avoidRequest_above = collision_avoidRequest()
    avoidRequest_above.ini_pose = [
        target_base[0], target_base[1], target_base[2], A_posture, 0, C_posture
    ]  ##0919
    avoidRequest_above.limit = 0.1  # test
    avoidRequest_above.dis = 15  # test
    target_base_above_avoidance = base_avoidance_client(avoidRequest_above)
    avoidRequest = collision_avoidRequest()
    avoidRequest.ini_pose = [
        target_base[0], target_base[1], target_base[2], A_posture, 0, C_posture
    ]  ##0919
    avoidRequest.limit = 0.1  # test
    avoidRequest.dis = 0  # test
    target_base_avoidance = base_avoidance_client(avoidRequest)
    def Mission_Trigger(self):
        if self.arm_move == True and robot_ctr.get_robot_motion_state() == Arm_status.Isbusy:
            self.arm_move = False
        # if Arm_state_flag == Arm_status.Idle and Sent_data_flag == 1:
        if self.monitor_suc == True:
            robot_inputs_state = robot_ctr.Get_current_robot_inputs()
            if robot_inputs_state[0] == True:
                robot_ctr.Stop_motion()  #That is, it is sucked and started to place
                time.sleep(0.2)
                self.monitor_suc = False
                self.state = State.pick_obj
        # dig_inputs = robot_ctr.Get_current_digital_inputs()
        # if dig_inputs[2] == True:
        #     self.stop_flg = True
        #     return
        # elif dig_inputs[2] == False and self.stop_flg == True:
        #     self.stop_flg = False
        #     self.state = State.move2pic

        if robot_ctr.get_robot_motion_state() == Arm_status.Idle and self.arm_move == False:
            if self.state == State.move2pic:
                pos = self.pic_pos[self.pic_pos_indx]
                # self.pic_pos_indx += 1
                position = [pos[0], pos[1]-3, pos[2], pos[3], pos[4], pos[5]]
                # pos[1] -= 3
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(position)
                self.state = State.get_objinfo
                self.arm_move = True
                # time.sleep(10)

            elif self.state == State.take_pic:
                time.sleep(0.2)
                req = eye2baseRequest()
                req.ini_pose = np.array(np.identity(4)).reshape(-1)
                trans = self.hand_eye_client(req).tar_pose
                req = save_pcdRequest()
                req.curr_trans = np.array(trans)
                req.name = 'mdfk'                               
                if self.pic_pos_indx < len(self.pic_pos):
                    self.state = State.move2pic
                    req.save_mix = False
                else:
                    self.state = State.get_objinfo
                    req.save_mix = True
                self.get_pcd_client(req)

            elif self.state == State.get_objinfo:
                time.sleep(0.2)
                req = snapshotRequest()
                req.call = 0
                res = self.get_obj_client(req)
                # res = snapshotResponse()
                # res.doit = True
                # res.type = 0
                # t = tf.transformations.rotation_matrix(radians(90), [0, 1, 0], point=None)
                # res.trans = np.array([1,0,0,0,0,1,0,0,0,0,1,0.59,0,0,0,1])
                # t = np.array([0.746, -0.665, -0.011, 0.172, -0.663, -0.745, 0.066, -0.089, -0.053, -0.042, -0.997, 0.58, 0,0,0,1])
                # t = [0.108, 0.977, -0.180, -0.089, -0.993, 0.103, -0.040, -0.183, -0.020, 0.183, 0.982,0.58, 0,0,0,1]
                # t = [-0.040, -0.998, 0.033, -0.047, -0.999, 0.040, 0.012, -0.034, -0.013, -0.033, -0.999,  0.58, 0,0,0,1]
                # t = [0.906, -0.388, -0.168, -0.243, 0.334, 0.900, -0.278, -0.029, 0.259, 0.196, 0.945, 0.58, 0, 0, 0, 1]
                # t = [0.660, 0.750, -0.022, -0.282, -0.750, 0.660, 0.006, 0.146, 0.019, 0.012, 0.999, 0.58,0, 0, 0, 1]
                # res.trans = np.array(t).reshape(-1)
                # res.trans[11] = 0.58
                if res.doit == True:
                    trans = np.mat(np.asarray(res.trans)).reshape(4,4)
                    trans[2,3] = 0.59
                    if res.type == 1:
                        trans = np.array(trans).reshape(-1)                        
                    elif res.type == 2: # y 90
                        # pre_trans = np.mat([[1., 0, 0, 0],
                        #                     [0,  1, 0, 0],
                        #                     [0,  0, 1, 0],
                        #                     [0,  0, 0, 1]])
                        pre_trans = tf.transformations.euler_matrix(0, radians(90), 0, axes='sxyz')
                        # trans = trans * pre_trans
                        trans = pre_trans * trans
                        trans = np.array(trans).reshape(-1)
                    elif res.type == 3: # -90
                        # pre_trans = np.mat([[1., 0, 0, 0],
                        #                     [0,  1, 0, 0],
                        #                     [0,  0, 1, 0],
                        #                     [0,  0, 0, 1]])
                        pre_trans = tf.transformations.euler_matrix(0, radians(-90), 0, axes='sxyz')
                        # trans = trans * pre_trans
                        trans = pre_trans * trans
                        print('fucktrans', trans)
                        trans = np.array(trans).reshape(-1)

                    req = eye2baseRequest()
                    req.ini_pose = trans ##
                    self.target_obj = self.hand_eye_client(req).tar_pose
                    self.target_obj = np.mat(self.target_obj).reshape(4,4)
                    self.right_side = self.check_side(self.target_obj)
                     
                    x, y, z = np.array(np.multiply(self.target_obj[0:3, 3:], 100)).reshape(-1)
                    a, b, c = [degrees(abc) for abc in tf.transformations.euler_from_matrix(self.target_obj, axes='sxyz')]
                    self.target_obj = [x, y, z, a, b, c]
                    print('self.target_obj\n ', self.target_obj)
                    self.state = State.move2objup
                    self.pic_pos_indx = 0
                else:
                    # self.pic_pos_indx += 1
                    self.pic_pos_indx = self.pic_pos_indx  if self.pic_pos_indx < len(self.pic_pos) else 0
                    self.state = State.move2pic

            elif self.state == State.move2objup:
                req = collision_avoidRequest()
                req.ini_pose = np.array(self.target_obj).reshape(-1) ####
                req.limit = 1.5
                req.dis = 6
                res = self.CA_client(req)
                pose = np.array(res.tar_pose)
                self.dis_trans = np.mat(res.dis_trans).reshape(4,4)
                self.suc_angle = res.suc_angle
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                req = tool_angleRequest()
                req.angle = self.suc_angle
                res = self.tool_client(req)
                self.state = State.move2obj
                self.arm_move = True


            elif self.state == State.move2obj:
                robot_ctr.Set_digital_output(1,True)
                req = collision_avoidRequest()
                req.ini_pose = np.array(self.target_obj).reshape(-1) ####
                req.limit = 2
                req.dis = -1
                res = self.CA_client(req)
                pose = np.array(res.tar_pose)
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                self.state = State.pick_obj
                self.monitor_suc = True
                self.arm_move = True

            elif self.state == State.pick_obj:
                req = collision_avoidRequest()
                req.ini_pose = np.array(self.target_obj).reshape(-1) ####
                req.limit = 2
                req.dis = 6
                res = self.CA_client(req)
                pose = np.array(res.tar_pose)
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                self.state = State.move2binup
                self.arm_move = True

            elif self.state == State.move2binup:
                if self.monitor_suc == True:
                    time.sleep(0.3)
                    self.monitor_suc = False
                pose = [15,15,10,180,0,0]
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                self.state = State.move2placeup
                self.arm_move = True

            

            elif self.state == State.move2placeup:
                req = tool_angleRequest()
                req.angle = 0
                res = self.tool_client(req)
                robot_inputs_state = robot_ctr.Get_current_robot_inputs()
                if robot_inputs_state[0] == False:
                    robot_ctr.Set_digital_output(1,False)
                    self.state = State.move2pic
                    return
                pose = [7.7,-18,5.5714,180,0,0]
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                self.state = State.move2placeup1
                self.arm_move = True

            elif self.state == State.move2placeup1:
                pose = [7.7,-18,-22,180,0,0]
                trans = tf.transformations.euler_matrix(radians(pose[3]), radians(pose[4]), radians(pose[5]), axes='sxyz')
                trans = np.mat(trans) * self.dis_trans
                pose[3:] = [degrees(abc) for abc in tf.transformations.euler_from_matrix(trans, axes='sxyz')]
                print('pose:\,n', pose)
                # robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                self.state = State.place
                self.arm_move = True

            elif self.state == State.place:
                if self.right_side:
                    self.place_pos_right[0] += 6
                    if self.place_pos_right[0] > 18:
                        self.place_pos_right[0] = 18
                        self.place_pos_right[2] += 1.5
                    pose = copy.deepcopy(self.place_pos_right)  ##
                else:
                    self.place_pos_left[0] += 6
                    if self.place_pos_left[0] > 18:
                        self.place_pos_left[0] = 18
                        self.place_pos_left[2] += 1.5
                    pose = copy.deepcopy(self.place_pos_left) ##
                print('pose:\,n', pose)
                trans = tf.transformations.euler_matrix(radians(pose[3]), radians(pose[4]), radians(pose[5]), axes='sxyz')
                print(trans)
                print(self.dis_trans)
                trans = np.mat(trans) * self.dis_trans
                pose[3:] = [degrees(abc) for abc in tf.transformations.euler_from_matrix(trans, axes='sxyz')]
                print('pose:\,n', pose)
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                self.state = State.placeup
                self.arm_move = True
                ##
            
            elif self.state == State.placeup:
                robot_ctr.Set_digital_output(1,False)
                pose = [7.7,-20,5.5714,180,0,0]
                robot_ctr.Set_ptp_speed(10)
                robot_ctr.Step_AbsPTPCmd(pose)
                self.state = State.move2pic
                self.arm_move = True