Contenido detallado
🧠 Por qué poner una computadora en el robot
Una imagen de cámara de 640 × 480 tiene más de 900 mil números (tres colores por píxel), y llegan decenas por segundo. El ESP32 tiene memoria para guardar solo algunas de esas imágenes y no puede ejecutar las bibliotecas de visión que vas a usar. El Raspberry Pi 5 es una computadora completa del tamaño de una tarjeta de crédito: procesador de cuatro núcleos, gigabytes de memoria, sistema Linux, Python y OpenCV. Se encarga de ver y decidir; el ESP32 sigue controlando los motores.
🌱 ¿Eres nuevo aquí?
Un sistema operativo es el programa que administra la computadora y ejecuta los demás programas (Windows, macOS y Linux son ejemplos). Linux es un sistema abierto y gratuito; Raspberry Pi OS es la versión de Linux hecha para el Pi. Tiempo real significa responder siempre dentro de un plazo fijo, como «corregir el motor cada 10 ms»: el microcontrolador lo garantiza; Linux no, porque reparte el procesador entre muchos programas.
Cómo leer: la flecha cian es ancha en datos (la imagen completa); la flecha morada lleva solo una frase corta. Esta asimetría es el diseño de casi todos los robots con visión: la computadora procesa la imagen y el microcontrolador recibe solo la orden. Armarás esta conexión en el módulo 3.5.
✓ El Pi lo hace bien
- ✓Procesar imágenes de cámara con OpenCV y ejecutar detectores como YOLO26.
- ✓Guardar registros, servir una página web, conectarse al Wi-Fi y a ROS 2.
- ✓Ejecutar Python con bibliotecas grandes, instaladas desde la línea de comandos.
✗ El Pi lo hace mal
- ✗Generar pulsos para el motor con tiempos exactos: Linux puede retrasarse algunos milisegundos.
- ✗Leer señales de 5 V: los pines del Pi son de 3,3 V y se queman.
- ✗Apagarse al desconectar el cable: la tarjeta puede dañarse.
Por qué aprender
Saber qué hace bien cada placa evita los dos errores clásicos de esta etapa: intentar hacer visión en el microcontrolador (no tiene capacidad suficiente) y conectar un motor directamente al Pi (vibra, se retrasa y a veces quema un pin). El Pi 4 todavía sirve para lo básico de este módulo; para usar una cámara con un detector de objetos, el Pi 5 es la opción adecuada.
Conceptos clave
💾 Preparar el Pi 5 sin monitor
Dentro del robot, el Pi no tendrá pantalla ni teclado. Por eso lo preparas en modo «headless» (sin cabeza): grabas el sistema en la tarjeta con Raspberry Pi Imager, y dejas configurados el nombre, el usuario, el Wi-Fi y SSH; después accedes a todo por la red desde tu computadora. El sistema es Raspberry Pi OS 64-bit, actualmente basado en Debian «Trixie». Para un robot, la versión Lite (sin entorno de escritorio) es más liviana; si prefieres ver un entorno de escritorio al principio, usa la versión completa.
🌱 ¿Eres nuevo aquí?
SSH es una forma segura de abrir la terminal desde otra computadora a través de la red: escribes en tu laptop y los comandos se ejecutan en el Pi. El hostname es el nombre del Pi en la red (por ejemplo, robo); con él puedes encontrarlo como robo.local sin necesidad de conocer la dirección IP.
Cómo leer: los tres cuadros morados ocurren con la tarjeta y la placa; el cian representa la comunicación entre tu computadora y el Pi. Si falla el paso 4, casi siempre el error está en el paso 1 (contraseña del Wi-Fi mal escrita o SSH desactivado).
Paso a paso
Instala Imager
Descarga Raspberry Pi Imager desde raspberrypi.com/software (Windows, macOS o Linux) y coloca la tarjeta microSD en el lector de tu computadora.
Elige la placa, el sistema y la tarjeta
Dispositivo: Raspberry Pi 5. Sistema: Raspberry Pi OS (64-bit), o la versión Lite en «Raspberry Pi OS (other)». Almacenamiento: tu tarjeta. Verifica dos veces para no borrar el disco equivocado.
Personaliza antes de grabar
En la pantalla de personalización, define el hostname robo, un usuario y una contraseña tuyos, el Wi-Fi (nombre y contraseña, país BR) y activa SSH. Graba y espera a que termine la verificación.
Enciende y conecta
Coloca la tarjeta en el Pi, conecta la fuente oficial de 27 W y espera a que el LED verde deje de parpadear intensamente. En la terminal de tu computadora (en Windows, PowerShell ya incluye SSH), ejecuta el bloque de abajo.
Objetivo: entrar al Pi por la red y dejar el sistema actualizado. Cambia <tu_usuario> por el usuario que creaste en Imager.
# 1) En TU computadora: entrar al Pi (la primera vez, responde "yes")
ssh <seu_usuario>@robo.local
# 2) Ya dentro del Pi: actualizar la lista de paquetes y el sistema
sudo apt update
sudo apt full-upgrade -y
# 3) Comprobar qué está en ejecución
cat /etc/os-release | grep PRETTY_NAME # debe mencionar Debian y "trixie"
uname -m # aarch64 = sistema de 64 bits
hostname -I # dirección IP del Pi en la red
# 4) Reiniciar para aplicar las actualizaciones del núcleo
sudo reboot
Cómo verificar
- ✓El prompt cambia a algo como <tu_usuario>@robo:~ $: estás dentro del Pi.
- ✓uname -m responde aarch64 y PRETTY_NAME menciona trixie.
- ✗¿"Could not resolve hostname"? Usa la IP en lugar de robo.local (el router muestra los dispositivos conectados) o comprueba que la computadora esté en la misma red.
Por qué aprender
Un Pi preparado correctamente se conecta al robot y aparece en la red por sí solo. Configurar todo en Imager te ahorra el monitor, el teclado y los intentos de editar archivos de configuración a mano, donde muchas personas se traban al principio.
Conceptos clave
⌨️ Terminal Linux esencial
En el robot, casi siempre te comunicarás con el Pi por medio de la terminal: una línea de texto donde cada comando es una palabra corta seguida de opciones. No necesitas memorizar decenas de comandos. Con unos quince puedes recorrer las carpetas, editar el código, instalar paquetes y descubrir por qué algo dejó de funcionar.
🌱 ¿Eres nuevo aquí?
En Linux, todo está en un árbol de carpetas que empieza en / (la raíz). Tu carpeta personal es /home/<tu_usuario>, abreviada como ~. sudo ("hazlo como administrador") es necesario para modificar el sistema, por ejemplo, para instalar programas. Úsalo solo cuando el comando lo pida.
Cómo leer: a la izquierda, la raíz y tres carpetas del sistema; a la derecha, lo que tú mismo crearás dentro de tu carpeta personal. Mantén siempre tus archivos en ~: así no modificarás nada del sistema por accidente.
| Comando | Qué hace | Ejemplo |
|---|---|---|
| pwd · ls -l · cd | dónde estoy · listar · entrar en la carpeta | cd ~/robo |
| mkdir · cp · mv · rm | crear carpeta · copiar · mover/renombrar · borrar | mkdir -p ~/robo |
| nano archivo | editor de texto sencillo (Ctrl+O guarda, Ctrl+X sale) | nano led.py |
| cat · tail -f | mostrar un archivo · seguir un registro en vivo | tail -f log.txt |
| htop · df -h · free -h | procesos y CPU · espacio en la tarjeta · memoria | df -h |
| Ctrl+C | interrumpir el programa que está en ejecución | detener el robot desde la terminal |
| scp | copiar archivos entre tu computadora y el Pi | scp foto.jpg tú@robo.local:~ |
Objetivo: crear la carpeta del curso, escribir un archivo, comprobar el espacio libre y apagar el Pi de forma segura.
mkdir -p ~/robo && cd ~/robo # crea la carpeta (si no existe) y entra en ella
pwd # muestra /home/<tu_usuario>/robo
echo "robo listo" > notas.txt # crea un archivo con una línea
cat notas.txt # muestra el contenido
ls -l # lista con tamaño y fecha
df -h / # espacio libre en la tarjeta
free -h # memoria total y en uso
# Apagar de forma segura (espera a que el LED verde se apague antes de desconectar la alimentación)
sudo shutdown -h now
Cómo verificar
- ✓cat muestra "robot listo" y ls -l lista notas.txt.
- ✓df -h muestra varios GB libres (si el uso supera el 90%, la tarjeta es demasiado pequeña).
- ✓Después de shutdown, la conexión SSH se cae y el LED verde deja de parpadear.
💡 Editar en tu computadora
Si nano te resulta incómodo, abre la carpeta del Pi directamente en tu editor: VS Code con la extensión "Remote - SSH" edita los archivos del Pi como si fueran locales. La terminal sigue siendo el lugar para iniciar y detener el robot.
Por qué aprender
Todo lo demás de la ruta (cámara, YOLO26, comunicación con el ESP32) y la Ruta 4 completa (ROS 2) se hacen en la terminal. Quienes dominan estos comandos resuelven por su cuenta situaciones como "se llenó la tarjeta", "el programa se trabó" y "dónde guardé ese archivo".
Conceptos clave
🐍 Python con entorno virtual
Si intentas pip install directamente en Raspberry Pi OS, verás el error externally-managed-environment. No es un defecto: el sistema protege el Python que usa. La solución correcta es crear un entorno virtual (venv) para el robot. Un detalle importante en el Pi: crea el venv con --system-site-packages, para que pueda ver las bibliotecas instaladas por el sistema, como picamera2 (cámara) y gpiozero (pines).
🌱 ¿Eres nuevo aquí?
Un paquete es una biblioteca de Python lista para usar (OpenCV, Ultralytics). pip es el instalador de paquetes de Python; apt es el instalador del sistema. Un entorno virtual es una carpeta con un Python solo para ti: lo que instales allí no desordena el sistema y, si algo sale mal, borras la carpeta y la creas de nuevo.
Cómo leer: el venv (morado) se superpone al Python del sistema (cian). La flecha muestra que, con la opción --system-site-packages, el venv "mira hacia abajo" y encuentra la cámara y los pines; sin ella, import picamera2 falla dentro del venv.
Objetivo: crear el venv del curso, activarlo, instalar un paquete y comprobar que puede ver las bibliotecas del sistema.
# Crear el entorno (solo una vez)
python3 -m venv --system-site-packages ~/robo-venv
# Activar (cada vez que abras una terminal nueva)
source ~/robo-venv/bin/activate # el prompt muestra "(robo-venv)" al inicio
# Instalar paquetes DENTRO del venv (sin sudo)
pip install --upgrade pip
pip install numpy
# Probar: versión de Python y bibliotecas del sistema visibles
python -c "import sys; print(sys.prefix)"
python -c "import gpiozero, picamera2; print('gpiozero e picamera2 OK')"
# Salir del venv cuando quieras
deactivate
Cómo verificar
- ✓sys.prefix muestra /home/<seu_usuario>/robo-venv: el Python activo es el del venv.
- ✓Aparece "gpiozero e picamera2 OK".
- ✗¿"No module named picamera2"? El venv se creó sin --system-site-packages, o estás en la versión Lite sin la biblioteca: ejecuta sudo apt install -y python3-picamera2 y vuelve a crear el venv.
✓ Hazlo
- ✓Un venv por proyecto grande; para el curso, basta con uno.
- ✓Anotar los paquetes con pip freeze > requirements.txt.
- ✓Ejecutar scripts con el Python del venv activado.
✗ No lo hagas
- ✗sudo pip install: mezcla paquetes con los del sistema.
- ✗Usar --break-system-packages para «resolver» el error.
- ✗Instalar picamera2 con pip: en el Pi viene por apt.
Por qué aprender
OpenCV, Ultralytics y pyserial, que usarás en los próximos módulos, se instalan todos en este venv. Hacerlo bien ahora evita el problema más común de visión en el Pi: «la cámara funciona en la terminal, pero mi script no encuentra la biblioteca».
Conceptos clave
📍 GPIO en el Pi (gpiozero) y precauciones con 3,3 V
El Pi 5 tiene una doble fila de 40 pines, como el ESP32 tiene los suyos. Algunos suministran energía (3,3 V, 5 V y GND); la mayoría son GPIO, pines que tu programa activa, desactiva o lee. En Python, la biblioteca gpiozero los convierte en objetos sencillos: LED(17), Button(27). En el robot, el GPIO del Pi sirve para los LED de estado, un botón de parada y la conexión serial con el ESP32; los motores quedan a cargo del ESP32.
🌱 ¿Eres nuevo aquí?
Los pines tienen dos números. O físico indica la posición en la fila (del 1 al 40). El BCM (o «GPIO») es el nombre lógico que usa el chip, y es el que espera gpiozero: el pin físico 11 es el GPIO17. Si tienes dudas, ejecuta pinout en la terminal del Pi: muestra el mapa completo.
Cómo leer: el rectángulo marca el inicio del conector, visto desde arriba, con el pin 1 en la esquina (cuadrado en la placa). El rojo es alimentación, el gris es GND y el morado es el GPIO que vas a usar. El botón va en el pin 13, justo debajo del 11, y en el GND del pin 14, al lado.
Objetivo: hacer parpadear un LED de estado y mantener encendido el LED fijo mientras el botón esté presionado. Conecta: GPIO17 (pin 11) → resistencia de 330 Ω → pata larga del LED; pata corta → GND (pin 9). Botón entre GPIO27 (pin 13) y GND (pin 14). Con el venv activado, guarda como ~/robo/led.py.
# LED de estado y botón en Raspberry Pi 5 con gpiozero
# Ejecuta con: python ~/robo/led.py (Ctrl+C para salir)
from gpiozero import LED, Button
from signal import pause
led = LED(17) # número BCM: GPIO17 = pin físico 11
botao = Button(27, bounce_time=0.05) # GPIO27 = pin 13; pull-up interno activado
def apertou():
led.on()
print("botón presionado: LED encendido")
def soltou():
led.blink(on_time=0.2, off_time=0.8) # vuelve a parpadear en segundo plano
print("botón suelto: LED parpadeando")
botao.when_pressed = apertou
botao.when_released = soltou
soltou() # estado inicial: parpadeando
print("Listo. Presiona el botón. Ctrl+C para salir.")
pause() # mantiene el programa en ejecución esperando eventos
Cómo verificar
- ✓El LED parpadea rápidamente (0,2 s encendido, 0,8 s apagado) al iniciar.
- ✓Al mantener presionado el botón, queda encendido y la terminal muestra «botón presionado».
- ✗¿No se enciende nada? Comprueba que usaste el número BCM (17) y no el físico (11), y que el LED no esté invertido.
✓ Seguro en GPIO
- ✓Señales de hasta 3,3 V; para un sensor de 5 V, usa un divisor de tensión o un convertidor de nivel.
- ✓Usa siempre una resistencia con el LED; pocos miliamperios por pin.
- ✓Conecta los cables con el Pi apagado.
✗ Daña el Pi
- ✗Conectar TX de un Arduino de 5 V directamente al RX del Pi.
- ✗Alimentar un motor, relé o servo desde un GPIO.
- ✗Tocar un pin de 5 V con un pin vecino mientras el Pi está encendido.
Por qué aprender
El pin de 3,3 V requiere las mismas precauciones que en el ESP32, pero el error sale más caro: un Pi 5 quemado cuesta mucho más que un ESP32. Y gpiozero, con eventos como when_pressed, es la forma más sencilla de poner un botón físico de parada en el robot; lo usarás en el proyecto 3.6.
Conceptos clave
🔋 Energía y calor en el Pi 5 dentro del robot
En la mesa de trabajo, el Pi 5 usa la fuente oficial de 27 W (5 V, 5 A, USB-C). Con una fuente más débil funciona, pero limita la corriente de los puertos USB y puede reiniciarse cuando la cámara y la IA consumen energía al mismo tiempo. En el robot no hay toma de corriente: la batería pasa por un regulador buck que entrega 5 V estables con suficiente corriente. Y al ejecutar visión, el procesador se calienta: sin el ventilador activo, reduce su velocidad automáticamente para protegerse, y tu detector se vuelve más lento sin avisar.
🌱 ¿Eres nuevo aquí?
Subtensión es cuando la tensión cae por debajo de lo necesario por un instante (por ejemplo, cuando arranca el motor); el Pi lo registra y puede reiniciarse. Throttling es cuando el propio Pi reduce la velocidad del procesador por calor o por falta de energía. Un regulador buck convierte una tensión más alta (la batería) en una más baja (5 V) con poca pérdida en forma de calor.
Cómo leer: la energía (ámbar) sale de la batería y se divide antes de llegar a cualquier placa. La rama superior, con el buck destacado, es la que mantiene estable el Pi. La línea gris discontinua recuerda que los GND de todas las placas deben estar conectados entre sí.
Objetivo: monitorear la temperatura y las alertas de energía mientras el robot trabaja. Guarda como ~/robo/saude.py y déjalo ejecutándose en una segunda terminal durante las pruebas de visión.
# Monitor de salud del Pi 5: temperatura y alertas de energía/calor
import subprocess, time
def temperatura():
with open("/sys/class/thermal/thermal_zone0/temp") as f:
return int(f.read()) / 1000 # viene en milésimas de grado
def alertas():
saida = subprocess.run(["vcgencmd", "get_throttled"],
capture_output=True, text=True).stdout
valor = int(saida.strip().split("=")[1], 16)
msgs = []
if valor & 0x1: msgs.append("SUBTENSIÓN AHORA")
if valor & 0x4: msgs.append("limitado AHORA")
if valor & 0x10000: msgs.append("hubo subtensión desde el arranque")
if valor & 0x40000: msgs.append("hubo limitación desde el arranque")
return msgs or ["energía OK"]
while True:
t = temperatura()
aviso = " CALIENTE: revisa el cooler" if t > 75 else ""
print(f"{time.strftime('%H:%M:%S')} {t:.1f} °C {', '.join(alertas())}{aviso}")
time.sleep(2)
Cómo verificar
- ✓Cada 2 s aparece una línea como "14:02:10 48.3 °C energía OK".
- ✓Con el cooler, la temperatura bajo carga de visión se mantiene muy por debajo de 80 °C.
- ✗¿"hubo subtensión"? Cambia la fuente, el cable USB-C o el buck por uno de mayor corriente antes de continuar.
✓ Hazlo
- ✓Cooler activo oficial instalado y ventilación en el chasis.
- ✓Buck dedicado al Pi, con margen de corriente y cables cortos y gruesos.
- ✓Apaga con sudo shutdown -h now antes de desconectar la batería.
✗ No lo hagas
- ✗Cualquier power bank: muchos no mantienen 5 A y el Pi se reinicia.
- ✗El Pi y los motores conectados al mismo regulador.
- ✗Pi encerrado en una caja sin ventilación, al sol.
💡 Batería de litio
Si usas LiPo o 18650, usa un pack con BMS (placa de protección), cárgalo siempre bajo supervisión y en una bolsa ignífuga, y nunca perfores ni aplastes la celda. Las reglas del módulo 1.5 se aplican el doble aquí, porque el Pi consume mucha más corriente que el ESP32.
Por qué aprender
La mayoría de los "bugs" de visión en un robot empieza aquí: el Pi se reinicia cuando el robot acelera, o el detector pierde la mitad de su velocidad después de unos minutos. Medir la temperatura y la subtensión permite distinguir un problema de energía de uno de código y evita que busques el error en el lugar equivocado.
Conceptos clave
✅ Resumen del módulo
Para profundizar
- Getting started (Raspberry Pi) — Imager, primer arranque y configuración
- Acceso remoto y SSH — todas las formas de acceder al Pi por la red
- Raspberry Pi OS — Python, venv y paquetes del sistema
- Documentación de gpiozero — LED, botón, sensores y ejemplos listos
- Hardware de Raspberry Pi — energía, GPIO, temperatura y cooler
Siguiente módulo
3.2 · Cámara y OpenCV: conectar la Camera Module 3, encontrar un objeto por su color y transmitir el video al navegador.