Ajuste Rápido del TCP en Robots ABB

Guía: Ajuste Rápido del TCP en Robots ABB para Dosificación y Mantenimiento

En las células robotizadas dedicadas al dosificado de pegamentos, siliconas o sellantes, la precisión del TCP (Tool Center Point) es un factor crítico de proceso. A diferencia de otras aplicaciones como el paletizado o la manipulación ligera, el cabezal de dosificación está expuesto de forma continuada a factores que alteran su geometría:
  • Paradas prolongadas y fin de semana: Curado o endurecimiento del producto en la punta de la boquilla.
  • Intervenciones de mantenimiento: Cambios frecuentes de boquilla o limpieza manual.
  • Pequeños impactos: Colisiones menores durante el ajuste o limpieza de la celda.
Depender del procedimiento tradicional de calibración de 4 o 6 puntos cada vez que se interviene en la boquilla paraliza la producción y genera dispersiones en la trayectoria. En este artículo explicamos un método alternativo de 1 punto con punta de referencia KM0, así como el ajuste dinámico de altura mediante la modificación del oframe.

1. El Desafío del Método Tradicional vs. Referenciado KM0

En nuestra anterior publicación "Guía: Definición y Calibrado del TCP en Robots ABB (IRC5)", vimos el método estándar de definición del TCP en ABB (4 puntos para posición y 6 puntos para posición y orientación). Aunque este procedimiento es indispensable durante la puesta en marcha inicial, no resulta práctico para el día a día en producción por las siguientes razones:
  1. Complejidad operativa: Requiere abordar la punta fija desde múltiples orientaciones extremas, un proceso lento y propenso a errores humanos si lo ejecuta un preparador u operario.
  2. Alteración inadvertida de la orientación: Al recalcular los cuaterniones de rotación en cada calibración de 4/6 puntos, se introducen pequeñas variaciones angulares que modifican el ataque de la boquilla sobre la pieza.

La Filosofía KM0 (Punto de Referencia Estático)

La solución planteada se basa en separar la estructura de trabajo en dos fases independientes:

Fase 1: El Referenciado Inicial (Labor del Integrador)

Todo se inicia con fijar un punto de referencia estático en la célula. Este punto debe ser independiente a cualquier zona móvil (cinta transportadora, mesas de apoyo, etc.). Lo ideal es utilizar una punta afilada metálica dispuesta en un pilar fijo.
Esta punta fija se debe referenciar con la punta de referencia maestra dispuesta en el robot. Para ello, ejecutamos una trayectoria de servicio que definirá nuestro "Kilómetro Cero" (KM0): Trayectoria de servicio / Referenciado / Definición de referencia KM0 Boquilla DS1 (Ej. Rutina Zm_DefWobj1pt_DS1).

Fase 2: Verificación y Corrección (Labor del Operario)

A continuación, entra en juego la rutina de verificación y corrección del TCP. Esta rutina confronta la boquilla de dosificado actual (tras un golpe o cambio) con la punta KM0 definida en el procedimiento anterior.
Esta es la rutina que puede y debe utilizar el operador o preparador cada vez que toque o cambie la boquilla de dosificado. Se ejecuta a través de: Trayectoria de servicio / Referenciado / Definición de referencia Herramienta Boquilla DS1 (Ej. Rutina Zm_DefTool_DS1). Este referenciado calcula automáticamente el desfase y ajusta la posición X, Y, Z de la boquilla del robot.

2. Implementación en Código RAPID (ABB)

A continuación se detalla la estructura del programa RAPID para integrar el menú de mantenimiento y las rutinas de calibración.

Declaración de Datos de Programa (PRG_MTV)

TASK PERS wobjdata wDS1:=[FALSE,TRUE,"",[[780.347012139,-667.881109167,909.012965338],[-0.000000391,1,-0.000000648,0.000000232]],[[0,0,0],[1,0,0,0]]];
!_____________________________ MENU DE REFERENCIAS___________________
VAR TrajMaint RepOut1ptDS1:=[4,"Zm_DefTool_DS1","outil Dosificado DS1","Tool.png","T_ROB1"];
!_____________________PUNTOS DE REFERENCIAS 1PT_____________________________
VAR TrajMaint RepObj1ptDS1:=[9,"Zm_DefWobj1pt_DS1","KM0 Dosificado DS1","Wobj.png","T_ROB1"];

Rutina 1: Definición de la Referencia KM0 (Zm_DefWobj1pt_DS1)

Esta rutina se ejecuta una sola vez durante la integración o tras un movimiento estructural de la punta física de referencia. Utiliza la instrucción CalcFrame1pt para calcular la posición del objeto de trabajo wDS1.uframe.
!===========================================
! Trayectoria de Referencia en 1 punto (KM0)
! OUTIL = outil tPreh1
!===========================================
PROC Zm_DefWobj1pt_DS1()
    ! Puntos de aproximación y posición teórica
    CONST robtarget p_App:=[[780.351,-667.875,1300],[0,1,0,0],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget pX1:=[[778.85,-692.91,908.40],[3.91413E-07,1,-6.47709E-07,2.32013E-07],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    
    ! Mensajes en pantalla de la FlexPendant
    Aff_Traj "Définition repere piece wPreh_KM0";
    AntiReboucle;
    
    ! Movimiento a punto seguro (Rebouclage)
    MoveJ p_reb_prg,V_moyen,Z_arret,Tool_defaut;
    
    ! Movimiento de aproximación
    MoveJ p_App,V_moyen,Z_moyen,tPreh1\WObj:=wobj0;
    MoveL RelTool(pX1,0,0,-50),V_moyen,Z_moyen,tPreh1\WObj:=wobj0;
    
    ! Movimiento al punto KM0
    MoveL pX1,V_moyen,Z_arret,tPreh1\WObj:=wobj0;
    
    UIMsgWrite "DEFINITION KMO DOSIFICADO PUNTO X1","Verifica el punto pX1, despues modifica posición si es necesario"\Icon:=iconInfo;
    Stop\NoRegain;
    
    ! Calcula el Wobj con un solo punto de referencia
    CalcFrame1pt wDS1.uframe,pX1;
    
    ! Retorno seguro
    UIMsgBox\Header:="RETORNO A REBOUCLAGE","Salida del robot a rebouclage" \Buttons:=btnOK\Icon:=iconWarning;
    MoveL RelTool(pX1,0,0,-50),V_moyen,Z_moyen,tPreh1\WObj:=wobj0;
    MoveJ p_App,V_moyen,Z_moyen,tPreh1\WObj:=wobj0;
    MoveJ p_reb_prg,V_moyen,Z_arret,Tool_defaut;
ENDPROC

Rutina 2: Verificación y Corrección Dinámica del TCP (Zm_DefTool_DS1)

Esta es la rutina de uso diario para el personal de producción. El robot se posiciona en la punta KM0. Si la boquilla se ha doblado o sustituido, el operario ajusta manualmente la posición con el joystick hasta hacer coincidir la boquilla con la punta KM0 y confirma en pantalla.
El programa calcula la diferencia de traslación mediante CRobT referenciado a tool0 y wDS1, actualizando las coordenadas de tPreh1.
!===========================================
! Trayectoria para definir TCP Dosificación
!===========================================
PROC Zm_DefTool_DS1()
    CONST robtarget p_App_deftool:=[[0.00,0.00,-350],[1,3.84604E-07,-2.27916E-07,-6.85458E-07],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget p_deftool1:=[[0.00,0.00,0.00],[1,1.23414E-14,-1.35525E-13,1.19209E-07],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    
    VAR tooldata temp_tool:= [TRUE,[[426.634,-54.4656,435.419],[0.707107,0,0,0.707107]],[31.6,[160.7,272.7,-67.5],[1,0,0,0],6.786,0.627,0.099]];
    VAR robtarget temp_pos:=[[53.0358,47.2656,25.1058],[1,-1.25078E-06,7.2529E-07,1.84568E-06],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    VAR btnres respuesta;
    
    Aff_Traj "Definición Altura Dosificado";
    AntiReboucle;
    
    MoveJ p_reb_prg,V_moyen,Z_arret,Tool_defaut;
    MoveL p_App_deftool,V_moyen,Z_large,tPreh1\WObj:=wDS1;
    MoveL Offs(p_deftool1,0,0,-50),v50,Z_arret,tPreh1\WObj:=wDS1;
    
    UIMsgWrite "Define la posición","Despues ejecuta el programa"\Icon:=iconInfo;
    Stop\NoRegain;
    
    UIMsgBox\Header:="GUARDAR POSICIÓN DE DOSIFICADO?","Pulsa SI para guardar la posición actual." \Buttons:=btnYesNo \Icon:=iconWarning \Result:=respuesta;
    
    IF respuesta=resYes THEN          
        ! Obtener la posición de tool0 con respecto al WObj KM0 (wDS1)
        temp_pos := CRobT(\Tool:=tool0 \WObj:=wDS1);
        
        ! Transformación de coordenadas al marco de la herramienta
        temp_tool.tframe.trans.x:= tool0.tframe.trans.x + temp_pos.trans.y;
        temp_tool.tframe.trans.y:= tool0.tframe.trans.y - temp_pos.trans.x;
        temp_tool.tframe.trans.z:= tool0.tframe.trans.z - temp_pos.trans.z;
        
        ! Asignación del nuevo TCP corregido
        tPreh1:=temp_tool;
    ENDIF
    
    ! Salida y retorno a punto seguro
    UIMsgBox\Header:="RETORNO A REBOUCLAGE","Salida del robot a rebouclage" \Buttons:=btnOK\Icon:=iconWarning;
    MoveL Offs(p_deftool1,0,0,-50),v50,Z_arret,tPreh1\WObj:=wDS1;
    MoveL p_App_deftool,V_Moyen,Z_arret,tPreh1\WObj:=wDS1;
    MoveJ p_reb_prg,V_moyen,Z_arret,Tool_defaut;
ENDPROC

3. Ventajas Clave de este Método en Entornos de Producción

  1. Geometría conocida: La orientacion y morfología básica del útil no varían, solo cambia la posición tridimensional de la punta (X, Y, Z).
  2. Sencillez de ejecución: El robot aborda la referencia siempre con orientación constante y perpendicular.
  3. Mantenimiento de la orientación: Al no retocar el cuaternión [q_1, q_2, q_3, q_4], se elimina la posibilidad de desorientar la herramienta por imprecisión al mover el joystick.
  4. Agilidad: El ajuste requiere menos de 2 minutos y permite reanudar el dosificado por el cordón exacto sin necesidad de retocar los puntos de la trayectoria programada.

Recuerda!!, este tipo de procedimientos se pueden desarrollar para aquellas herramientas definidas previamente por los procedimientos 4/6 puntos, ajustando el cálculo de reajuste de las coordenadas de las herramienta a la morfología real.

4. Ajuste de Altura de Dosificado mediante Offset en el oframe

Durante la producción, es habitual necesitar acercar o alejar la boquilla respecto a la pieza (para compensar viscosidades, tolerancia de chapas o variaciones del proveedor de adhesivo). En lugar de modificar el TCP o los puntos de la trayectoria, la mejor práctica en RAPID consiste en aplicar un offset en la cota Z del Object Frame (oframe).

Implementación del Offset en RAPID

Se definen variables numéricas independientes para cada variante de pieza:
VAR num OffsDJT22:= 0;
VAR num OffsDJT28:= 0;
En las rutinas de dosificado correspondientes, se asigna dinámicamente este valor al oframe:
PROC T_COLLE_CED_DJT22()
    ! Cálculo para aumentar o disminuir cota de altura de dosificado
    wST1.oframe.trans.Z:= OffsDJT22;
    ...
ENDPROC
PROC T_COLLE_CED_DJT28()
    ! Cálculo para aumentar o disminuir cota de altura de dosificado
    wST2.oframe.trans.Z:= OffsDJT28;
    ...
ENDPROC

Instrucciones para el Operario (Ajuste desde FlexPendant)

  1. Ir a Menú FlexPendant -> Datos de programa -> Tipo: num.
  2. Filtrar por el prefijo Offs.
  3. Seleccionar la variable deseada (ej. OffsDJT22) y pulsar Editar -> Cambiar Valor.
  4. Introducir el nuevo valor numérico en milímetros mediante el teclado en pantalla y confirmar con OK.

Comportamiento según la orientación del Objeto de Trabajo:

  • Si el eje Z del Objeto de Trabajo apunta HACIA ARRIBA:
    • Un valor positivo (+Z): Aleja la boquilla de la pieza.
    • Un valor negativo (-Z): Aproxima la boquilla a la pieza.
  • Si el eje Z del Objeto de Trabajo apunta HACIA ABAJO:
    • Un valor positivo (+Z): Aproxima la boquilla a la pieza.
    • Un valor negativo (-Z): Aleja la boquilla de la pieza.

5. Desglose Técnico: Estructura de wobjdata (uframe vs oframe)

Para entender por qué se actúa sobre el oframe y no sobre el uframe, es fundamental repasar la estructura del tipo de dato wobjdata en RAPID.
PERS wobjdata wobj0 := [ robhold, ufprog, ufmec, uframe, oframe ];
Ejemplo de declaración completa:
PERS wobjdata wST1 := [ FALSE, TRUE, "", [ [1200.5, -450.2, 850.0], [1, 0, 0, 0] ], [ [0, 0, 0], [1, 0, 0, 0] ] ];

Campos de la Estructura wobjdata:

Parámetro Tipo de Dato Descripción
robhold bool Define si el robot sostiene el objeto:

TRUE: El robot sostiene el objeto de trabajo, es decir, se está utilizando una herramienta estacionaria.

FALSE: El robot no está sosteniendo el objeto de trabajo, es decir, el robot está sosteniendo la herramienta.

ufprog bool TRUE: Sistema de coordenadas de usuario fijo.
FALSE: Sistema móvil (coordinado con ejes externos o MultiMove).
ufmec string Nombre de la unidad mecánica externa coordinada (ej. "ORBIT_A"). Válido si ufprog es FALSE.
uframe pose User Frame: Define la posición [x, y, z] y rotación [q_1, q_2, q_3, q_4] de la estación/mesa física respecto al origen MUNDO del robot.
oframe pose Object Frame: Define la posición [x, y, z] y rotación [q_1, q_2, q_3, q_4] de la pieza específica respecto al uframe.

¿Por qué modificar el oframe y NO el uframe?

Ambos marcos de coordenadas se combinan para crear la posición final del Objeto de Trabajo (wobjdata), pero tienen propósitos radicalmente distintos:
  1. User Frame (uframe): Representa el soporte físico permanente (la mesa, bancada o riel). Se calibra mediante 3 puntos en la puesta en marcha inicial y rara vez debe modificarse, salvo que se desplace físicamente la estructura en la planta.
  2. Object Frame (oframe): Representa el sistema de coordenadas propio de la pieza. Está diseñado específicamente para correcciones dinámicas, desviaciones de fabricación, ajustes por visión artificial o correcciones finas de cota como el offset de dosificado.
Al actuar sobre oframe.trans.Z, mantenemos la calibración física de la celda (uframe) intacta y segura, aplicando correcciones de proceso aisladas, reversibles y fáciles de auditar.

Conclusión

Implementar un procedimiento de calibración KM0 en 1 punto combinado con offsets dinámicos en el oframe transforma la gestión de celdas de dosificación. Permite a los operarios de planta solucionar desviaciones geométricas tras paradas o intercambios de boquillas en cuestión de minutos, garantizando la repetibilidad del proceso y evitando la pérdida de horas en programación offline o calibraciones complejas de 4 puntos.
💬 ¡Queremos conocer tu experiencia!
  • ¿Has implementado alguna vez un método para realizar la calibración del TCP de la herramienta?
  • ¿Cómo ha sido la experiencia?

Deja tu comentario abajo contando tus trucos o dudas al referenciar herramientas. ¡No olvides suscribirte a OneDoor para no perderte las próximas guías técnicas sobre robótica industrial y automatización!

Publicar un comentario

0Comentarios

Publicar un comentario (0)