Para controlar as garras Brooks PreciseFlex IntelliGuide a partir de uma simulação, incluindo a garra IntelliGuide s23D (dupla), siga as etapas descritas nesta seção.
1.Clique com o botão direito do mouse em seu programa e adicione uma instrução de chamada de programa.
2.Digite "Gripper(gripper ID, gripper value)". Por exemplo, "Gripper(2, 50)" para mover a garra nº 2 de uma garra dupla para 50 mm.
a.Você pode encurtar a chamada para "Gripper(gripper value)" com um único gripper.
b.Se houver mais de um robô presente, use "Gripper(gripper ID, gripper value, item.ptr)". Por exemplo, "Gripper(2, 50, item.ptr)" moverá a garra nº 2 de uma garra dupla para 50 mm, garantindo que o robô pai esteja vinculado ao programa.
3.Adicione a instrução Gripper() como a primeira instrução de todos os subprogramas e após todas as chamadas de subprogramas. Isso é para garantir a compatibilidade com o pós-processador. São esperadas instruções Gripper() duplicadas.
4.Adicione um script Python, renomeie-o para "Gripper".
5.Edite o script Python "Gripper" e cole o seguinte:
from robodk import robolink
import sys
if len(sys.argv) < 2:
quit()
def get_item(ptr_item, RDK):
item = robolink.Item(RDK, str(ptr_item), robolink.ITEM_TYPE_PROGRAM)
if not item.Valid(True):
return None
return item
RDK = robolink.Robolink()
gripper_id = -1
gripper_value = 0
prog_item = None
# Get the gripper ID, value, possibly the caller
if 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])
else:
gripper_id = int(sys.argv[1])
gripper_value = float(sys.argv[2])
# Get candidates
grippers = [x for x in RDK.ItemList(robolink.ITEM_TYPE_ROBOT_AXES) if 'intelliguide' in x.Name().lower() and len(x.Joints().tolist()) == 1]
if len(grippers) > 1 and 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]
if not grippers:
RDK.ShowMessage('Unable to find a gripper!', False)
# Try to find the right gripper id (i.e. Dual Gripper 1)
gripper = grippers[0]
if gripper_id > 0:
gripper_ids = [g for g in grippers if g.Name().endswith(str(gripper_id))]
if gripper_ids:
gripper = gripper_ids[0]
gripper.MoveJ([gripper_value])
Observe que esse método também é compatível com o pós-processador Brooks.