Simulación de pinzas

Para controlar las pinzas Brooks PreciseFlex desde una simulación, incluida la pinza doble, siga los pasos descritos en esta sección.

1.Haga clic con el botón derecho del ratón en su programa y añada una instrucción de llamada a programa.

2.Introduzca "Pinza(ID pinza, valor pinza)". Por ejemplo, "Pinza(2, 50)" para mover la pinza nº 2 de una pinza doble a 50 mm.

a.Puede acortar la llamada a "Pinza(valor pinza)" con una sola pinza.

b.Si hay más de un robot, utilice "Pinza(ID pinza, valor pinza, item.ptr)". Por ejemplo, "Pinza(2, 50, item.ptr)" moverá la pinza nº 2 de una pinza doble a 50 mm, asegurándose de que el robot padre está vinculado al programa.

3.Añada la instrucción Gripper() como primera instrucción de todos los subprogramas y después de todas las llamadas a subprogramas. Esto es para asegurar la compatibilidad con el postprocesador. Se esperan instrucciones Gripper() duplicadas.

4.Añada un script Python, cámbiele el nombre a "Gripper".

5.Edite el script Python "Gripper" y pegue lo siguiente:

from robodk import robolink

importar sys

 

si len(sys.argv) < 2:

    abandonar()

 

def get_item(ptr_item, RDK):

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

    si no item.Valid(True):

        devolver Ninguno

    devolver artículo

 

RDK = robolink.Robolink()

gripper_id = -1

valor_agarre = 0

prog_item = Ninguno

 

# Obtener el ID de la pinza, el valor y el llamante

si len(sys.argv) == 2:

    valor_agarre = float(sys.argv[1])

elif len(sys.argv) >= 4:

    gripper_id = int(sys.argv[1])

    valor_agarre = 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)

    si prog_item:

        valor_agarre = float(sys.argv[1])

    si no:

        gripper_id = int(sys.argv[1])

        valor_agarre = float(sys.argv[2])

 

# Obtener candidatos

pinzas = [x for x in RDK.ItemList(robolink.ITEM_TYPE_ROBOT_AXES) if 'pinza' in x.Name().lower() and len(x.Joints().tolist()) == 1].

si len(pinzas) > 1 y prog_item:

    robot_item = prog_item.getLink(robolink.ITEM_TYPE_ROBOT)

    if not robot_item.Valid():

        robot_item = RDK.ItemUserPick("Seleccione el robot vinculado", robolink.ITEM_TYPE_ROBOT)

        prog_item.setRobot(robot_item)

 

    def get_flat_childs(item):

        childs = item.Childs()

        para child en item.Childs():

            childs.extend(get_flat_childs(child))

        devolver childs

 

    childs = get_flat_childs(robot_item)

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

 

si no son pinzas:

    RDK.ShowMessage('¡No se puede encontrar una pinza!', False)

 

# Intente encontrar el id de pinza correcto (es decir, pinza dual 1)

pinza = pinzas[0]

si gripper_id > 0:

    gripper_ids = [g for g in pinzas if g.Nombre().endswith(str(gripper_id))]

    si gripper_ids:

        pinza = pinza_ids[0]

 

pinza.MoverJ([valor_pinza])

Tenga en cuenta que este método también es compatible con el postprocesador Brooks.