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¶
- Mover el robot a la posición deseada
- Grabar el punto (waypoint)
- Repetir para todos los puntos de la trayectoria
- 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¶
- Siempre definir una posición home segura y libre de colisiones
- Velocidad reducida durante pruebas (≤ 250 mm/s)
- Verificar singularidades antes de ejecutar trayectorias lineales
- Usar blends para suavizar transiciones entre waypoints
- Documentar cada programa con comentarios sobre la tarea