def gripper(): #aliases for the gripper variable names ACT = 1 GTO = 2 ATR = 3 ARD = 4 FOR = 5 SPE = 6 OBJ = 7 STA = 8 FLT = 9 POS = 10 PRE = 11 def rq_init_connection(gripper_sid=9, gripper_socket="1"): socket_open("127.0.0.1",63352, gripper_socket) socket_set_var("SID", gripper_sid, gripper_socket) ack = socket_read_byte_list(3, gripper_socket) end def rq_set_sid(gripper_sid=9, gripper_socket="1"): socket_set_var("SID", gripper_sid, gripper_socket) sync() return is_ack(socket_read_byte_list(3, gripper_socket)) end def rq_activate(gripper_socket="1"): rq_gripper_act = 0 if (not rq_is_gripper_activated(gripper_socket)): rq_reset(gripper_socket) end rq_set_var(ACT,1, gripper_socket) end def rq_activate_and_wait(gripper_socket="1"): rq_activate(gripper_socket) while(not rq_is_gripper_activated(gripper_socket)): # wait for activation completed end end def rq_stop(gripper_socket="1"): rq_set_var(GTO,0, gripper_socket) end def rq_reset(gripper_socket="1"): rq_gripper_act = 0 rq_obj_detect = 0 rq_mov_complete = 0 rq_set_var(ACT,0, gripper_socket) rq_set_var(ATR,0, gripper_socket) end def rq_auto_release_open_and_wait(gripper_socket="1"): rq_set_var(ARD,0, gripper_socket) rq_set_var(ACT,1, gripper_socket) rq_set_var(ATR,1, gripper_socket) gFLT = rq_get_var(FLT, 2, gripper_socket) while(not is_FLT_autorelease_completed(gFLT)): gFLT = rq_get_var(FLT, 2, gripper_socket) end end def rq_auto_release_close_and_wait(gripper_socket="1"): rq_set_var(ARD,1, gripper_socket) rq_set_var(ACT,1, gripper_socket) rq_set_var(ATR,1, gripper_socket) gFLT = rq_get_var(FLT, 2, gripper_socket) while(not is_FLT_autorelease_completed(gFLT)): gFLT = rq_get_var(FLT, 2, gripper_socket) end end def rq_set_force(force, gripper_socket="1"): rq_set_var(FOR,force, gripper_socket) end def rq_set_speed(speed, gripper_socket="1"): rq_set_var(SPE,speed, gripper_socket) end def rq_open(gripper_socket="1"): rq_move(0, gripper_socket) end def rq_close(gripper_socket="1"): rq_move(255, gripper_socket) end def rq_open_and_wait(gripper_socket="1"): rq_move_and_wait(0, gripper_socket) end def rq_close_and_wait(gripper_socket="1"): rq_move_and_wait(255, gripper_socket) end def rq_move(pos, gripper_socket="1"): rq_mov_complete = 0 rq_obj_detect = 0 rq_set_pos(pos, gripper_socket) rq_go_to(gripper_socket) end def rq_move_and_wait(pos, gripper_socket="1"): rq_move(pos, gripper_socket) while (not rq_is_motion_complete(gripper_socket)): # wait for motion completed sleep(0.01) sync() end # following code used for compatibility with previous versions rq_is_object_detected(gripper_socket) if (rq_obj_detect != 1): rq_mov_complete = 1 end end def rq_wait(gripper_socket="1"): # Wait for the gripper motion to complete while (not rq_is_motion_complete(gripper_socket)): # wait for motion completed sleep(0.01) sync() end # following code used for compatibility with previous versions rq_is_object_detected(gripper_socket) if (rq_obj_detect != 1): rq_mov_complete = 1 end end def rq_go_to(gripper_socket="1"): rq_set_var(GTO,1, gripper_socket) end # reset the rGTO to prevent movement and # set the position def rq_set_pos(pos, gripper_socket="1"): rq_set_var(GTO,0, gripper_socket) rq_set_var(POS, pos, gripper_socket) gPRE = rq_get_var(PRE, 3, gripper_socket) pre = (gPRE[1] - 48)*100 + (gPRE[2] -48)*10 + gPRE[3] - 48 sync() while (pre != pos): rq_set_var(POS, pos, gripper_socket) gPRE = rq_get_var(PRE, 3, gripper_socket) pre = (gPRE[1] - 48)*100 + (gPRE[2] -48)*10 + gPRE[3] - 48 sync() end end def rq_is_motion_complete(gripper_socket="1"): rq_mov_complete = 0 gOBJ = rq_get_var(OBJ, 1, gripper_socket) sleep(0.01) if (is_OBJ_gripper_at_position(gOBJ)): rq_mov_complete = 1 return True end if (is_OBJ_object_detected(gOBJ)): rq_mov_complete = 1 return True end return False end def rq_is_gripper_activated(gripper_socket="1"): gSTA = rq_get_var(STA, 1, gripper_socket) if(is_STA_gripper_activated(gSTA)): rq_gripper_act = 1 return True else: rq_gripper_act = 0 return False end end def rq_is_object_detected(gripper_socket="1"): gOBJ = rq_get_var(OBJ, 1, gripper_socket) if(is_OBJ_object_detected(gOBJ)): rq_obj_detect = 1 return True else: rq_obj_detect = 0 return False end end def rq_current_pos(gripper_socket="1"): rq_pos = socket_get_var("POS",gripper_socket) sync() return rq_pos end def rq_print_gripper_fault_code(gripper_socket="1"): gFLT = rq_get_var(FLT, 2, gripper_socket) if(is_FLT_no_fault(gFLT)): textmsg("Gripper Fault : ", "No Fault (0x00)") elif (is_FLT_action_delayed(gFLT)): textmsg("Gripper Fault : ", "Priority Fault: Action delayed, initialization must be completed prior to action (0x05)") elif (is_FLT_not_activated(gFLT)): textmsg("Gripper Fault : ", "Priority Fault: The activation must be set prior to action (0x07)") elif (is_FLT_autorelease_in_progress(gFLT)): textmsg("Gripper Fault : ", "Minor Fault: Automatic release in progress (0x0B)") elif (is_FLT_overcurrent(gFLT)): textmsg("Gripper Fault : ", "Minor Fault: Overcurrent protection tiggered (0x0E)") elif (is_FLT_autorelease_completed(gFLT)): textmsg("Gripper Fault : ", "Major Fault: Automatic release completed (0x0F)") else: textmsg("Gripper Fault : ", "Unkwown Fault") end end def rq_print_gripper_num_cycles(gripper_socket="1"): socket_send_string("GET NCY",gripper_socket) sync() string_from_server = socket_read_string(gripper_socket) sync() if(string_from_server == "0"): textmsg("Gripper Cycle Number : ", "Number of cycles is unreachable.") else: textmsg("Gripper Cycle Number : ", string_from_server) end end def rq_print_gripper_driver_state(gripper_socket="1"): socket_send_string("GET DST",gripper_socket) sync() string_from_server = socket_read_string(gripper_socket) sync() if(string_from_server == "0"): textmsg("Gripper Driver State : ", "RQ_STATE_INIT") elif(string_from_server == "1"): textmsg("Gripper Driver State : ", "RQ_STATE_LISTEN") elif(string_from_server == "2"): textmsg("Gripper Driver State : ", "RQ_STATE_READ_INFO") elif(string_from_server == "3"): textmsg("Gripper Driver State : ", "RQ_STATE_ACTIVATION") else: textmsg("Gripper Driver State : ", "RQ_STATE_RUN") end end def rq_print_gripper_serial_number(): #socket_send_string("GET SNU",gripper_socket) #sync() #string_from_server = socket_read_string(gripper_socket) #sync() #textmsg("Gripper Serial Number : ", string_from_server) end def rq_print_gripper_firmware_version(gripper_socket="1"): socket_send_string("GET FWV",gripper_socket) sync() string_from_server = socket_read_string(gripper_socket) sync() textmsg("Gripper Firmware Version : ", string_from_server) end def rq_print_gripper_driver_version(gripper_socket="1"): socket_send_string("GET VER",gripper_socket) sync() string_from_server = socket_read_string(gripper_socket) sync() textmsg("Gripper Driver Version : ", string_from_server) end def rq_print_gripper_probleme_connection(gripper_socket="1"): socket_send_string("GET PCO",gripper_socket) sync() string_from_server = socket_read_string(gripper_socket) sync() if (string_from_server == "0"): textmsg("Gripper Connection State : ", "No connection problem detected") else: textmsg("Gripper Connection State : ", "Connection problem detected") end end # Returns True if list_of_bytes is [3, 'a', 'c', 'k'] def is_ack(list_of_bytes): # list length is not 3 if (list_of_bytes[0] != 3): return False end # first byte not is 'a'? if (list_of_bytes[1] != 97): return False end # first byte not is 'c'? if (list_of_bytes[2] != 99): return False end # first byte not is 'k'? if (list_of_bytes[3] != 107): return False end return True end # Returns True if list_of_bytes is not [3, 'a', 'c', 'k'] def is_not_ack(list_of_bytes): if (is_ack(list_of_bytes)): return False else: return True end end def is_STA_gripper_activated (list_of_bytes): # list length is not 1 if (list_of_bytes[0] != 1): return False end # byte is '3'? if (list_of_bytes[1] == 51): return True end return False end # Returns True if list_of_byte is [1, '1'] or [1, '2'] # Used to test OBJ = 0x1 or OBJ = 0x2 def is_OBJ_object_detected (list_of_bytes): # list length is not 1 if (list_of_bytes[0] != 1): return False end # byte is '2'? if (list_of_bytes[1] == 50): return True end # byte is '1'? if (list_of_bytes[1] == 49): return True end return False end # Returns True if list_of_byte is [1, '3'] # Used to test OBJ = 0x3 def is_OBJ_gripper_at_position (list_of_bytes): # list length is not 1 if (list_of_bytes[0] != 1): return False end # byte is '3'? if (list_of_bytes[1] == 51): return True end return False end def is_not_OBJ_gripper_at_position (list_of_bytes): if (is_OBJ_gripper_at_position(list_of_bytes)): return False else: return True end end def is_FLT_no_fault(list_of_bytes): # list length is not 2 if (list_of_bytes[0] != 2): return False end # first byte is '0'? if (list_of_bytes[1] != 48): return False end # second byte is '0'? if (list_of_bytes[2] != 48): return False end return True end def is_FLT_action_delayed(list_of_bytes): # list length is not 2 if (list_of_bytes[0] != 2): return False end # first byte is '0'? if (list_of_bytes[1] != 48): return False end # second byte is '5'? if (list_of_bytes[2] != 53): return False end return True end def is_FLT_not_activated(list_of_bytes): # list length is not 2 if (list_of_bytes[0] != 2): return False end # first byte is '0'? if (list_of_bytes[1] != 48): return False end # second byte is '7'? if (list_of_bytes[2] != 55): return False end return True end def is_FLT_autorelease_in_progress(list_of_bytes): # list length is not 2 if (list_of_bytes[0] != 2): return False end # first byte is '1'? if (list_of_bytes[1] != 49): return False end # second byte is '1'? if (list_of_bytes[2] != 49): return False end return True end def is_FLT_overcurrent(list_of_bytes): # list length is not 2 if (list_of_bytes[0] != 2): return False end # first byte is '1'? if (list_of_bytes[1] != 49): return False end # second byte is '4'? if (list_of_bytes[2] != 52): return False end return True end def is_FLT_autorelease_completed(list_of_bytes): # list length is not 2 if (list_of_bytes[0] != 2): return False end # first byte is '1'? if (list_of_bytes[1] != 49): return False end # second byte is '5'? if (list_of_bytes[2] != 53): return False end return True end def rq_set_var(var_name, var_value, gripper_socket="1"): sync() if (var_name == ACT): socket_set_var("ACT", var_value, gripper_socket) elif (var_name == GTO): socket_set_var("GTO", var_value, gripper_socket) elif (var_name == ATR): socket_set_var("ATR", var_value, gripper_socket) elif (var_name == ARD): socket_set_var("ARD", var_value, gripper_socket) elif (var_name == FOR): socket_set_var("FOR", var_value, gripper_socket) elif (var_name == SPE): socket_set_var("SPE", var_value, gripper_socket) elif (var_name == POS): socket_set_var("POS", var_value, gripper_socket) else: end sync() ack = socket_read_byte_list(3, gripper_socket) sync() while(is_not_ack(ack)): textmsg("rq_set_var : retry", " ...") textmsg("rq_set_var : var_name = ", var_name) textmsg("rq_set_var : var_value = ", var_value) if (ack[0] != 0): textmsg("rq_set_var : invalid ack value = ", ack) end socket_set_var(var_name , var_value,gripper_socket) sync() ack = socket_read_byte_list(3, gripper_socket) sync() end end def rq_get_var(var_name, nbr_bytes, gripper_socket="1"): if (var_name == FLT): socket_send_string("GET FLT",gripper_socket) sync() elif (var_name == OBJ): socket_send_string("GET OBJ",gripper_socket) sync() elif (var_name == STA): socket_send_string("GET STA",gripper_socket) sync() elif (var_name == PRE): socket_send_string("GET PRE",gripper_socket) sync() else: end var_value = socket_read_byte_list(nbr_bytes, gripper_socket) sync() return var_value end ############################################ # normalized functions (maps 0-100 to 0-255) ############################################ def rq_set_force_norm(force_norm, gripper_socket="1"): force_gripper = norm_to_gripper(force_norm) rq_set_force(force_gripper, gripper_socket) end def rq_set_speed_norm(speed_norm, gripper_socket="1"): speed_gripper = norm_to_gripper(speed_norm) rq_set_speed(speed_gripper, gripper_socket) end def rq_move_norm(pos_norm, gripper_socket="1"): pos_gripper = norm_to_gripper(pos_norm) rq_move(pos_gripper, gripper_socket) end def rq_move_and_wait_norm(pos_norm, gripper_socket="1"): pos_gripper = norm_to_gripper(pos_norm) rq_move_and_wait(pos_gripper, gripper_socket) end def rq_set_pos_norm(pos_norm, gripper_socket="1"): pos_gripper = norm_to_gripper(pos_norm) rq_set_pos(pos_gripper, gripper_socket) end def rq_current_pos_norm(gripper_socket="1"): pos_gripper = rq_current_pos(gripper_socket) pos_norm = gripper_to_norm(pos_gripper) return pos_norm end def gripper_to_norm(value_gripper): value_norm = (value_gripper / 255) * 100 return floor(value_norm) end def norm_to_gripper(value_norm): value_gripper = (value_norm / 100) * 255 return ceil(value_gripper) end def rq_get_position(): return rq_current_pos_norm() end ######################################### rq_obj_detect = 0 rq_init_connection(9, "1") connectivity_checked = [-1,-1,-1,-1] status_checked = [-1,-1,-1,-1] current_speed = [-1,-1,-1,-1] current_force = [-1,-1,-1,-1] rq_activate_and_wait() rq_move_and_wait(255) rq_move_and_wait(0) end