Robótica¶

Programación de Robots Industriales¶

  • Métodos de programación
  • Lenguajes de programación de robots
  • URScript y Python para el UR5e

Métodos de Programación¶

Los robots industriales se programan mediante dos enfoques principales:

Método Descripción Ventajas Desventajas
Por guía (teach pendant) El operador mueve el robot manualmente a cada posición y la graba Intuitivo, no requiere conocimiento de programación Lento, impreciso, requiere acceso físico
Textual (off-line) Se escriben programas en lenguajes específicos Preciso, reproducible, simulable Requiere conocimiento de programación

Programación por Guía¶

Tipos¶

  • Guía directa: el operador toma el efector final y lo mueve manualmente
  • Guía por teach pendant: se usa el controlador portátil para mover cada articulación

Proceso¶

  1. Mover el robot a la posición deseada
  2. Grabar el punto (waypoint)
  3. Repetir para todos los puntos de la trayectoria
  4. Ejecutar el programa grabado

Programación Textual¶

Lenguajes por fabricante¶

Fabricante Lenguaje Ejemplo
Universal Robots URScript movej(), movel()
ABB RAPID MoveJ, MoveL
KUKA KRL PTP, LIN
FANUC KAREL / TP J P[1], L P[2]

Tipos de movimiento¶

  • Joint move (movej): movimiento articular — el más rápido
  • Linear move (movel): movimiento en línea recta del TCP
  • Circular move (movec): arco circular pasando por un punto intermedio

URScript — Fundamentos¶

URScript es el lenguaje nativo de los robots Universal Robots.

# Movimiento articular
movej([0, -1.57, 1.57, -1.57, -1.57, 0], a=1.2, v=0.25)

# Movimiento lineal
movel(p[0.3, -0.1, 0.5, 0, 3.14, 0], a=1.2, v=0.05)

# Movimiento circular
movec(p[via], p[destino], a=1.2, v=0.05)
  • a: aceleración (rad/s² o m/s²)
  • v: velocidad (rad/s o m/s)
  • p[x, y, z, rx, ry, rz]: pose con representación axis-angle

URScript — Estructuras de Control¶

# Variables
velocidad = 0.5
posicion_home = [0, -1.57, 0, -1.57, 0, 0]

# Condicionales
if digital_in[0] == True:
  movej(posicion_home, a=1.0, v=velocidad)
end

# Bucles
i = 0
while i < 5:
  movel(p[0.3, -0.1, 0.5, 0, 3.14, 0], a=1.2, v=0.05)
  movel(p[0.3, 0.1, 0.5, 0, 3.14, 0], a=1.2, v=0.05)
  i = i + 1
end

Python con RTDE¶

La interfaz RTDE (Real-Time Data Exchange) permite controlar el UR5e desde Python a 500 Hz.

import rtde_control
import rtde_receive

# Conexión al robot
rtc = rtde_control.RTDEControlInterface("192.168.1.1")
rtr = rtde_receive.RTDEReceiveInterface("192.168.1.1")

# Movimiento articular
rtc.moveJ([0, -1.57, 1.57, -1.57, -1.57, 0], 0.5, 0.5)

# Leer posición actual
pose = rtr.getActualTCPPose()  # [x, y, z, rx, ry, rz]
joints = rtr.getActualQ()       # [q0, q1, q2, q3, q4, q5]

Python con RTDE — Trayectorias¶

import numpy as np

# Definir waypoints
waypoints = [
    [0.3, -0.2, 0.4, 0, 3.14, 0],
    [0.3,  0.0, 0.4, 0, 3.14, 0],
    [0.3,  0.2, 0.4, 0, 3.14, 0],
]

# Ejecutar trayectoria punto a punto
for wp in waypoints:
    rtc.moveL(wp, speed=0.1, acceleration=0.5)

# Trayectoria continua (blend)
blend = 0.02  # radio de suavizado en metros
path = [[wp + [0.1, 0.5, blend]] for wp in waypoints]
rtc.moveL(path)

Simulación y Programación Off-line¶

Antes de ejecutar en el robot real, es recomendable simular:

  • URSim: simulador oficial de Universal Robots (gratuito)
  • RoboDK: simulador multi-marca con generación automática de código
  • ROS/MoveIt: framework open-source para planificación de movimiento

Ventajas de la programación off-line¶

  • No se interrumpe la producción
  • Se detectan colisiones y singularidades antes de ejecutar
  • Se optimizan tiempos de ciclo

Buenas Prácticas¶

  1. Siempre definir una posición home segura y libre de colisiones
  2. Velocidad reducida durante pruebas (≤ 250 mm/s)
  3. Verificar singularidades antes de ejecutar trayectorias lineales
  4. Usar blends para suavizar transiciones entre waypoints
  5. Documentar cada programa con comentarios sobre la tarea