Ir al contenido

P02 — Leer un programa de paletizado en URScript

Un UR5e toma piezas siempre del mismo punto pick y las deja en una estiba. En movel la velocidad v está en m/s; en movej, en rad/s. Una pose p[x, y, z, rx, ry, rz] tiene la posición en metros respecto a la base y la orientación en los tres últimos valores. La salida digital 0 cierra la pinza con True y la abre con False.

home = [0, -1.57, 0, -1.57, 0, 0]
pick = p[0.40, -0.30, 0.20, 0, 3.14, 0]
movej(home, a=1.2, v=0.5)
fila = 0
while fila < 2:
col = 0
while col < 3:
movel(pick, a=1.0, v=0.2)
set_digital_out(0, True)
x = 0.30 + 0.10 * col
y = 0.20 + 0.12 * fila
movel(p[x, y, 0.20, 0, 3.14, 0], a=1.0, v=0.2)
set_digital_out(0, False)
col = col + 1
end
fila = fila + 1
end
movej(home, a=1.2, v=0.5)
  1. ¿Cuántas piezas deja el programa en la estiba? Escriba las coordenadas (x,y)(x, y) donde se suelta cada una, en el orden en que se colocan.
  2. ¿Cuántas instrucciones movel y cuántas movej se ejecutan en total?
  3. Despreciando la aceleración, ¿cuánto tarda el TCP en ir de pick a la primera posición de la estiba? ¿Y a la posición más lejana? Calcule también la distancia total que recorre el TCP con movel en todo el programa y el tiempo correspondiente.
  4. ¿En qué nivel de la programación textual está escrito este programa? Justifique.
  5. Todos los puntos están a la misma altura z=0.20z = 0.20 m. Explique qué problema físico tendrá el robot al llevar la quinta pieza a su lugar, y qué puntos agregaría al programa para evitarlo.
Mostrar solución
  1. El ciclo externo corre con fila = 0, 1 y el interno con col = 0, 1, 2: son 2×3=62 \times 3 = 6 piezas. Las posiciones, en orden, son (0.30,0.20)(0.30, 0.20), (0.40,0.20)(0.40, 0.20), (0.50,0.20)(0.50, 0.20), (0.30,0.32)(0.30, 0.32), (0.40,0.32)(0.40, 0.32) y (0.50,0.32)(0.50, 0.32) m.

  2. Cada pieza usa 2 movel, uno a pick y otro a la estiba: 6×2=126 \times 2 = 12 movel. Hay 2 movej, uno al principio y otro al final.

  3. De pick (0.40,−0.30)(0.40, -0.30) a (0.30,0.20)(0.30, 0.20): d=0.102+0.502=0.510d = \sqrt{0.10^2 + 0.50^2} = 0.510 m, y t=0.510/0.2=2.55t = 0.510/0.2 = 2.55 s. La más lejana es (0.30,0.32)(0.30, 0.32) o (0.50,0.32)(0.50, 0.32): d=0.102+0.622=0.628d = \sqrt{0.10^2 + 0.62^2} = 0.628 m, y t=3.14t = 3.14 s.

    Las distancias de pick a cada lugar son 0.510, 0.500, 0.510, 0.628, 0.620 y 0.628 m. El TCP hace cada uno de esos tramos de ida y, para las cinco primeras piezas, también de vuelta a pick. La sexta vuelve a home con movej. Distancia total con movel: 2(0.510+0.500+0.510+0.628+0.620)+0.628=6.162(0.510 + 0.500 + 0.510 + 0.628 + 0.620) + 0.628 = 6.16 m, y tiempo ≈6.16/0.2=30.8\approx 6.16/0.2 = 30.8 s. El primer movel sale de home, pero su distancia no se puede calcular con los datos, porque home está en ángulos articulares.

  4. Está en nivel robot: cada movimiento se da con su pose, velocidad y aceleración exactas, y la pinza se maneja con una salida digital. Nada en el programa “sabe” qué es una pieza o una estiba.

  5. El TCP viaja horizontalmente a la misma altura a la que suelta las piezas. Al llevar la pieza 5 a (0.40,0.32)(0.40, 0.32) desde pick, el camino recto pasa por la fila de y=0.20y = 0.20, donde ya están las piezas 1 a 3, así que la pieza que lleva choca con ellas, y lo mismo pasa en otros recorridos. Hay que agregar puntos de aproximación encima de pick y de cada lugar de la estiba, por ejemplo con z=0.30z = 0.30: subir, desplazarse por arriba, y bajar en vertical solo al final. En esos puntos de paso se pueden usar blends; en los puntos donde se abre o cierra la pinza, no.