PROGRAMACIÓN PROGRAMACIÓN ROBOTS CRS
RAPL-3
PROGRAMACIÓN PROGRAMACIÓN ROBOTS CRS
INDICE
1) Introducción.
4
2) Controlador.
6
3) Botones de emergencia
7
4) Control de una sola Persona.
7
5) Iniciar el Sistema.
7
6) Apagar el Sistema.
8
7) Programador Manual (Teach pendant).
8
8) Características del Teach Pendant.
8
9) Cambio de Control.
11
10) Mover el Robot.
12
11) Sistema de Coordenadas.
12
12) Home.
15
13) Enseñar Posiciones.
16
14) Crear una Aplicación.
16
15) Edición de un Programa.
17
16) Cambio de Posiciones con el Teach.
21
17) Cambio de Posiciones desde la Computadora.
22
18) Tipos de variables.
22
19) Matriz.
22
2
PROGRAMACIÓN PROGRAMACIÓN ROBOTS CRS
INDICE
1) Introducción.
4
2) Controlador.
6
3) Botones de emergencia
7
4) Control de una sola Persona.
7
5) Iniciar el Sistema.
7
6) Apagar el Sistema.
8
7) Programador Manual (Teach pendant).
8
8) Características del Teach Pendant.
8
9) Cambio de Control.
11
10) Mover el Robot.
12
11) Sistema de Coordenadas.
12
12) Home.
15
13) Enseñar Posiciones.
16
14) Crear una Aplicación.
16
15) Edición de un Programa.
17
16) Cambio de Posiciones con el Teach.
21
17) Cambio de Posiciones desde la Computadora.
22
18) Tipos de variables.
22
19) Matriz.
22
2
PROGRAMACIÓN PROGRAMACIÓN ROBOTS CRS
20) Creación de nuevas Variables.
23
21) Asignación de Valores a Variables.
23
22) Control de Flujo.
24
23) Puerto de Entradas y Salidas de Propósito General (GPIO).
26
24) Subrutinas y Funciones.
27
25) Subprogramas utilizados más frecuentes.
28
26) Programas.
31
27) Referencia
50
3
PROGRAMACIÓN PROGRAMACIÓN ROBOTS CRS
INTRODUCCIÓN. La marca CRS cuenta con cuatro modelos diferentes de robots con características diferentes para cubrir necesidades específicas. Los modelos son los siguientes: •
CataLyst 3.
•
CataLyst 5.
• A 465. •
F 3.
Las características de los cuatro modelos de robots son los siguientes:
CataLyst 5.
Grados de libertad : 5 Carga Nominal : 1 kg. Alcance : 660 mm. Repetibilidad : ± 0.05 mm
Eje
Rango
Velocidad
Aceleración
Troqué
1 2 3 4 5
± 180 ° 0° a +110° -125° a 0° ± 110° ± 180°
210 °/s 210 °/s 210 °/s 551 °/s 1102 °/s
500 °/s² 500 °/s² 500 °/s² 1836 °/s² 3673 °/s²
9.6 N m 9.6 N m 9.6 N m 3.4 N m 1.7 N m
4
PROGRAMACIÓN PROGRAMACIÓN ROBOTS CRS A 465.
Grados de libertad : 6 Carga Nominal : 2 kg. Alcance : 710 mm. Repetibilidad : ± 0.05 mm
Eje Rango
Velocidad
Aceleración
Troqué
1 2 3 4 5 6
180 °/s 180 °/s 180 °/s 171 °/s 173 °/s 171 °/s
720 °/s² 720 °/s² 720 °/s² 1430 °/s² 1430 °/s² 1430 °/s²
39.5 N m 39.5 N m 39.5 N m 6.9 N m 6.9 N m 2.9 N m
± 175 ° ±90° ±110° ± 180° ± 105° ± 180°
F3. Grados de libertad : 6 Carga Nominal : 3 kg. Alcance : 710 mm. Repetibilidad : ± 0.05 mm
Eje
Rango
Velocidad
Aceleración
Troqué
1 2 3 4 5 6
± 180° -135 a +45° ±135° ± 180° ± 135° ± 4096 vueltas
240 °/s 240 °/s 240 °/s 375 °/s 300 °/s 375 °/s
879 °/s² 879 °/s² 879 °/s² 1098 °/s² 1098 °/s² 1098 °/s²
74.5 N m 74.5 N m 74.5 N m 16.6 N m 16.6 N m 16.6 N m
5
PROGRAMACIÓN ROBOTS CRS Estos cuatro modelos de robots cuentan para su control con el Controlador C500C, el cual tiene la capacidad de manipular cualquiera de los robots. No por ello quiere decir, que si se cuenta con varios robots y controladores estos se pueden intercambiar. Esto es debido a que cada controlador dependiendo del brazo que se seleccione, cuenta con una configuración interna diferente, así como su calibración personalizada. El controlador se muestra en la siguiente imagen:
Dentro del sistema mínimo necesario para que el sistema se encuentre operando es indispensable tener lo siguiente: •
Brazo.
•
Controlador.
•
Cables Umbilicales.
•
Software.
Los cables umbilicales son los que comunican tanto la alimentación eléctrica al robot así como la retroalimentación del mismo para su adecuado funcionamiento. De igual forma existen otros componentes adicionales al sistema como lo son el Teach Pendant y el Modulo de Entradas y salidas de Propósito General (GPIO).
6
PROGRAMACIÓN ROBOTS CRS
BOTONES DE EMERGENCIA. Cuando se oprime un botón de emergencia, se aplican los frenos a todos los ejes, desacelera, deshabilita la alimentación del robot. Para volver a habilitar, se restablece el botón de emergencia, se alimenta al robot (es necesario liberar el botón de emergencia, para poder alimentar al robot). Además el teach cuanta con un interruptor (switch live man) para poder mover el robot, este debe estar oprimido durante el movimiento del robot. Requisito internacional de seguridad. El botón de emergencia se muestra en la siguiente imagen:
CONTROL DE UNA SOLA PERSONA. Solo puede ser movido por una persona, ya sea por medio del teach o por la computadora.
INICIAR EL SISTEMA. Encender interruptor del controlador, esperar mensaje en display C500C CROS, comprobar que los botes de emergencia estén libres y oprimir ARM POWER (alimentación del robot).
7
PROGRAMACIÓN ROBOTS CRS
APAGAR EL SISTEMA. Desde el controlador. Mantener oprimido Home, oprimir después pause / continue soltar pause / continue y finalmente soltar home, y esperar el mensaje en display de cristal liquido “system halted”, ahora si apagar el interruptor del controlador.
Desde la ventana terminal. Escribir en el prompt “shutdown now” , y esperar por el mensaje en el display de cristal liquido “system halted”, hasta que aparezca el mensaje se debe apagar el interruptor del controlador
PROGRAMADOR MANUAL (TEACH PENDANT). El programador manual es una herramienta para mover el robot, enseñar posiciones, crear variables y correr programas. Una vez que la aplicación ya esta iniciada, por medio de variables aprendidas (teachables) es posible guardar posiciones, iniciar variables, etc.
CARACTERÍSTICAS FÍSICAS MANUAL (TEACH PENDANT).
DEL
PROGRAMADOR
• Teclado • Interruptor de seguridad • Paro de emergencia • Pantalla • Sonidos
Teclado. Muchas de las teclas son multifunciones, dependiendo de la aplicación es la función que realizan.
8
PROGRAMACIÓN ROBOTS CRS
Teclas de función. Cada menú tiene una tecla de función, estas teclas son asignadas en la parte baja de la pantalla. F1 a F4.
Teclas de ejes. Se emplean para mover el robot. La respuesta del eje a mover depende del modo y sistema de movimiento empleado. Flechas en verde parte izquierda.
Teclas de movimiento. Tienen una función especifica. Teclas con un cuadro de color verde parte superior derecha del programador.
TECLA
FUNCIÓN
GRIP HOME
Abrir o cerrar gripper Mover cada eje al punto de Referencia Ir a posición ready Liberar ejes del robot Mantener en la posición ejes Ir a la posición seleccionada Incrementar velocidad Disminuir velocidad
READY LIMP ALL NOLIMP ALL MOVE SPEED UP SPEED DOWN
Teclas de matriz. Se emplean en matrices para seleccionar la variable. Teclas con un cuadro amarillo parte derecha del programador.
TECLA
FUNCIÓN
FIRST LAST TYPE UP DOWN
Seleccionar el primer elemento Seleccionar el ultimo elemento No usado Incrementar índice Decrementar índice
9
PROGRAMACIÓN ROBOTS CRS
Teclas de entrada de datos. Cada tecla de eje (flechas verdes), de movimiento (cuadro verde) y de matriz (cuadro amarillo) también cuentan con letras o números. Estas teclas representan.
TECLA
FUNCIÓN
Letras
Se usan para crear una variable, Seguridad. Y para búsqueda de variables o aplicaciones Seleccionar un determinado índice de matriz, O crear una variable y especificar el tamaño Se usa junto con F1 para mostrar una bitácora de errores
Números SHIFT
Interruptor de Seguridad (live-man switch). El interruptor de seguridad del programador manual (cuenta con tres posiciones. Cuando se oprime ligeramente, esta en habilitando el movimiento. Mientras que si se presiona fuertemente o se suelta esta deshabilitando el movimiento. Si se quitar la condición de habilitar durante este movimiento provoca la interrupción de alimentación del brazo y por esto el brazo se para súbitamente.
Botón de emergencia. Por razones de seguridad interrumpe la alimentación del robot.
Pantalla. Los diferentes menús son mostrados por medio de la pantalla. Por medio de las teclas de función se puede acceder. Por medio de la tecla ESC se va al menú anterior
10
PROGRAMACIÓN ROBOTS CRS
Sonidos. El programador manual esta equipado con una pequeña bocina que es capaz de producir un sonido, estos sonidos tienen un significado
SONIDO
EVENTO
EJEMPLO
Corto y grave
Una tecla valida a sido Oprimida Una tecla no valida a sido oprimida Se ha inicializado una acción y necesita confirmación Error
Desde el menú Aplicación oprimir F1 Desde el menú Aplicación oprimir move Desde el menú manual Oprimir Home Desde el menú manual Oprimir Home estando apagado el robot
Corto y agudo Tres cortos y agudos Largo y agudo
CAMBIO DE CONTROL. Del teach a la computadora. Para cambiar el control de teach a la computadora se debe oprimir ESC hasta que sale el mensaje “Terminate pendant and release robot control”, y oprimir F1 para enviar el control a la computadora. En el teach debe aparecer un mensaje “Pendant Off”.
De la computadora al teach. Para cambiar el control de la computadora al teach dentro del programa Robcomm 3 y abierta la ventana terminal, escribir “pendant”, envía el control al teach.
11
PROGRAMACIÓN ROBOTS CRS
MOVER EL ROBOT. Para mover el robot, es necesario especificar el tipo de movimiento y el sistema de coordenadas. Entre los tipos de movimiento tenemos el jog , se desplaza una cantidad especificada cada vez que oprimimos una tecla, según sea el sistema, se desplaza grados o distancia. Y mover cada eje en forma continua.
SISTEMAS DE COORDENADAS. Existen 4 sistemas de coordenadas, si no se va a home esta limitado a una velocidad del 10% y un sistema de eje. 1. 2. 3. 4.
Eje (joint) Sistema cartesiano Sistema cilíndrico Sistema herramienta
Sistema de coordenadas por Eje (joint). Se mueve cada eje en forma independiente. Cuando no se ha enviado a home es el único sistema que se puede acceder, con una velocidad máxima de 10% antes de enviar a home, desde la ventana terminar, escribir el eje a mover y la distancia “joint 1,5”, o por medio del teach, seleccionar el tipo de movimiento, el sistema joint F3 y F4 respectivamente y la velocidad. La numeración de los ejes va de la base hasta el efector final.
12
PROGRAMACIÓN ROBOTS CRS
Sistema cartesiano (world). Toma como origen el centro de la base del robot.
COORDENADA TECLA DESCRIPCIÓN Eje x Eje y Eje x Rotación Z Rotación Y Rotación X
1 2 3 4 5 6
Mover efector final adelante – atrás Mover efector final derecha – izquierda Mover efector final arriba - abajo Rotar el efector final en base al eje Z Rotar el efector final en base al eje Y Rotar el efector final en base al eje X
Desde la ventana de la terminal escribir el eje a mover y la distancia, “wx 5” , “wy 10” , etc.
13
PROGRAMACIÓN ROBOTS CRS
Sistema cilíndrico. COORDENAD TECLA EJE DESCRIPCIÓN θ (theta) Radio R
1 2
Altura
3
Cil.- Yaw Cil-Pitch Cil-Roll.
4 5 6
mover la base del robot Extender o contraer efector final horizontalmente a lo largo del vector Mover verticalmente hacia arriba o abajo el efector final Rotar el efector final en base al eje vertical Rotar efector final arriba o abajo Rotar efector final en base a la línea horizontal formada e efector final y el robot.
Este sistema solo puede ser usado desde el programador manual (teach pendant).
14
PROGRAMACIÓN ROBOTS CRS
Sistema de coordenadas herramienta. Este sistema toma como referencia el efector final, gripper, se tiene que especificar el origen del efector final (TCP-Tool Center Point). En base al efector final Eje X adelante – atrás Eje Y derecha – izquierda Eje Z abajo – arriba Desde la ventana terminal tx distancia , ty distancia , etc
MANDAR A HOME. Cuando se inicia el robot es necesario mandar a home, como los encoders son increméntales se deben poner a cero en una posición ya especificada.
Mandar a home en forma manual. Existen marcas dentro de cada eje, deben estar los ejes sobre esa marca para poder enviar a home, cuando ya están en la marca desde el teach. Dentro del menú movimiento, oprimir F1 para que se vaya a home mantener oprimido el interruptor de seguridad, hasta que termine el movimiento. Desde la terminal, escribir en el prompt “home”.
15
PROGRAMACIÓN ROBOTS CRS
ENSEÑAR POSICIONES. Para enseñar una posición debe existir una variable donde guardar la posición,
Desde el teach. 1. 2. 3. 4. 5. 6. 7.
Comando tch F1 (var) Nombre de la variable make, type y dim (especificar el tipo, y la dimensión de la variable) Ir a posición a guardar Oprimir F1 (tch) Si se desean más variables seguir paso 1
Desde la terminal. Es necesario estar en una aplicación par poder lograrlo. Dentro de la aplicación se mueve el brazo y se guarda la posición. Con el comando “here nom ” donde nom es el nombre de la variable.
CREAR UNA APLICACIÓN Dentro de Robocomm3 1. Seleccionar el puerto de comunicación y la velocidad de transmisión / recepción 2. Crear un nuevo documento (Editor de texto) 3. Crear una aplicación(archivo a enviar al controlador) Cada programa debe tener un main y un end main, es la parte del programa que ejecuta el controlador siempre.
16
PROGRAMACIÓN ROBOTS CRS
EDICIÓN DE UN PROGRAMA. Para realizar un programa es necesario seguir los pasos que a continuación se enumeran: 1) Abrir el Robcomm3.
2) Crear una Aplicación. En el menu Application, seleccionar New Application.
17
PROGRAMACIÓN ROBOTS CRS
En ese momento aparecerá un cuadro de mensaje en donde pedirá el nombre de la aplicación que se desea generar.
Nota: Evitar borrar la extensión app.. Una vez que se ha realizado la aplicación, si se desea se puede verificar la creación de los archivos que componen la aplicación, esto se hace en el menu Application en su opción Setup, como de muestra a continuación.
18
PROGRAMACIÓN ROBOTS CRS
3) Ingresar el Programa. En esta parte es donde se va a capturar todo el código del programa que será ejecutado por el robot cuando esta sea terminada. Para ingresar al editor de programas del RAPL – 3 en el menú Archivo seleccionamos New y en la pantalla que aparece será donde vamos a capturar el código.
4) Compilar el programa. Para compilar el programa es necesario seleccionar el icono de compilación. Al seleccionar este icono nos va a mandar un cuadro de diálogo si existen errores o si el programa se encuentra correctamente creado manda otro mensaje.
5) Enviar el Programa.
19
PROGRAMACIÓN ROBOTS CRS Al enviar el programa lo que estamos realizando es enviar el código hacia el controlador. Para esto es indispensable que la configuración del puerto por la cual nos estamos comunicando con el controlador sea el correcto y la velocidad se encuentre a 57600 bauds. Para enviar el programa será necesario seleccionar la opción de los iconos del menú.
Una vez que se haya finalizado este paso, el programa y la aplicación ya se encuentran cargados en el controlador. Para manipular esta aplicación desde la PC es necesario abrir la Terminal, esta es una pantalla negra en donde ingresaremos el comando ash después del prompt $ y aparecerán los nombres de las aplicaciones existentes en el controlador. La pantalla se muestra en las siguiente imagen.
Desde aquí será posible enseñar variables, ejecutar los programas y mover el robot de forma manual.
20
PROGRAMACIÓN ROBOTS CRS
Ejemplo main teachable cloc a,b move(a) move(b) ready() end main
;;declarar variables ;;moverse a posicion a ;;moverse a posicion b ;;ir a posicion ready ;;termina el programa
Para poder enviarlo al controlador es necesario compilarlo, (cambia de lenguaje), y posteriormente si no existe algún error enviarlo a controlador. Para correr el programa desde el teach seleccionar la aplicación y oprimir F2 para que corra, antes de que se mueva el brazo se debe oprimir pause / continue, como seguridad, se debe verificar que no exista algo dentro del área de trabajo del robot que le impida realizar sus movimientos o una persona dentro del área. Para correr el programa desde la computadora, dentro de Robocomm 3 y en la termina seleccionar la aplicación escribir “ash” (stands for applications shell) e indica cuales aplicaciones tenemos, escribir el nombre de nuestra aplicación y finalmente escribir “run”. También se debe oprimir pause / continue, como seguridad, se debe verificar que no existe algo dentro del área de trabajo del robot, para terminar el programa, si se quedo en un ciclo oprimir CTRL. + Z para interrumpir el programa.
CAMBIO DE POSICIONES CON EL TEACH. Comprobar que este el control en el teach. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Seleccionar aplicación Escoger editar F1 Escoger variable F1 Seleccionar variable a editar Seleccionar variable F1 Moverse a la nueva posición Guardar posición (tch F1) Confirmar que se desea guardar la variable (F1) Oprimir ESC para regresar al menú anterior Si se desea modificar mas variables seguir paso de 3 al 9
21
PROGRAMACIÓN ROBOTS CRS
CAMBIO DE POSICIONES DESDE LA COMPUTADORA. Comprobar que este en la Aplicación correcta, (ventana terminal) ir a nueva posición, escribir “here variable ”, y continuar cambiando posiciones si se desea cambiar más posiciones.
TIPOS DE VARIABLE. SÍMBOLO PREFIJO Int float string cloc ploc
Ninguno % $ _ #
TIPO Entero Fracción Cadena Posición cartesiana Posición de precisión
Todas estas variables su valor puede ser asignado desde el teach (teachable), es útil como contadores, enviar mensajes y posiciones.
MATRIZ. También existe la posibilidad de crear matrices multidimensionales, el único problema es que no pueden ser teachable las matrices de dos dimensiones si son de tipo cadena, y mayor de tres dimensiones ninguna variable puede se teachable.
22
PROGRAMACIÓN ROBOTS CRS
CREACIÓN DE NUEVAS VARIABLES. Desde el teach. Asegurarse que esta en la aplicación, correcta. 1. 2. 3. 4. 5.
F1 (var) Nombre de la variable type (F2) y dim (F3) especificar el tipo, y tamaño de la variable crear variable (F1) Si se desean más variables seguir paso 1 al 5
Desde le ventana terminal. Asegurarse que esta en la aplicación correcta. 1. new prefijo nombre ; emplear el prefijo de la variable.
ASIGNACIÓN DE VALORES DE VARIABLES TEACHABLES. Desde el teach. 1. 2. 3. 4. 5. 6.
Seleccionar aplicación. Seleccionar editar F1. Seleccionar var F1. Desplazarse con F3 o F4 hasta encontrar variable. Asignar valor. ESC para regresar a menú anterior. Se desean modificar mas variables ir a paso 4.
7. Desde la computadora.
Asegurarse que esta en la aplicación correcta. En el prompt de la ventana terminal escribir Set = nombre = valor Nombre = nombre de la variable Valor = valor de la variable
23
PROGRAMACIÓN ROBOTS CRS
CONTROL DE FLUJO. 1. 2. 3. 4. 5. 6. 7. 8.
BREAK LOOP CASE WHILE FOR DO IF GOTO
BREAK Salir de un ciclo, loop, while, do, for, do, if
LOOP Hacer un ciclo Ejemplo loop move (a) move(b) end loop
CASE Hacer varias comparaciones. Según la comparación es lo que realiza. Ejemplo int contado case contado of 0: move(a) of 2,3,5: move (b) of 6 to 30: ready() end case
;;comprobar estado de contador ;;si es igual cero ;;muévete a posición a ;;si es igual 2 , 3 o 5 ;;muévete a posición b ;;si esta dentro del rango 6 a 30 ;;ve a ready
24
PROGRAMACIÓN ROBOTS CRS
WHILE Hacer un ciclo mientras la sentencia sea verdadera Ejemplo While (contador < 5] move(a) move(b) contador = contador + 1 end while
;;mientras que el contador sea menor a 5 ;;ir a posición a ;;ir a posición b ;;incrementar contador
FOR Realizar un ciclo un determinado numero de veces, Ejemplo For x= 1 to 10 Move posicion(x) End for
;;sentencia inicio y final ;;ciclo a realizar
DO Hacer un ciclo, pero prueba la condición hasta el final, en el caso de while la prueba antes de empezar, al menos se realiza una vez. do move(a) move(b) contador = contador + 1 until contado > 5
;;ir a posición a ;;ir a posición b ;;incrementar contador ;;hasta que el contador mayor a 5
IF Si es cierta la condición se realiza el ciclo, para salir por medio de un break a un goto (ir a una lugar especificado por una etiqueta)
25
PROGRAMACIÓN ROBOTS CRS if (contador < 5] move(a) move(b) else if (contado >5) move(b) move(a) end if
;;si en contador es menor a 5 ;;ir a posición a ;;ir a posición b ;;si en con ;;ir a posición b ;;ir a posición c
GOTO Ir a una etiqueta.
PUERTO DE ENTRADA / SALIDA DE PROPÓSITO GENERAL (GPIO). Con su nombre lo indica es un puerto de entradas / salidas el cual cuanta con : • 16 entrada opto aisladas, NPN • 12 salidas opto aisladas NPN • 4 salidas a relevador, con salida normalmente abierta y salida normalmente cerrada, conectadas a línea común • Una entrada analógica de 0 a 5 volts
Fuente externa. Soporta una fuente de voltaje de 20 a 28 VCD. Se tiene opto aisladas las entradas.
Fuente Interna. No se tiene las entradas opto aisladas. La fuente interna es 24 VCD.
Consideraciones. No soporta una diferencia de 50 volts CD Las salidas y las entradas no deben exceden de 1 A en todo el puerto si se emplea la fuente interna Las salidas a relevador no deben exceder 2 A 30 VCD, no soportan corriente alterna.
26
PROGRAMACIÓN ROBOTS CRS
PARA LEER UNA ENTRADA. input (int canal) ; canal numero de entrada
PARA HABILITAR LAS SALIDAS. output_set(int canal, int estado)
SUBRUTINAS Y FUNCIONES. Subrutinas. Una subrutina es un subprograma el cual puede tomar cualquier numero de argumentos (inclusive ninguno), no regresa ningún valor al programa principal. Se emplea cuando se repiten varios comandos y se quiere ahorrar espacio. Para no estar escribiendo cada vez, Formato para crear una subrutina. sub sub_indicador (parámetros) declaración
end sub Formato para llamar una subrutina. Identificador_sub (parámetro) El tipo de parámetro debe coincidir con el especificado en la declaración de la subrutina, (un error común) también deben coincidir el numero de parámetro.
Funciones. Una función es similar a una subrutina, solo que las funciones regresar un valor al programa principal, este puede ser int, flota, ploc, cloc o incluso un apuntador para una cadena, ya que no puede regresar una cadena. Formato func tipo identificador_func (parámetros)
27
PROGRAMACIÓN ROBOTS CRS declaraciones
return end func
Al menos debe de contar con un return ya que indica que valor se envia al programa.
Formato para llamar una función. Existen dos formas de llamar una función. • •
Como parte de una expresión Por ella misma como una condición
SUBPROGRAMAS UTILIZADOS MAS FRECUENTEMENTE. Para ver todos los subprogramas se recomienda ver el archivo RAPL –3 Language Reference Guide.pdf ya que aquí solo se muestran algunos. Se agruparon según la tarea que realizan. • • • • • • • •
Entrada analógica Calibración Entradas y salidas digitales Panel frontal Gripper Home Posición Movimiento
ENTRADAS ANALÓGICAS. analogs_get
Regresa en valor de las ocho entradas analógicas al controlador C500C
boardtemp_get
Regresa la temperatura en grados centígrados de la tarjeta del controlador C500C
28
PROGRAMACIÓN ROBOTS CRS
CALIBRACIÓN. calrdy motor pos_get pos_set ready
Mover robot a posición de calibración Rotar en motor un especifico numero de pulsos Obtener posición del robot Poner posición del robot Mover el robot a posición ready
ENTRADAS Y SALIDAS DIGITALES. input inputs output_get output_pulse output outputs_set
Regresa el estado de una entrada Regresa un mapa estado de las entradas digitales Regresa estado de una salida Poner la salida en un estado, espera y cambia de estado Poner el estado de una salida Poner estados en salidas
PANEL FRONTAL. Existen cinco botones de los cuales por medio del RAPL-3 se pueden programar. Los botones no tienen interruptores para estar en ON u OFF. Cuando se oprime el botón mientras se oprime se mantiene ON y cuando se suelta regresa a OFF. Los botones se encuentran etiquetados como sigue onbutton panel_button panel_button_wait panel_buttons panel_light_get panel_light_set panel_lights_get panel_lights_set
Espera por un botón que sea oprimido Regresa cierto si un botón es oprimido Espera por un botón en particular Regresa el estado de los botones Obtiene estado de una luz Pone el estado de una luz particular Obtiene estado de las luces Poner estado de las luces
Los botones están numerado como sigue
29
PROGRAMACIÓN ROBOTS CRS
F1 F2 Pause continue Home
=1 =2 =4 =8
GRIPPER. grip grip_close grip_finish grip_open
Mover el los dedos del gripper una distancia Cerrar gripper Mantener en espera el programa hasta que el gripper termine su movimiento Abrir gripper
HOME. Home
Especificar el home de ejes
POSICIÓN. here
Guardar posición
MOVIMIENTO. appro appros calrdy depart departs finish halt
Aproximarse a un punto, no forzar movimiento en línea recta Aproximarse a un punto, forzar movimiento en línea recta Ir a posición de calibración Alejarse dela posición Alejarse dela posición en línea recta Esperar hasta que no exista movimiento. Para movimiento del robot 30
PROGRAMACIÓN ROBOTS CRS wx,wy,wz zrot, yrot, xrot wxs,wys,wzs zrots, yrots, xrots joint limp lock move moves nolimp ready speed unlock
Mover el robot en sistema cartesiano Mover el robot en sistema cartesiano, forzar en línea recta Mover un eslabon Quitar energía a motores Asegurar un eje Ir a una posición Ir a una posición en línea recta Energizar motores después de un limp Ir a posición ready Velocidad Liberar eje después de lock
PROGRAMAS. Se muestran algunos programas, con la finalidad de ir adquiriendo la habilidad con programador manual para mover el robot, los diferentes tipos de movimiento, tipos de variables, puerto de entrada salida de propósito general, panel frontal, etc. Se trato de cubrir todos los aspectos del controlador hasta se realiza un programa para ejemplificar un proceso de multitarea, muy útil en proceso de control. En total son ocho los programas pero se pueden modificar, según las necesidades. Algunos que cuentan con diagrama de flujo, solo cuando intervienen en control de flujo en los otros casos no considere poner ya que el programa se realiza en forma lineal sin verificar alguna condición. Solo un caso especial de multitarea. Y el ultimo programas mas que nada se ejemplifica como utilizar los subprogramas incluidos en el controlador par monitorear el estado del robot. 1. Realizar un programa que haga una secuencia de cuatro puntos main teachable ploc a,b,c,d aqui:: speed(30) ready() move(a) move(b) move(c) delay(500) move(d) goto aqui
31
PROGRAMACIÓN ROBOTS CRS end main
32
PROGRAMACIÓN ROBOTS CRS
2. Realizar una secuencia de cuatro puntos, además por medio de una variable dada por el teach realizar un ciclo inicio Variables
Contador = 0
Hasta que Contador > Numero
Posiciones
main teachable cloc a,b,c teachable ploc d teachable int i int j for j=0 to i speed(40) ready () printf("Ir a posicion ready\n") move (a) printf("ir a punto a\n") moves (b) printf("ir a punto b\n") move (c) printf("ir a punto c\n") move (d) printf("ir a punto d\n") printf("numero de veces {} \n",j) end for
;;inicio del programa ;;condicion ;;velocidad ;;ir a posicion ready ;;moverse a punto a
end main
33
PROGRAMACIÓN ROBOTS CRS 3. Realiza una secuencia, que se aproxime a ciertos puntos, llegue al punto, se aleje, hacer esto bajando la velocidad. inicio
Variables
Establecer índice
no
Dentro de índice
Fin del programa
si Posición de a roximación
no
si Disminuir velocidad
Ir a posición
Acercarse a posición
Ir a posición
Alejarse Incrementar índice
34
PROGRAMACIÓN ROBOTS CRS main
end
teachable cloc [6] a ;;numero de posiciones teachable int max, aprox, punto int i, contador ;;contador y auxiliar ;;establecer valor del contador contador = 0 loop ;;ciclo ;;establecer valor de índice i=0 speed(max) ;;velocidad do if (i == 1) or (i == 3) or (i==5) then ;;cuando sea igual alguno ;;bajar la velocidad speed(aprox) printf("aproximarse a[{}]\n",i) appros(a[i],30) ;;aproximarse en linea recta printf("moverse a[{}]\n",i) ;;disminuir la velocidad speed(punto) move (a[i]) ;;ir al punto ;;esperar que llegue finish() delay(1000) ;;demora printf("alejarse a[{}]\n",i) depart(30) ;;separarse del punto i=i-1 speed(max) ;;aumentar velocidad printf("moverse a[{}]\n",i) move (a[i]) ;; ir una posicion anterior finish() i=i+1 ;;recuperar contador printf(" i = {}\n",i) else ;;ir a puntos de acercamiento speed(max) printf("Moverse a mas [{}]\n",i) move (a[i]) end if i= i +1 ;;incrementar contador until i > 5 ready() ;;ir a posicion ready finish() contador = contador +1 ;;incrementar contador printf("fin secuencia N= {}\n",contador) ;;mensaje end loop main
35
PROGRAMACIÓN ROBOTS CRS 4. Realizar una secuencia de puntos designados por una matriz de una dimensión, además que cuente con un botón de inicio conectado al GPIO inicio
Variables
no
Botón de inicio
si Numero de veces
Contador de filas
Contador de columnas
Ir a posición [i,j]
Incrementar fila
no
si Dentro de limite
36
PROGRAMACIÓN ROBOTS CRS main int i,j ;;contador teachable cloc [5]a ;;variables matriz teachable cloc [2]b teachable int k,l ;;variable numero de ciclos después (k) ;;aca:: ;;numero de ciclos a realizar (l) printf("\n BOTON \n") ;;mensaje ;;demora delay(500) while input(1) == 0 ;;espera hasta que se oprime botón delay(200) printf("\n OPRIMIR BOTON \n") end while ready() ;;ir a posicion ready printf ("\n Ciclos a realizar {} \n",l) printf ("\n numero de ciclos despues {}\n",k) for j=1 to l speed(20) ;;establecer velocidad if (j == k) printf("Condicion si\n") for i=0 to 1 printf("aproximarse al punto b[{}]\n",i) appro(b[i],80) finish() printf("moverse al punto b[{}]\n",i) move(b[i]) finish() printf("alejarse del punto b[{}]\n",i) depart(80) finish() end for end if i=0 printf("move, ciclo = {}\n",j) ;;comentario while i < 5 ;;ciclo move (a[i]) ;;mover a posicion finish() ;;detener hasta que termine el movimiento printf("lugar a[{}]\n",i) ;;mostrar lugar visitado i = 1+i ;;incrementar contador end while speed(60) ;; fin del ciclo delay(900) ;;demora en milisegundos ready () ;;ir a posicion ready ;;mensaje printf("Fin del ciclo move\n") speed(10) printf("moves, ciclo = {}\n",j)
37
PROGRAMACIÓN ROBOTS CRS for i=0 to 4 moves (a[i]) finish() printf("lugar a[{}]\n",i) end for speed(60) delay(900) ready () printf("fin del ciclo moves\n")
;;ciclo for ;;mover ;;indicar posicion visitada ;;demora en milisegundos ;;ir a posicion ready
end for printf("\n FIN DEL PROGRAMA\n") end main
38
PROGRAMACIÓN ROBOTS CRS 5. Secuencia empleando una matriz de dos dimensiones, emplear el GPIO y los botones del panel frontal que son programables (F1 y F2) indicando que botones se deben oprimir por medio de las luces inicio β
α
variables Ir a posición (fila, columna)
Esperar por botón del panel frontal
Botón de inicio Ir a posición ready Mientras este dentro del numero de fila Fin del programa Mientras este dentro del numero de columnas
Ver estado de entrada
Entrada = 1
SI α
NO β
39
PROGRAMACIÓN ROBOTS CRS ;; funcion regresar el estado de una entrada func int estado(int entrada) return input(entrada) end func
main int i,j,x,f1,f2 teachable cloc [2][4] posicion inicio:: printf("boton de inicio \n") while input (2) == 0 delay(200) end while
;;esperar por botón de inicio
speed(40) ;;establecer valor inicial i=0 for j = 0 to 1 ;;hacer un ciclo do x= estado(1) ;;checar botón if (x==1) printf("boton\n") ;;se oprimio boton 1 speed(60) printf("ready\n") ;;ir a posicion ready ready() finish() ;;fin de condición goto fin end if move (posicion[i,j]) ;;moverse finish() printf("posicion [{}],[{}] \n", i, j) printf(" i = {}\n",i) ;;indicar valores de contadores printf(" j = {}\n",j) i=1+i ;;aumentar contador until i == 4 ;;establecer limite i=0 ;;restablecer contador end for printf("\nFIN SECUENCIA\n") fin:: f1 = panel_button(1) printf("\nEstado de F1 = {}\n",f1) f2 = panel_button(2) printf("Estado de F2 = {}\n",f2) printf(" OPRIMIR F1 \n")
;;mensaje
;;obtener estado de boton F1 ;;obtener estado de boton F2
40
PROGRAMACIÓN ROBOTS CRS while panel_button(1) == f1 panel_light_set(1,1) delay(200) panel_light_set(1,0) delay(200) end while ready() finish() printf(" OPRIMIR F2 \n") while panel_button(2) == f2 panel_light_set(2,1) delay(200) panel_light_set(2,0) delay(200) end while goto inicio
;;esperar hasta que cambie F1 ;;hacer toggle a luz de F1
;;esperar que cambie F2 ;;hacer toggle a luz F2
;;saltar a inicio
end main
41
PROGRAMACIÓN ROBOTS CRS 6. Programar secuencia empleando una matriz de dos dimensiones, monitorear dos entradas del GPIO con una reinicia el ciclo y con otra espera que se oprima un botón del panel frontal, se va a ready y se debe oprimir alguno de los dos botones del panel frontal, con uno re regresa a la posición donde se activo la entrada, y con otro termina el programa inicio
Ir a posición (i,j)
variables β Fila = 0 Columna = 0
Incrementar columna
Dentro de limite de fila
Ultima columna
α
no α
si Dentro de limite de columna
Incrementar fila
si
Estado de entradas
Entrada(1) =1
Ultima fila
si no
Columna = 0
Ir a read
no
Entrada(2) =1
β
si
Panel
α
no
42
PROGRAMACIÓN ROBOTS CRS
Panel
Esperar por F1
Ir a read Esperar por F1
si Recuperar posición
F2
no
Fin del programa
α
43
PROGRAMACIÓN ROBOTS CRS
func int estado(int entrada) return input(entrada) end func main teachable cloc [3,4] pos int i,j,en1,en2,en3,f1,f2 loop inicio:: ;;establecer condiciones iniciales i=0 j=0 print("entradas analogicas ",analogs_get,"\n") speed(40) ;;velocidad ciclo:: do do en1=estado(1) ;;asegurar estado de entradas en2=estado(2) en3=estado(3) if (en1==1) ;;entrada 1 printf("entrada 1 \n") while input(1)==1 delay(75) ;;esperar por libre boton end while ready() ;;ir a posicion de inicio finish() goto inicio ;;continuar desde la primera posicion end if if (en2==1) ;;entrada 2 printf("entrada 2 \n") goto fin ;; fin del programa end if if (en3==1) ;;no esta habilitada printf("error\n") end if move (pos [i,j]) ;;ir a posicion finish() printf("posicion [{}],[{}]\n", i,j) j=j+1 ;; incrementar contador until j > 3 ;;establecer limite i=i+1 ;;siguiente fila j=0 ;;contador until i == 3 ;;limite de filas speed(60) ;;termina secuencia ready()
44
PROGRAMACIÓN ROBOTS CRS finish() printf("fin secuencia\n") end loop
;; fin del ciclo
fin:: ;; fin f1 = panel_button(1) ;;obtener estado de boton F1 printf("\nOprimir F1\npara que se vaya a ready\n") while panel_button(1) == f1 panel_light_set(1,1) delay(200) panel_light_set(1,0) delay(200) end while
;;esperar hasta que cambie estado ;;encender indicador ;;del boton
delay(500) while (panel_button(1)==1) printf("suelta F1\n") delay(200) end while
;;demora ;;hasta que este libre el boton ;;mensaje todavia esta oprimido el boton
ready() ;;continua ciclo finish() delay(800) ;;demora evita rebote f1 = panel_button(1) ;;esperar boton F1 f2 = panel_button(2) printf("\n Oprimir F1 para terminar\n \n Oprimir F2 para continuar en \n la posicion anterior\n") while (panel_button(1) == f1 ) ;;or panel_button(2) == f2 panel_light_set(3,1) if panel_button(2) != f2 apagar:: panel_light_set(3,0) printf("Regresa\ni = {}, j = {}\n",i,j) if j==0 and i == 0 ;;esta en primer posicion printf("iguales\ni = {}, j = {}\n",i,j) goto inicio end if if j==0 ;;tiene que regresar una fila i= i-1 j= 3 printf("regresar fila\n i = {}, j = {}\n",i,j) goto ciclo else ;;entonces tiene que regresa una columna j= j -1
45
PROGRAMACIÓN ROBOTS CRS printf("regresar columna\n i = {}, j = {}\n",i,j) goto ciclo end if end if delay(100) if panel_button(2) != f2 goto apagar end if panel_light_set(3,0) delay(100) end while
;;
printf("\nFIN DEL PROGRAMA\n") end main
;;pueden oprimir el boton aqui ;;ir a checar estado de posicion ;;apagar luces
;;fin del programa
46
PROGRAMACIÓN ROBOTS CRS 7. Demostración de multitarea int
enable = 0
main string [20] cmd int pid, cont cont = 0 pid = split() if pid == 0 then printf("Alterno pid = {} \n proceso principal de {}\n",getpid(),getppid()) loop delay(1000) if enable == 1 then printf("Contador = {}\n",cont) cont= cont +1 end if end loop else printf("Principal pid = {}\n proceso alterno {} \n",getpid(), pid) delay(500) loop printf("\ninicio, paro, terminar o quitar >") readline(cmd,20) if cmd == "inicio" then ;;iniciar contador enable = 1 elseif cmd == "paro" then ;;detener el ciclo enable = 0 elseif cmd == "terminar" the ;;detener tarea alterna sigsend(pid,SIGHUP) pid=0 elseif cmd == "quitar" then ;;terminar programa break else printf("\nerror\n") ;;error end if end loop if pid != 0 then ;;en caso de pid diferente de cero ;;error sigsend(pid,SIGHUP) ;; genera una interrupción y se end if ;;apaga el controlador end if end main
47
PROGRAMACIÓN ROBOTS CRS 8. Estado del robot, utilizando los subprogramas mostrar el estado del robot, leer entrada analógica, limite de ejes, etc. main string [10] cad int [5] config int i,k, cont, e, eje, total, trans float kp, ki, kd float [8] poslim, neglim, radio,valor int [8] act_est int con, tiempo, cierto, tiempo1 int homed, done string [128] time_date cont = 0 tecla:: printf("Numero de veces a realizar \n") ;; numero de veces readline(cad,10) e = str_to_int(k,cad) ;; determinar error if (e < 0) print("error dato debe ser un numero entero\n\n") goto tecla end if while cont < k robot_info(homed,done) ;; estado del robot homed y movimiento if (homed != 0 && done != 0) print("El robot esta en home y no se esta moviendo\n") else if done == 0 print("robot en movimiento\n") end if if homed == 0 print("Robot no ha ido a home\n") end if end if conf_get (config) ;;obtener configuracion del robot for i= 0 to 4 ;; estan ordenado como sigue case i of 0: printf("Codigo del producto ") of 1: printf("Cogigo del robot ") of 2: printf("Numero de ejes ") of 3: printf ("Configuracion ") of 4: printf("Estado de arm power ") else printf("NO puede llegar aqui ")
48
PROGRAMACIÓN ROBOTS CRS end case print(config[i],"\n") delay(500) end for for i= 1 to 5 ;;obtener ganancias de cada eje gains_get(i,kp,ki,kd) ;; proporsional, integral, y diferencial printf("ganancia eje = {}\np= {}\ni= {}\nd= {}\n",i,kp,ki,kd) delay(500) end for axes_get(eje,trans,total) ;; limites de cada eje for con = 1 to eje jointlim_get(con,poslim[con-1],neglim[con-1]) printf("eje {} limite: + {} {} \n",con,poslim[con-1],neglim[con-1]) delay(500) end for xratio_get(radio) ;; relacion de giro de cada eje for i = 0 to eje printf("radio eje {}= {}\n",i,radio[i]) delay(500) end for print("Entradas analogicas \n") analogs_get(valor) ;; obtener entradas analogicas print("Temperatura de tarjeta= ",valor[ANA_BOARDTEMP],"\n") delay(500) printf("Entrada analogica 1= {} \n",valor[ANA_USER1]) delay(500) printf("Entrada analogica 2= {} \n",valor[ANA_USER2]) delay(500) printf("Fuente interna de 24 = {} \n",valor[ANA_V24SUPPLY]) delay(500) printf("Fuente interna de 12 = {} \n",valor[ANA_V12SUPPLY]) delay(500) printf("Fuente interna de 5 = {} \n",valor[ANA_V5SUPPLY]) axis_status(act_est) ;; estado de cada eje for i = 0 to eje print("estado eje ",i,"= ",act_est[i],"\n") delay (500) end for robot_odo(tiempo) ;; tiempo de funcionamiento print("Ha estado encendido ",tiempo," seg\n") tiempo1 = time() ;;obtener fecha ;;formato cierto = time_to_str(time_date, tiempo1) printf("Fecha: {}\n",time_date) cont= cont+1 printf("realizado = {}\n\n",cont) end while end main
49