(Imagen: hackarobot.com)
Cuando se habla de Raspberry Pi, lo primero que viene a la cabeza es algún tipo de emulador de juegos retro, pero esta placa sirve para mucho más, como por ejemplo hacer robots. A pesar de que hay infinidad de documentación sobre como montar una Raspberry Pi para jugar o como media center barato, no hay muchos proyectos que expliquen en detalle cómo hacer un sencillo robot. La Raspberry Pi ofrece un montón de posibilidades para hacer robots sencillos utilizando una gran variedad de lenguajes de programación y deja la posibilidad de expandir sus funcionalidades con dispositivos externos. Si te interesa saber cómo hacer un robot con Raspberry Pi, pero te encuentras un poco perdido, intentaré dejarte a continuación agunas directrices para saber por dónde empezar.
Cómo hacer un robot con Raspberry Pi
Qué placa elegir?
A día de hoy, todas las placas tienen un funcionamiento similar, pero sus diferentes variantes ofrecen normalmente una mejora de potencia, tamaño o conectividad. Por ejemplo, los modelos B+ actualmente ofrecen desde un solo núcleo a 800Mhz en el caso de la más básica, hasta 4 núcleos a 1.2 GHz con conectividad Wifi y Bluetooth en el caso de la Raspberry Pi 3. Por otro lado, la Raspberry Pi Model A que es más humilde en prestaciones, ofrece un tamaño muy reducido comparado con sus otras hermanas. Pero desde luego la que se lleva la palma en cuanto a tamaño es la Raspberry Pi Zero de la que hemos hablado en este vídeo y es una excelente candidata para todo tipo de proyectos de robótica. Actualmente es difícil de conseguir debido a la baja producción y alta demanda, pero conviene tenerle echado el ojo. Dependiendo el tipo de robot que quieras montar, deberás decidir con cual te quedas. Si simplemente vas a controlar unos motores y algún que otro sensor, puedes utilizar cualquiera de ellas. Ten en cuenta que necesitarás con total seguridad modificar varias veces el código del robot y/o configuración de la Pi, así que si tienes conectividad inalámbrica será menos doloroso y más práctico. Si tienes una Pi 3 será pan comido ya que tiene un chip Wifi integrado, en los otros modelos, tendrás que utilizar algún tipo de stick USB Wifi (cuidado, no todos funcionan bien!). Ten en cuenta que el caso de la Raspberry Pi Zero, no proporciona suficiente corriente para ese tipo de adaptadores y deberás utilizar un Hub USB alimentado. De cierta manera, todo lo sexy de esa placa se pierde en este tipo de cosas y a final no queda todo tan compacto como uno espera.
¿Que lenguaje de programación utilizar?
Este punto me parece muy interesante ya que al utilizar un sistema Linux (vamos, un sistema operativo), tenemos la posibilidad de utilizar varios lenguajes de programación en función de dónde nos sintamos más agusto y también por lo general que nos resulte el más sencillo. Si quieres, puedes programar los registros del procesador directamente en Assembler y sentirte cual Espartano protegiendo Esparta e intentar explicarselo a tu mujer sin sentirte rollo Forever Alone. Pero eso, aunque sea muy gratificante, obviamente no sería muy eficiente. Por ese motivo, te propongo varias opciones:
- C/C++
Suena crudo y muchos lo ven como la magia negra de la programación, pero con él puedes compilar un programa nativo que correrá en tu sistema como el viento por las colinas de Mordor. Generalmente el rendimiento en cuanto a velocidad de ejecución es el más rápido con éste lenguaje y en el mundo Linux es el rey. Te fuerza a hacer las cosas bien y quizás no sea tan permisivo como otros lenguajes, pero si lo dominas un mínimo, no vas a querer otra cosa, te lo aseguro. Úsalo cuando necesites sobre todo velocidad de ejecución al realizar muchos cálculos (telemetría, cinemática inversa, etc).
- Bash
Si, no solo sirve para lanzar scripts sino que también puedes acceder a los GPIO desde Bash y controlar dispositivos físicos externos. Es un sistema de script muy potente que permite hacer muchas cosas, aunque quizás para controlar un robot no sea lo más adecuado, si ya conoces Bash y te sientes cómodo con él, quizás sea un buen punto de partida. Eso sí, para luego migrar a otro lenguaje más completo para este tipo de aplicaciones.
- PHP
Dirás tu ¿qué pinta este aquí? Pues aunque no esté directamente relacionado con el control de un robot en una Raspberry Pi, es muy posible que te interese conocer un mínimo de este lenguaje de script diseñado principalmente para entornos web. Es muy común y práctico tener un servidor web lanzando algunos scripts en PHP y así poder ver algunos valores, estadísticas en tiempo real de los que está pasando, estado de los sensores etc. No podrás controlar directamente hardware sin la ayuda de otro tipo de scripts externos y muy probablemente tendrás/necesitarás combinarlo con algún motor de base de datos como MySQL para registrar cosas de forma permanente. No es dificil de poner en marcha y hay mucha documentación sobre esto, pero ten en cuenta que PHP es un intérprete y necesitarás instalar un servidor web como Apache2 o incluso mejor Nginx que es mucho más ligero, junto con diversos módulos para su ejecución y tendrás que lidiar y mantener todo ese sistema, lo cual requiere de algo de práctica y conocimientos sobre este tipo de servidores.
- Python
Lo he dejado para el final por que si lo pongo de principio, no tendrías en cuenta las otras opciones ;) Python es un lenguaje extremadamente común, fácil de aprender y a la vez muy potente que tiene además una enorme comunidad por detrás. Puedes encontrar ejemplos en Python de casi cualquier cosa y facilita mucho las cosas a la hora de programar. Además si no tienes mucha experiencia programando, es un lenguaje con una sintaxis muy sencilla, permisivo hasta cierto punto y que te permite llegar bastante lejos. La propia Fundación Raspberry tiene un completo manual de Python que te ayuda a enternet cómo funciona y aprender desde cero.
Seguramente me he dejado en el tintero algún que otro lenguaje que no he mencionado aquí, pero con esto ya tienes con qué entretenerte un buen rato.
Librería WiringPi
No puede dejar de recomentar la librería WinringPi ya que la puedes utilizar con C, con Python, Ruby etc y permite acceder a los GPIO de una forma muy sencilla y cómoda. Es una librería especialmente diseñada para Raspberry Pi. Además tiene funciones y módulos para utilizar tanto el bus SPI como el I2C, usados por muchos sensores y pantallas LCD.
Librería Johnny-Five (Javascript)
Si lo que te va es el Javascript y tienes algo de experiencia con ese lenguaje pero no te has atrevido a conectar tu código con hardware físico, no te pierdas la librería Johnny-Five. Es una librería muy completa, con una muy buena documentación y que es compatible con una gran variedad de sistemas como Arduino y por supuesto Raspberry Pi.
Controlando motores
Lo primero que hay que tener en cuenta es que los pines de las placas Raspberry Pi funcionan a 3.3V. Eso es muy importante al conectar dispositivos externos. Si bien puedes conectar todo tipo de drivers de motores en los pines GPIO, también existen placas especialmente diseñadas para tal efecto, como esta con un chip DRV8835 y te facilitan bastante la vida. Eso no quiere decir que no puedes conectr dispositivos que funcionen a 5V, con la ayuda de un conversor de niveles es posible sin problema.
Respecto a los motores, todo depende del tipo de robot, su peso, velocidad, fuerza etc. No es lo mismo montar el clásico siguelíneas, que un robot sumo o uno que tenga que correr en exteriores por terrenos irregulares. Todo depende de cómo te lo quieras montar, pero debes tener en cuenta siempre que debes dimensionar el controlador en función del consumo total de los motores que uses. No conviene quedarse corto o muy justo, recuerda que los motores de por sí dan mucho picos de consumo durante su funcionamiento. Mejor tener siempre un driver con potencia de sobra. Si tienes dos motores de 1A cada uno, no te limites a un controlador de 2A, mejor uno de 3A o más. Se calentará menos y también durará más.
Alimentación
Una Raspberry Pi necesita 5V y al menos 1.5A para poder funcionar (2.5A para la Pi 3) y a no ser que quieras dejarlo colgado un cable de alimentación permanente a tu robot, deberás utilizar baterías. Descarta las típicas baterías AA ya que no van a durar ni un suspiro debido a su baja capacidad de carga, así que directamente tendrás que ir a baterías de tipo LiPo (lithium polymer) que son muy eficientes y además recargables. Este tio de baterias funcionan con celdas de 3.7V cada una. Con un celda, tendremos un voltaje de 3.7V y combinando varias podremos conseguir 7.4V, 11,1V etc. No unas tu mismo celdas individuales, mejor hazte con una batería para uso en Radio Control que tienen una alta capacidad de descarga. Aunque también puedes utilizar una sola celda y con la ayuda de un conversor como este conseguir los 5V que necesita la Pi. También puede incluir un sistema de recarga por USB con el PowerBoost de Adafruit.
Otro tipo de batería muy compactas y que funcionan de la misma manera son las de tipo 18650. Tanto este como las LiPo de las que hablaba antes, necesitan de cargadores especificos ya que pueden acumular mucha energía y ser potencialmente muy peligrosas. ¡La seguridad lo primero!
Por último y dado que en un robot tenemos que alimentar varios sistemas a parte de la Raspberry Pi (motores, sensores etc), yo prefiero tener una batería para cada cosa en lugar de una sola para todo. De esa forma evitas posibles interferencias por los picos en la alimentación que puedan generar los motores en los arranques y además, te permitirá cambiar las baterías por otras cargadas sin tener que reiniciar o apagar la Raspberry Pi.
Conclusiones
Como ves, para hacer un robot con una Raspberry Pi hay que tener en cuenta unos pocos factores, pero el sistema ofrece muchas posibilidades. Podremos aventurarnos en mundos como el reconocimiento visual, navegación por telemetría, telepresencia con webcams y cosas que serían impensables o demasiado complejas con placas tipos Arduino y similares.
Espero que te hayas entretenido con esta larga lectura y te animes a desarrollar tu propio robot con Raspberry Pi, No es una guía definitiva y probablemente me he dejado en el tintero algunas cosas por no alargarlo demasiado, pero en cualquier caso no dudes en dejar tu comentario y lo vamos habando. Mientras tanto, ¡a cacharrear se ha dicho!