Cuando conviertes un auto de radio control comercial en uno totalmente autonomo con Donkeycar, tarde o temprano aparece la misma pregunta: por que no puedo seguir usando el control remoto que vino con el auto, en vez de un joystick Bluetooth de consola. Durante mucho tiempo la respuesta fue incomoda. Ahora hay una mucho mejor, y se llama RC Hat.

En este tutorial vas a entender por que la Raspberry Pi sola no puede leer las senales de tu radio control, como el RC Hat resuelve ese problema de raiz, y como dejarlo funcionando paso a paso editando tu archivo de configuracion. Al final vas a poder manejar tu robocar con la emisora de siempre, que tiene mucho mas alcance que un joypad, ideal para correr al aire libre o entre varios autos.

RC Hat montado sobre una Raspberry Pi con la pantalla OLED encendida mostrando el estado de Donkeycar

Por que la Raspberry Pi no lee tu radio control directamente

El problema no es de software, es electrico y de temporizacion. La senal de un receptor RC es un pulso PWM con timing muy estricto, y ademas, segun estes en modo manual o autonomo, esa senal tiene que pasar por la Raspberry Pi y ser procesada o reenviada por el codigo Python. La Pi no tiene una forma limpia de meterse en ese proceso: aunque enchufaras los cables del receptor a sus pines, no puede manejar bien ni esas senales de entrada ni las de salida que necesitan el servo y el controlador de motor.

Por eso el consejo clasico era drastico: dejar de lado la emisora y el receptor RC, y usar en su lugar un joypad de consola junto con una placa controladora de servos por I2C. Funciona, pero pierdes el alcance del equipo RC y sumas un control extra que hay que cargar y emparejar.

Que hace distinto al RC Hat

El RC Hat se enchufa encima de la Raspberry Pi y te permite usar tu emisora y tu receptor RC tal cual, sin joypad y sin placa de servos aparte. No solo te ahorras plata: el equipo RC tiene mucho mas rango, lo que se agradece en pistas exteriores o cuando hay varios autos compitiendo cerca.

La placa es un circuito que lleva montado un RP2040-Zero, una pantalla OLED y los pines para conectar tu receptor RC, tus servos, encoders de rueda, otros dispositivos I2C y cualquier cosa que necesite alimentacion de 5V. La clave esta en el reparto de tareas: el RP2040 se encarga de toda la lectura de bajo nivel de la entrada RC y de la salida hacia los servos, y se comunica con la Raspberry Pi por puerto serial por hardware. Asi la Pi queda libre para lo que importa, que es correr la red neuronal de Donkeycar, mientras el microcontrolador hace el trabajo sucio de timing en tiempo real.

Placa RC Hat vista desde arriba con el RP2040-Zero, la OLED y los conectores rotulados de entradas, servos, encoders e I2C

El firmware en CircuitPython del RP2040 ya viene cargado de fabrica, asi que no deberias tener que tocarlo. Si tienes curiosidad o quieres modificarlo, el codigo esta publicado en el repositorio del proyecto (link al final).

Conexiones fisicas

Las conexiones son directas si respetas la orientacion. Usa cables RC de 3 hilos hembra a hembra para llevar las salidas de tu receptor RC a los headers de entrada de la placa:

  • Receptor canal 1 al header In 1
  • Receptor canal 2 al header In 2
  • Receptor canal 3 (si tienes un tercer canal) al header In 3
  • Servo de direccion al header Steer
  • Controlador de motor / ESC al header Throt

Una sola regla, pero importante: cuida bien la orientacion de cada conector. El cable negro (tierra, GND) va siempre por el lado de afuera, junto al borde de la placa. Si lo conectas al reves arriesgas el receptor o los servos, asi que vale la pena revisar dos veces antes de energizar.

Raspberry Pi con el RC Hat montado, junto al receptor RC y dos servos Hitec listos para conectar

Como tu equipo RC normalmente tiene solo 2 o 3 canales, el resto de los comandos y los cambios de modo (por ejemplo pasar de manual a autonomo) los vas a hacer desde la interfaz web por WiFi, no con botones dedicados como en un joypad.

Configurar Donkeycar para el RC Hat

Toda la magia del lado software pasa por tu archivo myconfig.py, dentro de la carpeta mycar. Vas a editar tres bloques: la pantalla, la salida de motor y la entrada de control.

Primero, para encender la pantalla OLED, descomenta y deja estas lineas asi en la seccion correspondiente del archivo:

Python
USE_SSD1306_128_32 = True
SSD1306_RESOLUTION = 2

Luego, para habilitar el RC Hat como salida, en la seccion "Drive train" descomenta y edita esta linea:

Python
DRIVE_TRAIN_TYPE = "MM1"

Para habilitar el RC Hat como entrada, en la seccion "Joystick" descomenta y edita lo siguiente:

Python
USE_JOYSTICK_AS_DEFAULT = True    
CONTROLLER_TYPE = 'MM1'

Y finalmente, en la seccion "Robohat MM1 controller", descomenta y edita el puerto serial:

Python
MM1_SERIAL_PORT = '/dev/ttyAMA0'

La pantalla se va a encender y mostrara el estado de Donkey cuando arranques con el comando habitual:

Bash
python manage.py drive

Cuando Donkey no esta corriendo la pantalla queda apagada, aunque sigue disponible por si quieres usarla con otro programa, ya que es una OLED I2C estandar y la puedes manejar con la libreria de Python correspondiente.

Habilitar el puerto serial por hardware

El ultimo paso es activar el serial por hardware en la Pi. Lo haces con la utilidad de configuracion:

Bash
sudo raspi-config

Entra a Interface Options / Serial Port, el mismo lugar donde activaste la interfaz I2C cuando instalaste Donkey. Cuando te pregunte si quieres una consola de login accesible por serial, responde que No; cuando te pregunte si quieres habilitar el hardware del puerto serial, responde que Si.

Pantalla de raspi config preguntando si quieres una consola de login por serial, con No seleccionado

Pantalla de raspi config preguntando si quieres habilitar el hardware del puerto serial, con Si seleccionado

Si estas usando una Raspberry Pi 5, con eso ya esta todo listo.

Si en cambio usas una Raspberry Pi 3 o 4 (o la Pi Zero 2), que curiosamente comparten el serial por hardware con la interfaz Bluetooth, te falta un paso mas. Tienes dos caminos.

El primero, mas simple: usar ttyS0 como puerto serial en el ajuste MM1_SERIAL_PORT de tu myconfig.py (en lugar de ttyAMA0). Esto suele funcionar bien, aunque el baud rate puede variar un poco con la velocidad de reloj. En la practica no ha dado problemas, pero si quieres ir mas seguro, esta el segundo camino.

El segundo, mas robusto: desactivar el Bluetooth y dejar el serial por hardware en ttyAMA0 como corresponde. Agrega esta linea al final de config.txt. Para editarlo:

Bash
sudo nano /boot/firmware/config.txt

Agrega al final:

Código
dtoverlay=disable-bt

Guarda y sal del editor Nano con Ctrl-O y Ctrl-X. Despues ejecuta en la linea de comandos:

Bash
sudo systemctl disable hciuart

Reinicia cuando termines y todo deberia quedar funcionando. Ese dtoverlay=disable-bt le dice al kernel que libere la UART completa (la PL011) que normalmente queda reservada para el Bluetooth, y systemctl disable hciuart evita que el servicio que inicializa el modulo BT vuelva a tomar el puerto en el siguiente arranque. Por eso solo aplica a las Pi 3, 4 y Zero 2: la Pi 5 ya expone una UART dedicada para el header GPIO y no necesita este truco.

Variantes y mejoras

Una vez que tengas el RC Hat andando, hay varias formas de sacarle mas provecho que no estan en la guia original:

  • Suma encoders de rueda para odometria: la placa trae headers de encoders. Conectando un par de encoders opticos o magneticos a las ruedas puedes medir velocidad real y distancia recorrida, dato muy util para entrenar modelos mas estables o para telemetria.
  • Aprovecha el bus I2C para mas sensores: como el RC Hat deja libre el I2C, puedes agregar un IMU (por ejemplo un MPU6050) para conocer la inclinacion y aceleracion del auto, o un sensor de distancia, sin pelear con el microcontrolador por el timing.
  • Reutiliza la OLED para tu propio HUD: cuando Donkey no esta corriendo, la pantalla queda libre. Es una SSD1306 I2C estandar, asi que con la libreria de Adafruit puedes mostrar voltaje de bateria, IP del auto o el modo actual con un script propio.

Personalizacion para Chile

El RC Hat (tambien llamado Donkeyhat) es una placa de nicho del ecosistema DIY Robocars y no forma parte del catalogo de MechatronicStore, igual que los servos Hitec y el equipo de radio control de hobby. Eso si, el corazon del proyecto, la Raspberry Pi, lo encuentras aca con stock rotativo:

  • Raspberry Pi 5 es la opcion recomendada para este montaje, porque expone una UART dedicada y te ahorra el paso de desactivar el Bluetooth.
  • Raspberry Pi Zero 2 W es la alternativa compacta y mas economica si te alcanza el procesamiento; recuerda que al compartir UART con Bluetooth necesitas el ajuste extra de config.txt.

Ambas placas rotan stock seguido, asi que conviene revisar disponibilidad en MechatronicStore antes de armar tu pedido. Para la microSD, busca una de buena velocidad (clase 10 o A1 en adelante) para que Raspberry Pi OS y Donkeycar carguen rapido.

Si recien partes en el mundo de los robocars y no tienes el auto RC base, conviene reutilizar un auto de radio control 1/10 o 1/16 que ya tengas: el servo de direccion y el ESC del propio auto se enchufan directo a los headers Steer y Throt de la placa.

Recursos

Version chilena inspirada en el tutorial de DIY Robocars, con referencias a componentes en stock local en MechatronicStore.