python-urx-getl-rt/urx/robotiq_two_finger_gripper.py
Mark Silliman cdefd3c075 -Robotiq gripper control
-Documentation
-gitignore .idea/ for PyCharm
2016-04-26 10:14:19 -07:00

86 lines
3.7 KiB
Python

"""
Python library to control Robotiq Two Finger Gripper connected to UR robot via Python-URX
Tested using a UR5 Version CB3 and Robotiq 2-Finger Gripper Version 85
SETUP
You must install the driver first (http://support.robotiq.com/pages/viewpage.action?pageId=5963876) and then power on the gripper from the gripper UI
FAQ
Why does this class group all the commands together and run them as a single program as opposed to running each line seperately (like most of URX)?
- The gripper is controlled by connecting to the robot's computer (TCP/IP) and then communicating with the gripper via a socket (127.0.0.1:63352). The scope of the socket is at the program level. It will be automatically closed whenever a program finishes. Therefore it's important that we run all commands as a single program.
DOCUMENTATION
- This code was developed by downloading the "gripper package" on http://support.robotiq.com/pages/viewpage.action?pageId=5963876
- Open folder "robotiq_2f_gripper_programs_CB3"
- robotiq_2f_gripper_programs_CB3/advanced_template_test.script was referenced to create this class
Future Features
- Though I haven't developed it yet if you look in robotiq_2f_gripper_programs_CB3/advanced_template_test.script and view function "rq_get_var" there is an example of how to determine the current state of the gripper and if it's holding an object.
"""
import logging
class Robotiq_Two_Finger_Gripper(object):
complete_program = ""
header = "def myProg():" + b"\n"
end = b"\n" + "end"
logger = False
def __init__(self):
self.logger = logging.getLogger("urx")
self.reset()
def reset(self):
self.complete_program = ""
self.add_line_to_program("set_analog_inputrange(0, 0)")
self.add_line_to_program("set_analog_inputrange(1, 0)")
self.add_line_to_program("set_analog_inputrange(2, 0)")
self.add_line_to_program("set_analog_inputrange(3, 0)")
self.add_line_to_program("set_analog_outputdomain(0, 0)")
self.add_line_to_program("set_analog_outputdomain(1, 0)")
self.add_line_to_program("set_tool_voltage(0)")
self.add_line_to_program("set_runstate_outputs([])")
self.add_line_to_program("set_payload(0.85)") #0.85 is the weight of the gripper in KG
self.add_line_to_program("socket_close(\"gripper_socket\")")
#self.add_line_to_program("sleep(1)") #in Robotiq's example they do a wait here... I haven't found it nec
self.add_line_to_program("socket_open(\"127.0.0.1\",63352,\"gripper_socket\")")
#self.add_line_to_program("sleep(1)")
self.add_line_to_program("socket_set_var(\"SEP\",255,\"gripper_socket\")") #Speed 0-255 is valid
self.add_line_to_program("sync()")
self.add_line_to_program("socket_set_var(\"FOR\",50,\"gripper_socket\")") #Force 0-255 is valid
self.add_line_to_program("sync()")
self.add_line_to_program("socket_set_var(\"ACT\",1,\"gripper_socket\")") # Activate robot
self.add_line_to_program("sync()")
self.add_line_to_program("socket_set_var(\"GTO\",1,\"gripper_socket\")")
self.add_line_to_program("sync()")
def open_gripper(self):
self.add_line_to_program("socket_set_var(\"POS\",0,\"gripper_socket\")") #0 is open; range is 0-255
self.add_line_to_program("sync()")
self.add_line_to_program("sleep(2)")
def close_gripper(self):
self.add_line_to_program("socket_set_var(\"POS\",255,\"gripper_socket\")") #255 is closed; range is 0-255
self.add_line_to_program("sync()")
self.add_line_to_program("sleep(2)")
def add_line_to_program(self,new_line):
if(self.complete_program != ""):
self.complete_program += b"\n"
self.complete_program += new_line
def ret_program_to_run(self):
if(self.complete_program == ""):
self.logger.debug("robotiq_two_finger_gripper's program is empty")
return ""
prog = self.header
prog += self.complete_program
prog += self.end
return prog