Tema 4: Programació del Robot - Facultat d`Informàtica de Barcelona

Anuncio
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.
Descargar