Como ya comenté en el post Coche RC autónomo (I) este año pretendo realizar un side project tecnológico un tanto especial.

Autonomous RC Car

Tras analizar los requisitos he ido pidiendo los materiales que vamos a necesitar y ya están comenzando a llegar:

  • Coche teledirigido (escala 1:20)
  • Raspberry Pi 3 (ya la teníamos en la oficina), que ya cuenta con adaptador WiFi
  • Sensores requeridos para la Raspberry Pi 3: Cámara y sensores de infrarrojos
  • Cinta para marcar el circuito por el que el coche deberá circular de forma autónoma, una vez tengamos el prototipo creado.

En principio el proyecto que me iba a servir de referencia era del de Zheng Wang, el cual ofrecía su código fuente de forma abierta en Github - hamuchiwa/AutoRCCar. Este proyecto consistía, brevemente explicado sin detalles, en lo siguiente:

  • Colocar la Raspberry Pi en el vehículo teledirigido
  • La Raspberry Pi tomaría las imágenes y las enviaría por WiFi al ordenador (conectado en la misma red local)
  • El ordenador procesaría las imágenes mediante una red neuronal.
  • Las diferentes salidas obtenidas en la red neuronal (acelerar, frenar, girar a izquierda y girar a derecha) las transmitiríamos a una placa Arduino conectada mediante USB al ordenador.
  • Las salidas del Arduino estarían conectadas a los cables del mando a distancia del coche teledirigido, por lo que la acción a realizar (acelerar, frenar, girar, etcétera) las enviaría el propio mando a distancia al vehículo. Es decir, el Arduino controlaría el mando a control como si se tratara de un humano.

De esta forma no tendríamos que tocar el vehículo, sólo el mando a distancia. El problema es que necesitamos una placa Arduino adicional.

Buscando en Internet (vuelvo a decir que Internet es una herramienta increíble si se utiliza bien) he encontrado otros proyectos parecidos interesantes, como el de Shaun Butler, que también tiene el código compartido en Github - Pi Car. Este proyecto no es en sí de conducción autónoma sino de control del vehículo teledirigido desde el móvil (y quien dice móvil, dice desde el ordenador), utilizando únicamente una Raspberry Pi. El proceso que sigue es el siguiente:

  • Colocar la Raspberry Pi en el vehículo teledirigido.
  • Instalar en la Raspberry Pi varias librerías / aplicaciones para controlar las salida PWM (Pulse Width Modulation, o modulación por ancho de pulsos), de manera que conectaríamos dichas salidas de la Raspberry Pi directamente a los cables del propio coche teledirigido que se encargan de controlar los servos de acelerar / frenar, girar a izquierda o derecha.
  • La Raspberry Pi estaría conectada por WiFi al teléfono móvil (en la misma red) o al ordenador. Utilizando aplicaciones ya existentes o programando la API correspondiente, desde el ordenador podríamos lanzar comandos directamente a la Raspberry Pi de manera que podamos indicarle que acelere o que gire desde el propio ordenador.

Así, sin necesidad de Arduino extra, tendríamos que modificar el coche teledirigido para conectarle las conexiones como corresponda (y no el mando a distancia). Y en este punto ya podríamos realizar los pasos del proyecto anterior relacionados con la conducción autónoma:

  • La Raspberry Pi tomaría las imágenes y las enviaría por WiFi al ordenador (conectado en la misma red local)
  • El ordenador procesaría las imágenes mediante una red neuronal.
  • Las diferentes salidas obtenidas en la red neuronal (acelerar, frenar, girar a izquierda y girar a derecha) las transmitiríamos directamente a la Raspberry Pi desde el ordenador utilizando la WiFi (en la misma red local ambos equipos)

Por tanto, esta podría ser la forma en la que pretendemos controlar el vehículo, ya que es muy interesante también poder controlar de forma manual desde el ordenador el coche teledirigido, como si de un rover en suelo marciano se tratara, controlándolo desde lugares remotos.

En la búsqueda de información he encontrado además otros muchos proyectos interesantes para obtener el mismo resultado. Si os interesa saber más podéis acceder a Donkey Car, que tiene pasos muy detallados de cómo crear un vehículo autónomo muy autónomo (que incluso compita en carreras con otros vehículos).

En este caso, es la propia Raspberry Pi la que implementa la red neuronal mediante el uso de OpenCV (procesado de imágenes y visión por computador) y Tensorflow (red neuronal con Machine Learning para detectar señales, semáforos, etcétera). Así, directamente podríamos instalar estas librerías (todas ellas opensource, código abierto que todo el mundo puede utilizar, modificar, mejorar y compartir) para que sea el propio coche el que conduzca, sin necesidad de ordenador externo (aunque lo seguiremos utilizando para ver qué está viendo y haciendo la red neuronal y dar los comandos de arrancar el vehículo y apagarlo).

Más información sobre el proyecto