01 · Punto de partida
Un programa con cuerpo
Hasta ahora tus programas vivían dentro de la computadora: recibían datos, los procesaban y mostraban un resultado. Con los cursos anteriores aprendiste a leer sensores, a mover actuadores, a comunicar dispositivos y a construir sistemas embebidos. Todas esas piezas se juntan ahora en una sola idea: una máquina que percibe, decide y se mueve sola.
La diferencia con el software habitual es profunda. Si una función recibe un valor incorrecto, devuelve un error y el programa continúa. Si un robot recibe una lectura incorrecta, puede chocar, caerse o romper algo. Los errores dejan de ser mensajes en pantalla y pasan a ser hechos físicos.
Este primer tema no entra todavía en motores ni en sensores concretos: construye el mapa mental que vas a usar en los siguientes cuarenta y siete.
02 · Vocabulario
Qué es (y qué no es) un robot
No existe una definición única, pero casi todas coinciden en tres capacidades que el sistema debe tener a la vez:
- Percibir: medir algo del entorno o de sí mismo con sensores (distancia, luz, posición de una articulación, corriente de un motor).
- Decidir: procesar esa información con un controlador (un microcontrolador, una computadora de placa única) según un programa o un modelo.
- Actuar: modificar el mundo con actuadores (motores, servos, pinzas, ruedas) de forma física.
Con ese criterio, un robot aspirador es un robot, y un brazo industrial también. En cambio, una lavadora con programas fijos es una máquina automática que actúa pero casi no percibe, y un asistente virtual percibe y decide pero no tiene cuerpo.
| Sistema | Percibe | Decide | Actúa en el mundo físico | ¿Es un robot? |
|---|---|---|---|---|
| Robot aspirador | Sí: choque, precipicio, mapa | Sí | Sí: ruedas y cepillos | Sí |
| Brazo industrial de soldadura | Sí: posición de cada eje | Sí | Sí | Sí |
| Lavadora de programas fijos | Poco: nivel y temperatura | Secuencia fija | Sí | Más bien máquina automática |
| Termostato con relé | Sí: temperatura | Sí: todo o nada | Sí: calefactor | Sistema de control, sin movimiento autónomo |
| Asistente virtual | Sí: voz | Sí | No | No: no tiene cuerpo |
| Auto de juguete a control remoto | No | No: decide una persona | Sí | No, a menos que agregues sensores y decisión propia |
La frontera es difusa y no vale la pena discutirla demasiado. Lo importante es que, cuanto más se acerca un sistema a las tres capacidades a la vez, más desafíos de programación reales aparecen.
03 · El panorama completo
El lazo sentir, decidir y actuar
Todo robot, desde el más simple hasta el más sofisticado, ejecuta el mismo ciclo una y otra vez. Cada vuelta tarda una fracción de segundo y su resultado cambia el entorno, lo que cambia lo que el robot percibirá en la vuelta siguiente.
Pensalo como un bucle while infinito, con la particularidad de que su condición de entrada es el mundo físico:
- Sentir: leer los sensores y convertir los valores crudos en magnitudes con unidades.
- Decidir: comparar lo medido con lo deseado y elegir una acción.
- Actuar: ordenar el movimiento a los actuadores.
- Esperar: completar el período del ciclo y volver al paso 1.
La variante más importante es la que usa realimentación: lo que se mide sirve para corregir lo que se ordena. Sin realimentación el robot ejecuta órdenes a ciegas (lazo abierto); con ella puede compensar fricción, pendientes, baterías gastadas y errores propios (lazo cerrado). El tema 40 la estudia en profundidad.
04 · Familias
Tipos de robots
Los robots se agrupan por la forma en que se mueven o por el trabajo que hacen. Esa familia determina qué matemática y qué actuadores necesitás:
| Familia | Ejemplos | Qué lo caracteriza | Se estudia en |
|---|---|---|---|
| Brazos manipuladores | Brazo industrial, brazo de escritorio con servos | Base fija y articulaciones: importa la posición del extremo | Temas 20 a 24 |
| Robots móviles con ruedas | Aspirador, robot de depósito, seguidor de línea | Se desplazan por el suelo: importan la trayectoria y los obstáculos | Temas 25 a 34 |
| Robots con patas | Cuadrúpedos, hexápodos, humanoides | Equilibrio y marcha: muchas articulaciones coordinadas | Introducción en el tema 23 |
| Robots aéreos y acuáticos | Drones, submarinos | Se estabilizan en un medio inestable con control permanente | Temas 40 a 44 |
| Robots colaborativos | Cobots en una línea de montaje | Trabajan junto a personas: seguridad y límite de fuerza | Tema 4 |
| Máquinas automáticas | Cintas, clasificadoras, plotters, impresoras 3D | Ejes y secuencias repetibles con poca percepción del entorno | Temas 35 a 39 |
Una impresora 3D y un brazo industrial usan motores, finales de carrera y cinemática, igual que un robot de laboratorio. Por eso el curso cubre robótica y automatización juntas: las herramientas se comparten.
05 · Quién decide
Grados de autonomía
«Robot» no implica «autónomo». La autonomía es una escala, y conviene ubicar cada proyecto en ella porque define cuánto software hay que escribir y cuánto riesgo se asume.
| Nivel | Quién decide | Ejemplo | Software necesario |
|---|---|---|---|
| Teleoperado | Una persona, comando por comando | Brazo manejado con palancas, auto RC con cámara | Comunicación, traducción de órdenes a motores |
| Asistido | La persona, con ayudas automáticas | Frenado de emergencia, límite de velocidad, estabilización de un dron | Lazos de control rápidos y limitadores de seguridad |
| Semiautónomo | El robot ejecuta tareas; la persona las ordena | «Ir a la cocina», «recoger esta pieza» | Navegación, máquinas de estados, manejo de fallos |
| Autónomo | El robot fija sus pasos para cumplir un objetivo | Aspirador que decide su recorrido, robot que explora un laberinto | Planificación, percepción robusta, comportamientos de recuperación |
En este curso construís desde el nivel asistido hasta uno semiautónomo, que es lo que alcanza un robot móvil que sigue una línea y evita obstáculos por su cuenta.
06 · Cambio de mentalidad
Programar en el mundo físico
Si venís del desarrollo de software, varias costumbres dejan de funcionar. La tabla resume qué cambia:
| Aspecto | Software tradicional | Software de robots |
|---|---|---|
| Entradas | Exactas: lo que escribió el usuario | Ruidosas, con retardo y a veces falsas |
| Tiempo | Importa poco: «cuando termine» | Crítico: cada ciclo tiene un plazo |
| Estado | Está en la memoria y se puede consultar | Está en el mundo físico y hay que estimarlo |
| Errores | Excepciones, mensajes, reintentos | Choques, sobrecalentamiento, daño a personas |
| Repetir una prueba | Idéntica y gratis | Cambia con la batería, el suelo y la temperatura |
| Depuración | Depurador y registros | Registros, osciloscopio, simulación y mucha observación |
| Parar | Terminar el proceso | Frenar un cuerpo con inercia, sin dejarlo en un estado peligroso |
De todos esos cambios, el más importante es el estado: tu programa no sabe dónde está el robot. Solo tiene lecturas y modelos aproximados. Por eso la robótica se apoya tanto en estimación, filtrado y realimentación.
07 · Cálculo
Tiempo, retardo y distancia de seguridad
Una consecuencia directa del mundo físico: entre que algo ocurre y que el robot reacciona pasa tiempo, y en ese tiempo el robot sigue avanzando. Dos retardos se suman:
- El período del lazo
T: si el programa lee el sensor cadaTsegundos, el obstáculo puede aparecer justo después de una lectura y esperar casiThasta ser visto. - La distancia de frenado: un robot con velocidad
vy deceleraciónanecesitav² / (2a)para detenerse una vez dada la orden.
Si además el sensor tiene un error de medición e, la distancia mínima a la que el robot debería empezar a frenar es:
| Velocidad real | Período del lazo | Avance en un período (v · T) | Distancia de frenado | Distancia segura |
|---|---|---|---|---|
| 36 cm/s | 10 ms | 0,4 cm | 3,2 cm | ≈ 3,6 cm |
| 36 cm/s | 100 ms | 3,6 cm | 3,2 cm | ≈ 6,8 cm |
| 36 cm/s | 500 ms | 18,0 cm | 3,2 cm | ≈ 21,2 cm |
| 54 cm/s | 200 ms | 10,8 cm | 7,3 cm | ≈ 18,1 cm |
Estos números explican por qué un robot que «anda bien» a baja velocidad choca al subirle la velocidad o al sumarle más trabajo al lazo (leer más sensores, imprimir por serie): el período creció sin que nadie lo notara. Subir la velocidad, además, hace crecer el frenado con el cuadrado.
08 · Código
Un lazo completo en código
Este programa para Arduino implementa el lazo con un sensor ultrasónico HC-SR04 y un motor manejado por un driver. Observá que el ciclo se organiza con millis() en lugar de delay(): así el controlador queda libre para atender otras tareas y el período es fijo.
const int PIN_TRIG = 7;
const int PIN_ECO = 8;
const int PIN_MOTOR = 5; // PWM hacia el driver del motor
const float UMBRAL_CM = 15.0; // frenar si la pared está más cerca
const unsigned long PERIODO_MS = 100; // período del lazo: 10 lecturas por segundo
unsigned long ultimoCiclo = 0;
float sentirDistanciaCm() {
digitalWrite(PIN_TRIG, LOW); delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH); delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
unsigned long us = pulseIn(PIN_ECO, HIGH, 30000); // tope de 30 ms
if (us == 0) return -1.0; // sin eco: lectura inválida
return us * 0.0343 / 2.0; // ida y vuelta del sonido
}
void actuar(int velocidad) {
analogWrite(PIN_MOTOR, velocidad); // 0 = detenido, 255 = máxima
}
void setup() {
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECO, INPUT);
pinMode(PIN_MOTOR, OUTPUT);
}
void loop() {
if (millis() - ultimoCiclo < PERIODO_MS) return; // esperar el próximo ciclo
ultimoCiclo += PERIODO_MS;
float distancia = sentirDistanciaCm(); // sentir
int orden; // decidir
if (distancia < 0 || distancia <= UMBRAL_CM) orden = 0; // sin dato o muy cerca: parar
else orden = 150;
actuar(orden); // actuar
}
Dos decisiones de diseño merecen atención. Primero, una lectura inválida frena el robot: ante la duda, el estado seguro es detenerse. Segundo, ultimoCiclo += PERIODO_MS (y no = millis()) evita que el período se acumule con la deriva del tiempo de cada vuelta. Los dos hábitos vuelven en todos los temas.
09 · Analogía con programación
Simular el robot antes de construirlo
Un robot real tiene riesgo y es lento de probar. Por eso los equipos profesionales escriben primero una simulación del mundo. Este programa en Python recrea el mismo robot del laboratorio de este tema: avanza hacia una pared con una velocidad ordenada de 40 cm/s (el motor entrega un 90 %: 36 cm/s) y frena con una deceleración de 200 cm/s². Compará dos programas: uno de lazo abierto, que frena tras avanzar el tiempo equivalente a 80 cm, y otro de lazo cerrado, que usa un sensor y frena a 15 cm de la pared.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
VEL_ORDENADA = 40.0 # cm/s que se le ordena al motor
VEL_REAL = VEL_ORDENADA * 0.9 # el motor entrega solo el 90 %
DECEL = 200.0 # cm/s² al frenar
def simular(lazo_cerrado, pared, umbral=15.0, periodo_ms=100):
"""Devuelve (choco, distancia_a_la_pared, lecturas). El paso es de 1 ms."""
x, v, frenando, lecturas = 0.0, VEL_REAL, False, 0
for ms in range(20000):
if not frenando and ms % periodo_ms == 0: # ciclo del programa
lecturas += 1
if lazo_cerrado:
frenando = (pared - x) <= umbral # mide la distancia real
else:
frenando = ms * VEL_ORDENADA / 1000 >= 80 # estima por tiempo
if frenando:
v = max(0.0, v - DECEL * 0.001)
x += v * 0.001
if x >= pared:
return True, 0.0, lecturas
if frenando and v == 0:
break
return False, pared - x, lecturas
for nombre, cerrado in (("abierto", False), ("cerrado", True)):
for pared in (70, 100, 130):
choco, gap, lecturas = simular(cerrado, pared)
texto = "CHOQUE" if choco else f"se detuvo a {gap:.1f} cm de la pared"
print(f"{nombre} · pared a {pared:3d} cm -> {texto} ({lecturas} lecturas)")
Resultado: el lazo abierto choca si la pared está a 70 cm y se detiene a 24,8 y 54,8 cm de ella cuando está a 100 y 130 cm: siempre hace lo mismo, sin importar el mundo. El lazo cerrado queda a 9,2, 10,4 y 11,6 cm, es decir, se adapta a cada pared. Cambiá umbral a 5 y periodo_ms a 500 y predecí qué casos chocan antes de ejecutar.
Observá que el modelo es una versión simplificada: no hay ruido, la deceleración es constante y el motor responde al instante. Aun así enseña lo esencial: sin sensor, el programa solo funciona en el mundo que imaginó el programador.
10 · Exploración interactiva
Un robot frente a una pared
Este laboratorio ejecuta la simulación del tema. Elegí si el robot trabaja en lazo abierto (cuenta tiempo y frena a ciegas tras 80 cm) o en lazo cerrado (frena al medir una distancia menor que el umbral). Ajustá la velocidad, el período de lectura y el ruido del sensor, y ejecutá una corrida: vas a ver dónde se detuvo el robot, cuántas lecturas hizo y si chocó. Uno de los indicadores muestra la distancia segura que calcula la fórmula de la sección 07 para esa configuración: el umbral debería ser mayor que ella.
Sentir, decidir y frenar
Elegí el modo y ejecutá una corrida.
| Corrida | Modo | Pared | Lecturas | Resultado |
|---|---|---|---|---|
| Sin corridas registradas. | ||||
Reiniciar borra el historial y devuelve el robot al inicio. En lazo abierto, el umbral y el ruido no se usan: el robot no tiene sensor.
Recorrido guiado
Los resultados siguientes valen con la velocidad en 40 cm/s y sin ruido.
- Con lazo abierto y la pared a 100 cm, ejecutá una corrida: el robot se detiene a unos 21 cm de la pared. Funciona, pero solo por casualidad.
- Sin cambiar el modo, bajá la pared a 70 cm: el robot choca a 36 cm/s. El programa nunca se enteró. Subila a 120 cm: se detiene a 41 cm de la pared, mucho antes de lo necesario.
- Pasá a lazo cerrado (umbral 15 cm, período 100 ms) y repetí con paredes de 70, 100 y 130 cm. Se detiene a unos 9, 10 y 12 cm: el sensor hace que se adapte al mundo.
- Bajá el umbral a 5 cm con la pared en 100 cm: choca a 13 cm/s. El valor es menor que la distancia segura que muestra el laboratorio (6,8 cm), así que el frenado empieza tarde.
- Con el umbral en 5 cm, cambiá el período a 10 ms: se detiene a unos 1,7 cm. Un lazo más rápido permite acercarse más sin chocar, pero a cambio carga más al procesador.
- Poné el umbral en 15 cm, el período en 500 ms y la pared en 100 cm: se detiene a 6,8 cm. Ahora cambiá la pared a 90 cm: choca a 36 cm/s. La orden de frenar depende de si una lectura cae justo antes o justo después del umbral: con un período largo el robot queda a merced de la suerte.
- Subí la velocidad a 60 cm/s con período de 100 ms y pared en 100 cm: se detiene a unos 6 cm. La velocidad crece, el margen cae.
- Activá el ruido de ±3 cm y repetí varias corridas con la misma configuración: la distancia final cambia de una corrida a otra. Un ruido pequeño obliga a ampliar el margen.
Desafío: el umbral sin margen
Un compañero propone fijar el umbral en 5 cm «para acercarse más a la pared». Con velocidad de 36 cm/s y un período de 100 ms, la distancia segura es 6,8 cm: el robot necesita empezar a frenar desde mucho antes. Acercarse más exige un lazo más rápido, menos velocidad o un frenado más fuerte, no un umbral más bajo. El umbral es una consecuencia del diseño, no un parámetro libre.
11 · Método de trabajo
Cómo plantear un robot
- Definí la tarea y el entorno. ¿Qué debe lograr el robot y en qué condiciones: interior o exterior, suelo liso o irregular, presencia de personas?
- Elegí el nivel de autonomía. Teleoperado, asistido, semiautónomo o autónomo: cada uno exige un volumen distinto de software.
- Listá qué tiene que percibir. Cada decisión necesita un dato: sin sensor no hay realimentación.
- Listá qué tiene que mover. Tipo de actuador, potencia y velocidad.
- Dibujá el lazo. Qué se mide, qué se decide, qué se ordena y cada cuánto tiempo.
- Calculá los márgenes. Con período, velocidad y frenado obtenés la distancia mínima de reacción.
- Definí el estado seguro. Qué hace el robot si falla un sensor, si baja la batería o si el programa se cuelga.
- Simulá y probá por etapas. Primero el software con datos simulados, después los sensores, después los motores sin carga y recién al final el robot completo, a baja velocidad y con un botón de parada accesible.
Este método se repite en el proyecto integrador de los temas 45 a 48, donde lo aplicás a un robot completo.
12 · Comprensión
Confusiones frecuentes
«Un robot tiene que parecerse a una persona»
La inmensa mayoría de los robots en uso son brazos, vehículos o máquinas sin forma humana. La forma se elige por la tarea: una aspiradora circular y un brazo con pinza resuelven mejor sus trabajos que un humanoide.
«Más inteligencia siempre es mejor»
Un comportamiento simple y robusto suele ganarle a uno complejo y frágil. Un seguidor de línea con control proporcional bien ajustado supera a un algoritmo sofisticado mal calibrado. La complejidad se agrega solo cuando la tarea lo exige.
«Si funciona en el banco de pruebas, funciona en el suelo»
Con el robot levantado, las ruedas giran libres y la batería no sufre. En el suelo aparecen fricción, carga y caída de tensión. Probar siempre en condiciones reales y con la batería a distintos niveles.
«El programa sabe dónde está el robot»
Solo conoce lecturas con ruido y un modelo aproximado. La posición real es una estimación. Cuanto más tiempo pasa sin corregirla con sensores, más se aleja de la realidad.
«Un lazo más lento no importa si el robot es lento»
El avance durante un período es v · T. Con un lazo de 500 ms, un robot de 36 cm/s se mueve 18 cm entre dos lecturas. «Lento» es relativo al período del ciclo y a las distancias del entorno.
«Basta con detener los motores para detener el robot»
El robot conserva inercia y recorre una distancia de frenado. Además, algunos actuadores (una pinza con carga, un brazo vertical) caen al perder energía si no están diseñados para eso. El estado seguro hay que diseñarlo.
13 · Práctica guiada
Predecí antes de comprobar
1. ¿Es un robot?
Decidí con el criterio percibir, decidir y actuar si son robots: (a) un portón automático que se abre al detectar un auto y se detiene si encuentra un obstáculo; (b) un reloj despertador; (c) un drone que mantiene su altura; (d) un programa de ajedrez.
Ver solución
(a) y (c) perciben, deciden y actúan físicamente: son sistemas robóticos (el portón, aunque simple). (b) actúa con una alarma pero no percibe el entorno: es una máquina temporizada. (d) decide pero no tiene cuerpo ni sensores físicos: es software.
2. Avance entre lecturas
Un robot avanza a 50 cm/s y su lazo corre cada 200 ms. ¿Cuánto se mueve entre dos lecturas consecutivas?
Ver solución
v · T = 50 cm/s × 0,2 s = 10 cm. Un obstáculo que aparezca justo después de una lectura se detecta recién 10 cm más adelante, antes de contar la distancia de frenado.
3. Distancia segura
El mismo robot (50 cm/s, período de 200 ms) frena con una deceleración de 250 cm/s² y su sensor tiene un error de ±2 cm. ¿A qué distancia mínima de un obstáculo debe disparar el frenado?
Ver solución
Avance: 10 cm. Frenado: v² / (2a) = 2500 / 500 = 5 cm. Error del sensor: 2 cm. Total: 17 cm. Con un umbral menor, el robot choca en el peor caso.
4. Subir la velocidad
Si ese robot duplica su velocidad a 100 cm/s sin cambiar nada más, ¿cuánto vale la distancia segura?
Ver solución
Avance: 100 × 0,2 = 20 cm. Frenado: 10000 / 500 = 20 cm (cuatro veces más). Error: 2 cm. Total: 42 cm, es decir, casi dos veces y media más que antes: el frenado crece con el cuadrado de la velocidad.
5. Autonomía
Clasificá según su nivel de autonomía: (a) un robot de limpieza de ventanas que una persona dirige con un joystick; (b) un robot de almacén al que se le indica «llevá esta caja a la estantería 4»; (c) un aspirador que decide solo su recorrido.
Ver solución
(a) teleoperado. (b) semiautónomo: la persona define el objetivo y el robot elige cómo lograrlo. (c) autónomo: define sus propios pasos para cumplir la tarea general.
6. Estado seguro
Un robot lee la distancia con un sensor ultrasónico. Si el cable del sensor se desconecta, pulseIn devuelve 0. ¿Qué debería hacer el programa y por qué?
Ver solución
Tratar el 0 como lectura inválida y detener el robot, como hace el programa de la sección 08. Si interpretara 0 como «distancia 0 cm» también frenaría, pero por casualidad; si lo interpretara como «sin obstáculos» avanzaría a ciegas. La decisión debe ser explícita: ante la duda, el estado seguro.
14 · Síntesis
Ideas para recordar
- Un robot percibe con sensores, decide con un controlador y actúa con actuadores; sin las tres capacidades hay una máquina automática o un programa, no un robot.
- El lazo sentir, decidir, actuar y esperar se repite con un período fijo, y cada vuelta cambia el entorno que se percibirá en la siguiente.
- La realimentación permite corregir; el lazo abierto solo funciona en el mundo que el programador imaginó.
- Los robots se agrupan en familias (brazos, móviles, con patas, aéreos, colaborativos, máquinas automáticas) y en niveles de autonomía (teleoperado, asistido, semiautónomo, autónomo).
- Programar en el mundo físico implica entradas ruidosas, plazos de tiempo, estado estimado, errores con consecuencias físicas y pruebas no repetibles.
- La distancia segura es d = v·T + v²/(2a) + e: el período del lazo, la velocidad, el frenado y el error del sensor determinan cuán cerca puede acercarse un robot.
- Una lectura inválida debe llevar al estado seguro, no al valor «más cómodo».
- Simular antes de construir ahorra tiempo y evita choques.
¿Listo para el tema 2?
Antes de avanzar, dibujá de memoria el lazo sentir, decidir y actuar de un robot que sigue una línea, calculá la distancia segura de un robot que avanza a 30 cm/s con un lazo de 50 ms y deceleración de 150 cm/s², y explicá por qué un robot en lazo abierto puede fallar sin que el programa lo note.
En el próximo tema estudiamos la anatomía de un robot: qué componentes físicos y de software tiene cada bloque del lazo y cómo se conectan entre sí.