Documentos de Académico
Documentos de Profesional
Documentos de Cultura
www.wuolah.com/student/Nati8
938
Practicas_Robot_Montoya_Pacheco_Laura.pdf
Trabajo con el manipulador
3º Fundamentos de Robótica
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su
totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1404288
2016
Responsable:
ÍNDICE
1 PRÁCTICA PICK & PLACE ........................................................................................................ 2
2 PRÁCTICA PALETIZADO.......................................................................................................... 7
3 PRACTICA MOVIMIENTOS ESFÉRICOS ................................................................................. 14
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
4 PRACTICA PROCESADO DE PIEZAS ...................................................................................... 26
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
START:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
begin
// Staubli tx60
// Llama a la funcion inicio y crea las tareas de la aplicacion
call Inicio()
taskCreate "Movimiento",100,Movimiento()
taskCreate "Interfaz",100,Interfaz()
end
end]]></Code>
</Program>
INICIO:
INTERFAZ:
while !bEnd
cls()
gotoxy(5,13)
put("P2")
gotoxy(10,13)
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
put("P3")
gotoxy(36,13)
put("Quit")
case 272
if nX2 != 2
nX=nX2
nX2=2
bCicle=true
endIf
break
case 273
if nX2 != 3
nX=nX2
nX2=3
bCicle=true
endIf
break
4
case 278
bQuit=true
break
endSwitch
delay(0)
endWhile
// Fin del ciclo
end]]></Code>
</Program>
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
MOVIMIENTO:
if bCicle == true
open(tTool1)
movej(appro(pPuntos[nX],{0,0,-100,0,0,0}),tTool1,mNomSpeed)
movel(pPuntos[nX],tTool1,mLowSpeed)
close(tTool1)
movel(appro(pPuntos[nX],{0,0,-100,0,0,0}),tTool1,mLowSpeed)
movej(appro(pPuntos[nX2],{0,0,-100,0,0,0}),tTool1,mNomSpeed)
movel(pPuntos[nX2],tTool1,mLowSpeed)
open(tTool1)
movel(appro(pPuntos[nX2],{0,0,-100,0,0,0}),tTool1,mLowSpeed)
movej(pPuntos[0],tTool1,mNomSpeed)
waitEndMove()
bCicle=false
endIf
delay(0)
endWhile
5
bEnd=true
end
end]]></Code>
</Program>
STOP:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
begin
// Staubli tx60
//Movimiento que posiciona en home el brazo
movej(jHome,tTool1,mNomSpeed)
waitEndMove()
end
//Fin de la aplicación
</Code>
</Program>
2 PRÁCTICA PALETIZADO
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
START:
<Code><![CDATA[
begin
// Staubli tx60
// Llama a la funcion inicio y crea las tareas de la aplicación
call inicio()
taskCreate "Interfaz",100,Interfaz()
taskCreate "Cinta",100,Cinta()
taskCreate "Movimiento",100,Movimiento()
end
]]></Code>
7
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1404288
INICIO:
<Code><![CDATA[
begin
Ref=here(tTool1,world) //Guardar localizacion inicial de la herramienta tTool1
en el plano world
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
//Asigna la referencia a una base nueva en fBase, para crear un sistema de
cordenadas al final de la herramienta
//Variable numericas
nKey=0
nX=0
nY=0
nZ=0
nPiezas=-1
nEsc=0
nA=0
nCount=0
end
]]></Code>
INTERFAZ:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
nEsc=get(nY)
cls()
gotoxy(5,5)
put("Dimension de la pieza X (Alto)")
nEsc=get(nX)
cls()
gotoxy(5,5)
put("Dimension de la pieza Z (Ancho)")
nEsc=get(nZ)
bMedida=true
endIf
while !bEnd
cls()
gotoxy(0,13)
put("Paletizado")
gotoxy(10,13)
put("Despaletizado")
gotoxy(36,13)
put("Quit")
nKey=getKey() //Lee la tecla presionada
switch nKey
case 271
bBoton=true
break
case 273
if bBoton==true
doMotor=true
bBoton=false
bDes=true
bTorre=false
endIf
9
break
case 278
bQuit=true
break
endSwitch
delay(0)
endWhile
end]]></Code>
</Program>
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
CINTA
MOVIMIENTO:
//Paletizado
if bBoton and bCicle
call APieza()
waitEndMove()
endIf
10
//Despaletizado
if !bBoton and bDes
call QPieza()
waitEndMove()
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
//Realiza calculos para saber cuantas piezas tenemor y en que posicion
if nPiezas>=1
nPiezas=nPiezas-1
elseIf nPiezas==0 and nCount>=1
nPiezas=3
nCount=nCount-1
else
doMotor=false
bDes=false
bQuit=true
endIf
//Finaliza el programa
bEnd=true
end]]></Code>
APieza:
//programa auxiliar que determina distintas variables necesarias para la
aplicacion para el paletizado
begin
nPiezas=nPiezas+1
11
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1404288
//Conteo de piezas
if nPiezas==4
nCount=nCount+1
nPiezas=0
endIf
//Movimiento angular
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
movej(appro(pCinta,{(11-nY/2),0,-nZ/2,0,0,0}),tTool1,mLowSpeed)
close(tTool1)
movej(appro(pCinta,{0,0,-100,0,0,0}),tTool1,mLowSpeed)
waitEndMove()
doMotor=true
bCicle=false
bCinta=false
end]]></Code>
</Program>
QPieza:
//programa auxiliar que determina distintas variables necesarias para la
aplicacion en el despaletizado
STOP:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
13
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
14
START:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
<description />
<paramSection/>
<localSection/>
<source>
<code><![CDATA[
begin
// La función Initialize contiene la inicialización de las variables de la aplicación
call Initialize()
// Se crean dos tareas, una encargada del interfaz de usuario y otra de los
movimientos del robot
// Ambas tareas poseen la misma prioridad
taskCreate "robot",100,Motion()
taskCreate "user",100,UserInterface()
end
end]]> </code>
</source>
</program>
INITIALIZATE:
15
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1404288
//strings
sTitle="Movimientos Esféricos"
//control signals
bEnd=false
bQuit=false
bExecuteCycle=false
// Joints
jHome={0,0,0,0,0,0}
//Points
pPosFulcro.trsf={-84.23,-661.33,-118.67,0,0,0}
//Frame
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Fulcro.trsf=pPosFulcro.trsf
// No empezará la aplicación hasta que la velocidad de mando manual
// se haya reducido al 25 por ciento
wait(getMonitorSpeed()<26)
end
end]]></code>
</source>
</program>
MOTION:
//call Pos2Esf(pPosAct,nEsfActual)
// Se inicializa la variable esférica local correspondiente
// a la trayectoria que vamos a seguir. Irá avanzando de 0.1 en 0.1
nEsfTray[0]=nEsfActual[0]
nEsfTray[1]=nEsfActual[1]
nEsfTray[2]=nEsfActual[2]
// Este bucle se realiza hasta que estemos en una posición muy
// cercana a la final
while abs(nEsfActual[nTray]-nEsfTray[nTray])>0.1
// Se actualiza la posición actual
pPosAct=here(tPinza,Fulcro)
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
call Pos2Esf(pPosAct,nEsfActual)
// Calculamos la siguiente posición de la trayectoria
if nEsfActual[nTray]<nEsfDeseada[nTray]
nEsfTray[nTray]=nEsfTray[nTray]+0.1
else
nEsfTray[nTray]=nEsfTray[nTray]-0.1
endIf
// Una vez calculada la posición esférica siguiente de la
// trayectoria, se calcula la correspondiente posición
// del efector final en cartesianas y su orientación en
// ángulos de Euler XYZ
call Esf2Pos(1,pPosDes,nEsfTray)
// Movemos al punto correspondiente
movel(pPosDes,tPinza,mSlow)
endWhile
// Una vez que estamos a menos de 0.1 de la posición deseada
// ya ordenamos el movimiento hasta el punto deseado. Previamente
// se transforma de coordenadas esféricas a cartesianas
call Esf2Pos(1,pPosDes,nEsfDeseada)
movel(pPosDes,tPinza,mSlow)
waitEndMove()
// Se actualiza la posición actual
pPosAct=here(tPinza,Fulcro)
call Pos2Esf(pPosAct,nEsfActual)
//turn off running
bExecuteCycle=false
endIf
delay(0)
endWhile
//when robot finishes, shut down everything else
bEnd=true
end
17
end]]></code>
</source>
</program>
USERINTERFACE:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
<local name="nKey" type="num" size="1" />
</localSection>
<source>
<code><![CDATA[
begin
// controls the MCP display
// based on the original "2005-27 Example Application" de Staubli,
S.A.
title(sTitle)
// set user page on MCP
userPage()
while !bEnd
// redraw screen each time
cls()
// system messages from monitor
// counter and timer
gotoxy(0,1)
put("Pos. del fulcro: x=")
put(pPosFulcro.trsf.x)
put(" y=")
put(pPosFulcro.trsf.y)
put(" z=")
putln(pPosFulcro.trsf.z)
putln("Posición esférica actual")
put("Alpha: ")
putln(nEsfActual[0])
put("Beta: ")
putln(90-nEsfActual[1])
put("Rho: ")
putln(nEsfActual[2])
putln("Posición esférica deseada")
put("Alpha: ")
putln(nEsfDeseada[0])
18
put("Beta: ")
putln(nEsfDeseada[1])
put("Rho: ")
putln(nEsfDeseada[2])
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
//add F buttons
call PutButton(1,"Inicio")
call PutButton(2,"Alpha")
call PutButton(3,"Beta")
call PutButton(4,"Rho")
call PutButton(5,"Open")
call PutButton(6,"Close")
call PutButton(7,"Fulcro")
if !bQuit
//once we do quit don't display button
call PutButton(8,"QUIT")
endIf
// compute the key pressed
nKey=getKey()
switch nKey
//F1. Ir a posición Inicial
case 271
nEsfDeseada[0]=90
nEsfDeseada[1]=60
nEsfDeseada[2]=250
bExecuteCycle=true
break
//F2. Cambiar el valor de la variable alpha
case 272
gotoxy(0,10)
put("Indique el valor deseado para Alpha:")
nEsfDeseada[1]=nEsfActual[1]
nEsfDeseada[2]=nEsfActual[2]
get(nEsfDeseada[0])
nTray=0
bExecuteCycle=true
break
//F3. Cambiar el valor de la variable beta
case 273
gotoxy(0,10)
put("Indique el valor deseado para Beta:")
nEsfDeseada[0]=nEsfActual[0]
nEsfDeseada[2]=nEsfActual[2]
get(nEsfDeseada[1])
nTray=1
19
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1404288
bExecuteCycle=true
break
//F4. Cambiar el valor de la variable rho
case 274
gotoxy(0,10)
put("Indique el valor deseado para Rho:")
nEsfDeseada[0]=nEsfActual[0]
nEsfDeseada[1]=nEsfActual[1]
get(nEsfDeseada[2])
nTray=2
bExecuteCycle=true
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
break
//F5. Abrir la pinza
case 275
open(tPinza)
break
//F6. Cerrar la pinza
case 276
close(tPinza)
break
//F7. Modificar el punto de inserción
case 277
gotoxy(0,10)
put("Valor x de la posición del fulcro:")
get(pPosFulcro.trsf.x)
gotoxy(0,10)
put("Valor y de la posición del fulcro:")
get(pPosFulcro.trsf.y)
gotoxy(0,10)
put("Valor z de la posición del fulcro:")
get(pPosFulcro.trsf.z)
Fulcro.trsf=pPosFulcro.trsf
break
//F8. Terminar la aplicación
case 278
bQuit=true
break
endSwitch
// this delay prevents screen from blinkering
delay(0)
endWhile
end
end]]> </code>
20
</source>
</program>
ATAN2:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
<param name="ang" type="num" byVal="false" />
</paramSection>
<localSection/>
<source>
<code><![CDATA[
begin
// Esta función calcula la arcotangente, situando el ángulo en el cuadrante
// adecuado. La solución vendrá dada entre -pi/2 y 3pi/4
if (abs(x)<0) and (abs(y)<0)
ang=0
elseIf abs(x)<0
if y<0
ang=-90
else
ang=90
endIf
else
ang=atan(y/x)
if x<0
//and y<0
//ang=ang-180
//elseIf x<0 and y>0
ang=ang+180
endIf
endIf
end
end]]></code>
</source>
21
PUTBOTTON
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
begin
// puts a label above a function key
// n : number of function key (1..8)
// s : label for function key
// labels greater than 4 will shorten to 4 characters
n=n-1
if (n>=0) and (n<=7)
gotoxy(n*5,13)
if len(s)>4
s=left(s,3)+"."
endIf
put(s)
endIf
end
end]]> </code>
</source>
</program>
ESF2POS:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
<code><![CDATA[
begin
nY=esf[2]*cos(esf[1])*sin(esf[0])
nX=esf[2]*cos(esf[1])*cos(esf[0])
nZ=esf[2]*sin(esf[1])
pos.trsf.x=nX
pos.trsf.y=nY
pos.trsf.z=nZ
pos.trsf.rz=esf[0]
pos.trsf.ry=-(esf[1]+45)
end
end]]></code>
</source>
</program>
POS2ESF:
end]]></code>
</source>
</program>
HOME:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
<param name="n" type="num" byVal="true" />
<param name="tl" type="tool" byVal="true" />
<param name="m" type="mdesc" byVal="true" />
</paramSection>
<localSection>
<local name="jNow" type="joint" size="1" />
</localSection>
<source>
<code><![CDATA[
begin
//moves a robot to a home location
//where are we now
jNow=herej()
if !(abs(jHome-jNow)<{n,n,n,n,n,n})
// if !(abs(jHome-jNow){n,n,n,n,n,n})
//too far from home do a reset motion
resetMotion(jHome)
popUpMsg("Press and hold the MOVE/HOLD button to home the
robot")
endIf
//move to home
movej(jHome,tl,m)
waitEndMove()
end
end]]></code>
</source>
</program>
24
STOP:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
// articulares iguales a cero
movej(jHome,tPinza,mSlow)
waitEndMove()
end
end]]></code>
</source>
</program>
25
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
26
27
Montoya Pacheco, Laura Natalia
PRACTICAS CON EL ROBOT
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1404288
START:
<programList xmlns="ProgramNameSpace">
<program name="start" public="false">
<description />
<paramSection />
<localSection />
<source>
<code><![CDATA[begin
call inicio()
taskCreate "Movimiento",100,Movimiento()
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
taskCreate "Interfaz",100,Interfaz()
end
end]]></code>
</source>
</program>
INICIO:
programList xmlns="ProgramNameSpace">
<program name="inicio" public="false">
<description />
<paramSection />
<localSection />
<source>
<code><![CDATA[begin
nC=0
bPiezaA=false
bPiezaB=false
nD=0
bEnd=false
bQuit=false
bLleno=true
nTipoP=0
end
end]]></code>
</source>
</program>
28
MOVIMIENTO:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
if nC==3
while nC>0
movej(appro(pC[nC],{0,0,-100,0,0,0}),tTool1,mNomSpeed)
movej(appro(pC[nC],{0,0,0,0,0,0}),tTool1,mLowSpeed)
open(tTool1)
movej(appro(pC[nC],{0,0,-100,0,0,0}),tTool1,mLowSpeed)
movej(appro(pSal,{0,0,0,0,0,0}),tTool1,mNomSpeed)
close(tTool1)
nC=nC-1
endWhile
else
bLleno = false
endIf
if nD==3
while nD>0
movej(appro(pC[nC],{0,0,-100,0,0,0}),tTool1,mNomSpeed)
movej(appro(pC[nC],{0,0,0,0,0,0}),tTool1,mLowSpeed)
open(tTool1)
movej(appro(pC[nC],{0,0,-100,0,0,0}),tTool1,mLowSpeed)
movej(appro(pSal,{0,0,0,0,0,0}),tTool1,mNomSpeed)
close(tTool1)
nC=nC-1
endWhile
else
bLleno = false
endIf
movej(appro(pAB[1],{0,0,-100,0,0,0}),tTool1,mLowSpeed)
call ColocarPieza()
bLleno=true
bPiezaA=false
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
bLleno=true
bPiezaB=false
endIf
endWhile
delay(0)
end]]></code>
</source>
</program>
INTERFAZ:
COLOCAR PIEZA:
<programList xmlns="ProgramNameSpace">
<program name="ColocarPieza" public="false">
<description />
<paramSection />
<localSection />
<source>
30
<code><![CDATA[
begin
if nTipoP == 0
movej(appro(pC[nC],{0,0,-150,0,0,0}),tTool1,mNomSpeed)
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
movej(appro(pC[nC],{0,0,-17,0,0,0}),tTool1,mLowSpeed)
nC=nC+1
close(tTool1)
elseIf nTipoP == 1
movej(appro(pD[nD],{0,0,-150,0,0,0}),tTool1,mNomSpeed)
movej(appro(pD[nD],{0,0,-17,0,0,0}),tTool1,mLowSpeed)
nD=nD+1
close(tTool1)
else
movej(appro(pSal,{0,0,0,0,0,0}),tTool1,mNomSpeed)
close(tTool1)
endIf
end]]></code>
</source>
</program>
STOP:
end]]></code>
</source>
</program>
31