Simulazione della pinza

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.