夹爪模拟

要通过模拟控制 Brooks PreciseFlex 夹爪,包括双夹爪,请按照本节所述步骤操作。

1.右键单击程序,添加程序调用指令。

2.输入 "Gripper(夹爪 ID,夹爪值)"。例如,输入 "Gripper(2, 50) "可将双夹爪中的 2 号夹爪移动到 50 毫米处。

a.您可以通过单个夹爪缩短对 "Gripper(夹爪值) "的调用。

b.如果存在多个机器人,请使用 "Gripper(夹爪 ID, 夹爪值, item.ptr)"。例如,"Gripper(2, 50, item.ptr) "将把双夹爪中的 2 号夹爪移动到 50 毫米处,确保父机器人与程序相连。

3.在所有子程序的第一条指令和所有子程序调用之后添加夹爪()指令。这是为了确保与后处理器兼容。预计会出现重复的 Gripper() 指令。

4.添加一个 Python 脚本,将其重命名为 "夹爪"

5.编辑"夹爪 "Python 脚本并粘贴以下内容:

RoboDK 导入 robolink

导入系统

 

如果 len(sys.argv) < 2

退出()

 

def get_item(ptr_item, RDK)

item = robolink.Item(RDK, str(ptr_item), robolink.ITEM_TYPE_PROGRAM)

if not item.Valid(True)

返回 None

退货

 

RDK = robolink.Robolink()

gripper_id = -1

gripper_value = 0

prog_item =

 

# 获取夹爪 ID、值和调用者

如果 len(sys.argv) == 2

gripper_value = float(sys.argv[1])

elif len(sys.argv) >= 4

gripper_id = int(sys.argv[1])

gripper_value = float(sys.argv[2])

prog_item = get_item(int(sys.argv[3]), RDK)

elif len(sys.argv) == 3

prog_item = get_item(int(sys.argv[2]), RDK)

if prog_item

gripper_value = float(sys.argv[1])

否则

gripper_id = int(sys.argv[1])

gripper_value = float(sys.argv[2])

 

# 获取候选人

grippers = [x for x in RDK.ItemList(robolink.ITEM_TYPE_ROBOT_AXES) if 'gripper' in x.Name().lower() and len(x.Joints().tolist()) == 1] (夹爪 = 1)

如果 len(grippers) > 1 prog_item

robot_item = prog_item.getLink(robolink.ITEM_TYPE_ROBOT)

if not robot_item.Valid()

robot_item = RDK.ItemUserPick("Select the linked robot", robolink.ITEM_TYPE_ROBOT)

prog_item.setRobot(robot_item)

 

def get_flat_childs(item)

childs = item.Childs()

for child in item.Childs()

childs.extend(get_flat_childs(child))

return childs

 

childs = get_flat_childs(robot_item)

grippers = [x for x in childs if x.Type() == robolink.ITEM_TYPE_ROBOT and len(x.Joints().tolist()) == 1] (夹爪 = [x for x in childs if x.Type() == robolink.ITEM_TYPE_ROBOT and len(x.Joints().tolist()) == 1

 

如果不是夹爪:

RDK.ShowMessage('Unable to find a gripper!', False)

 

# 尝试找到正确的夹爪 ID(即双夹爪 1

夹爪 = grippers[0]

如果 gripper_id > 0

gripper_ids = [g for g in grippers if g.Name().endswith(str(gripper_id))] (夹爪中的 g

如果 gripper_ids

gripper = gripper_ids[0]

 

gripper.MoveJ([gripper_value])

请注意,这种方法也与布鲁克斯后处理器兼容。