Per controllare le pinze Brooks PreciseFlex da una simulazione, compresa la pinza doppia, segua la procedura descritta in questa sezione.
1.Clicchi con il tasto destro del mouse sul suo programma e aggiunga un'istruzione di chiamata al programma.
2.Inserisca "Pinza(ID pinza, valore pinza)". Ad esempio, "Pinza(2, 50)" per spostare la pinza numero 2 di una pinza doppia a 50 mm.
a.Può abbreviare la chiamata a "Pinza(valore pinza)" con una sola pinza.
b.Se è presente più di un robot, utilizzi "Gripper(ID pinza, valore pinza, item.ptr)". Ad esempio, "Pinza(2, 50, item.ptr)" sposterà la pinza numero 2 di una pinza doppia a 50 mm, assicurandosi che il robot genitore sia collegato al programma.
3.Aggiunga l'istruzione Gripper() come prima istruzione di tutti i sottoprogrammi e dopo tutte le chiamate di sottoprogrammi. Questo per garantire la compatibilità con il post-processore. Sono previste istruzioni Gripper() duplicate.
4.Aggiunga uno script Python, rinominandolo in "Gripper".
5.Modifichi lo script Python "Gripper" e incolli quanto segue:
da robodk importa robolink
Importazione di sys
se len(sys.argv) < 2:
uscire()
def get_item(ptr_item, RDK):
item = robolink.Item(RDK, str(ptr_item), robolink.ITEM_TYPE_PROGRAM)
se non item.Valid(True):
restituire Nessuno
restituire l'articolo
RDK = robolink.Robolink()
gripper_id = -1
valore_presa = 0
prog_item = Nessuno
# Ottenere l'ID pinza, il valore e il chiamante
se len(sys.argv) == 2:
valore_presa = float(sys.argv[1])
elif len(sys.argv) >= 4:
gripper_id = int(sys.argv[1])
valore_presa = 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)
se prog_item:
valore_presa = float(sys.argv[1])
altro:
gripper_id = int(sys.argv[1])
valore_presa = float(sys.argv[2])
# Ottenere i candidati
pinze = [x for x in RDK.ItemList(robolink.ITEM_TYPE_ROBOT_AXES) if 'gripper' in x.Name().lower() and len(x.Joints().tolist()) == 1]
se len(pinze) > 1 e prog_item:
robot_item = prog_item.getLink(robolink.ITEM_TYPE_ROBOT)
se non robot_item.Valid():
robot_item = RDK.ItemUserPick("Seleziona il robot collegato", robolink.ITEM_TYPE_ROBOT)
prog_item.setRobot(robot_item)
def get_flat_childs(elemento):
figli = item.Childs()
per bambino in item.Childs():
childs.extend(get_flat_childs(bambino))
restituire childs
figli = get_flat_childs(robot_item)
pinze = [x per x in childs se x.Type() == robolink.ITEM_TYPE_ROBOT e len(x.Joints().tolist()) == 1]
se non le pinze:
RDK.ShowMessage('Impossibile trovare una pinza!', False)
# Cerca di trovare l'id della pinza giusta (cioè la pinza doppia 1)
pinza = pinze[0]
se gripper_id > 0:
gripper_ids = [g for g in grippers if g.Name().endswith(str(gripper_id))]
se gripper_ids:
pinza = gripper_ids[0]
gripper.MoveJ([gripper_value])
Si noti che questo metodo è compatibile anche con il post processor Brooks.