Robòtica Tema 4. Programació Josep Fernández Ruzafa Dpt. Enginyeria de Sistemes, Automàtica i Informàtica Industrial Tema 4: Programació del Robot 4.1. Introducció. Formes de Programació. 4.2. Requeriments pels llenguatges de programació de robots. 4.3. Exemples de llenguatges de programació de robots: ACL, AL, RAPID Temps Estimat: 2 hores © J. Fernández, J. Aranda. Dpt. ESAII - UPC Tema 4. Programació del Robot Bibliografia Barrientos A. i altres "Fundamentos de Robòtica" Capítol 8. McKerrow P.J. "Introduction to Robotics" Capítol 12. Fu K. i altres " Robotica" Capítol 9. Groover M. i altres "Industrial Robotics" Capítols 8 i 9. Craig J. "Introduction to Robotics: Mechanics & Control" Capítol 12. Snyder W. "Industrial Robots" Capítol 15. © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. Introducció USUARI PROGRAMA MOVE A Unitat de Control MOVIMENT = Posició Inicial i Final + Temps de trajectòria INTERPOLACIÓ θ(t) Evolució suau de la posició i la velocitat MOSTREIG θ(t=nT) Posicions de referència CONTROL DE LES ARTICULACIONS Posició actual SENSORS INTERNS © J. Fernández, J. Aranda. Dpt. ESAII - UPC Velocitat Parell ACTUADORS 2.1. Introducció Robot industrial: Manipulador multifuncional i reprogramable. La programació permet fer de forma ràpida i econòmica diferent tipus de tasques. El programa està relacionat amb la manipulació d’objectes a l’espai tridimensional. Programa Computador Programa Robot iManipula dades i dades i objectes i Valor de la variables depèn del procés i depèn del procés i d’events externs i temps d’execució crític © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. Tipus de Programació Per Guiat • Passiva • Activa Textual • Nivell robot (Exemple: ACL, Mitsubishi, VAL, RAPID) • Nivell objecte (Exemple: RAPT) • Nivell tasca © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. Programació per Guiat 1. Moure el robot (o una maqueta) i memoritzar les posicions dels sensors interns (Programació) Programa = seqüència d’una infinitat de punts que defineixen la trajectòria 2. Reproduir el moviment memoritzat (execució) © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. Programació per Guiat Activa • Programa ACTIVA: Es fa servir la botonera del robot per moure el robot. • Es memoritza només les posicions de treball (o de pas) i no tota la trajectòria. • Els sist. de prog. per guiat ACTIVA més avançats permeten definir característiques del comportament del robot (velocitat, tipus trajectòria, precisió, ..) i/o instruccions de control del flux d’execució, accions d’entrada / sortida ... © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. Programació per Guiat AVANTATGES • Utilització simple • No calen coneixements de programació INCONVENIENTS • Necessitat del robot en la fase de programació • No existeix un document del programa • Els programes resulten complexes de modificar • Difícil de realitzar tasques complexes © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. Programació Textual (I) Tasques més complexes Î Mètodes de programació més potents 1r llenguatge comercial VAL (Unimation) 1979. Tipus de programació textual • Nivell robot. S’indica cada acció que ha de realitzar el robot. Permet l’estructuració dels programes, la concurrència i una major capacitat sensorial. Ex.: MOVE POS, OPEN, SPEED 70, IF sensor=1 THEN ... • Nivell objecte. S’indica com s’ha de manipular els objectes. Un planificador de tasques, amb la informació del món, genera les instruccions a nivell robot. Ex.: Situa l’objecte A sobre l’objecte B. • Nivell tasca. S’indica el que ha de fer el sistema, i en cap cas es diu com s’ha de fer. Ex.: Muntar la cadira. © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. Programació Textual (II) Especificació de la tasca Descomposició de la tasca Model del món Planificador Programa del robot © J. Fernández, J. Aranda. Dpt. ESAII - UPC Nivell tasca Muntar cadira Nivell Objecte .... Situa travesser A en forat 1 ... Nivell robot ... MOVE p_forat ..... 4.1. Programació Textual (III) AVANTATGES • Increment de la llegibilitat i potència dels programes. • Facilitat de modificació i extensió. • Programació off-line. Simulació gràfica. INCONVENIENTS • Dificultat d’ús. • Extensió dels programes en aplicacions complexes. © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.1. 4.2. Requeriments d’un llenguatge de programació de Robots A. Pròpies d’un computadors llenguatge • Estructurabilitat • Extensibilitat • Facilitat de “debugat” • Eficiència • Naturalitat © J. Fernández, J. Aranda. Dpt. ESAII - UPC de programació de Requeriments d’un lleng. de programació de Robots B. Pròpies d’un llenguatge de programació de robots • Instruccions de moviment i d’acció de l’E.T. • Sincronització amb events externs ( entrades i sortides). • Capacitat d’interaccionar amb dispositius i sensors externs. • Concurrència de tasques (UC multiprocés). • Comunicació entre processos. • Tipus de dades adequats (associats a posicions, sensors, ..). • Capacitat d’interacció amb un sistema de modelat del món. • Capacitat de prendre decisions. © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.2. 4.3. Exemples de Llenguatge de Progr. de Robots A. Llenguatge AL (Univ. Stanford, 1980) • • • • • Derivat del Pascal i el Algol Especificació a nivell robot Instruccions per temps real: sincronització, concurrència Tipus de dades adequats Associat a un entorn per al modelat del món © J. Fernández, J. Aranda. Dpt. ESAII - UPC Exemple 1. Llenguatge AL Inserció d’un cargol en el forat © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Exemple: Llenguatge AL (I) BEGIN inserción {variables} diametro_tornillo ← 0.5*pulgadas; longitud_tornillo ← 1*pulgadas; intentos ← 0; sujeción ← falso; {sistemas base} bloque ← FRAME(ROT(Z,90*grad),VECTOR(20,15,0)*pulgadas); alimentador ← FRAME(nilrot,VECTOR(25,20,0)*pulgadas); {matrices de características} cabeza_tornillo ← alimentador *TRANS(nilrot,nilvect); punta_tornillo ← cabeza_tornillo *TRANS(nilrot,VECTOR(0,0,0.5)*pulgadas); taladro_bloque ← bloque *TRANS(nilrot, VECTOR(0,0,1)*pulgadas); © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Exemple: Llenguatge AL (II) {sistemas de puntos de paso} A ← alimentador *TRANS(nilrot, VECTOR(0,0,5)*pulgadas); B ← alimentador *TRANS(nilrot, VECTOR(0,0,8)*pulgadas); C ← taladro_bloque *TRANS(nilrot, VECTOR(0,0,5)*pulgadas); D ← taladro_bloque *TRANS(nilrot, longitud_tornillo*Z); {Abrir la pinza} OPEN bhand TO diametro_tornillo + 1*pulgadas; {situar la pinza sobre el tornillo} MOVE barm TO cabeza_tornillo VIA A WITH APPROACH = -Z WRT alimentador; DO CLOSE bhand TO 0.9*diametro_tornillo+1*pulgada; IF bhand < diametro_tornillo THEN BEGIN {Fracaso en la sujeccion del tornillo, nuevos intentos} OPEN bhand TO diametro_tornillo + 1*pulgadas; MOVE barm TO ⊗ - 1*Z*pulgadas; END ELSE sujeccion ← verdadero; intentos ← intentos + 1 ; UNTIL sujeccion OR (intentos > 3); IF NOT sujeccion THEN ABORT(<<Fracaso de sujeccion del tornillo>>); {Suspender la ejecucion } © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Exemple: Llenguatge AL (III) {Mover el brazo hasta B} MOVE barm TO B VIA A WITH DEPARTURE = Z WRT alimentador; {Mover el brazo hasta D} MOVE barm TO D VIA C WITH APPROACH = Z WRT taladro_bloque; {Comprobar que el agujero está allí} MOVE barm TO ⊗ -0.1*Z*pulgadas ON FORCE(Z) > 0.2*kg DO ABORT(“No se encontró el agujero”); {Inserción} MOVE barm TO taladro_bloque DIRECTLY WITH FORCE(Z) = -0.2*kg WITH FORCE(X) = 0*kg WITH FORCE(Y) = 0*kg WITH DURATION = 5*segundos; END insercion. © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Exemples de Llenguatge de Progr. de Robots B. Llenguatge RAPID (ABB, 1994) • • • • Amb tota la “potència” d’un lleng. Prog. de computadors. Especificació a nivell robot. Programació mitjançant paleta o ordinador extern. Tipus i estructures de dades adequats - Constants (CONS), Persistents (PERS) i Variables (VAR) - Tipus atòmiques: Numèric (num), Lògic (bool) i cadena (string) - Es poden definir tipus “struc” © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Exemple 2. Llenguatge RAPID Extracció de peces defectuoses © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Exemple 2. Llenguatge RAPID • Tipus de subprogrames o rutines - Procediments. No retornen cap valor - Funció. Retorna un valor que s’utilitza en una expressió - Rutina TRAP. Rutina associada a una interrupció • Estructures de dades predefinides - Confdata. Especifica la configuració del robot - Loaddata. Descriu la càrrega transportada pel robot - Tooldata. Descriu les característiques de l’E.T. - Robtarget. Localització (configuració) del robot i dels eixos externs - Motsetdata. Definició d’alguns paràmetres de moviment © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Definició de Variables i Constants PERS tooldata herramienta:= [TRUE,[[97,0,223],[0.924,0,0.383,0]], [5,[-23,0,75],[1,0,0,0],0,0,0]] ; Características elemento terminal PERS loaddata carga:= [5,[50,0,50],[1,0,0,0],0,0,0]] ; Descripción de la carga manipulada VAR signaldo pinza ; señal de activación de pinza VAR signaldo activar_cinta ; señal de activación de cinta VAR signaldi pieza_defectuosa ; señal de pieza defectuosa VAR signaldi terminar ; señal de terminar programa VAR robtarget conf_espera := [[600,500,225],[1,0,0,0], [1,1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]] ; Posición de espera © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Rutina d’interrupció VAR intnum senal_pinza ; Variable interrupción TRAP etrap HoldMove ; Para el movimiento del robot TPErase ; Borrar la pantalla de la paleta TPWrite “ERROR: La pieza se ha soltado de la pinza” TPWrite “” reg:= TPReadFK(“Cuando el sistema esté listo pulse Start”,\FK1:=”Start”) RelMove ; Reanudar el movimiento Ir_posición_espera ; Ir a posición inicial ENDTRAP © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Subrutines (I) PROC Coger() Set pinza WaitTime 0.3 GripLoad carga IWatch senal_pinza ENDPROC ; Cerrar la pinza activando la señal digital pinza ; Esperar 0.3 segundos ; Señalar que la pieza esta cogida ; Activar interrupción PROC Dejar() ISleep senal_pinza Reset pinza WaitTime 0.3 GripLoad LOAD0 ENDPROC ; Desactivar interrupción ; Abrir la pinza ; Esperar 0.3 segundos ; Señalar que no hay pieza cogida © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3. Subrutines (II) PROC Coger_pieza() MOVEJ*, VMAX, z60, herramienta MOVEL*, V500, z20, herramienta MOVEL*, V150, FINE, herramienta Coger MOVEL*, V200, z20, herramienta ENDPROC PROC Dejar_pieza() MOVEJ*, VMAX, z30, herramienta MOVEJ*, V300, z30, herramienta Dejar ENDPROC ; Mov. en articulares con poca precisión ; *= Punto grabado directamente por guiado ; Mov. línea recta con precisión ; Bajar con precisión máxima ; Coger la pieza ; Subir con la pieza cogida ; Mover hacia almacen piezas malas ; Dejar la pieza. PROC Ir_posición_espera() MoveJ \Conc conf_espera, VMAX, z30, herramienta ENDPROC © J. Fernández, J. Aranda. Dpt. ESAII - UPC ; Mover a posición espera 4.3. Programa principal PROC main() ISignalDI senal_pinza CONNECT senal_pinza TO etrap ; Asignar señal de interrupción ; Asignar rutina de interrupción Ir_posicion_espera ; Mover a posición de espera WHILE DInput(terminar)=0 DO IF DInput(pieza_defectuosa)=1 THEN SetDO activar_cinta,0 Coger_pieza SetDO activar_cinta, 1 Dejar_pieza Ir_posicion_espera ENDIF ENDWHILE ; Esperar señal de terminar ; Esperar señal de pieza defectuosa ; Parar cinta ; Coger la pieza ; Activar señal de cinta ; Dejar la pieza ; Ir a posición de espera ENDPROC © J. Fernández, J. Aranda. Dpt. ESAII - UPC 4.3.