• Coche RC autónomo (I) - Introducción al proyecto

    A pesar de que aún tengo varios proyectos inacabados en marcha, este año tengo decidido hacer un side project (proyecto a ir haciendo poco a poco en ratos libres, si es que los tengo), para construir un coche teledirigido autónomo. Es decir, aprender sobre el coche autónomo y su funcionamiento (que es la base de los coches inteligentes y con conducción autónoma que ya estamos empezando a ver en las carreteras).

    Autonomous RC Car

    Para ello, y gracias a que Internet permite a la gente compartir información y conocimiento, me basaré en el proyecto de Zheng Wang, que es de los más completos, detallados y fáciles de entender que podréis encontrar sobre la materia (además de compartir íntegramente el código utilizado en Github). La fotografía que abre este post es de su proyecto. Así, algunos de los componentes necesarios son:

    Coche teledirigido

    Se podría hacer el chasis donde ir colocando los componentes con una impresora 3D, o reciclando materiales de andar por casa (cartones, botellas de plástico, etcétera), pero para simplificar el desarrollo usaremos un coche RC de los baratos, ya que así nos soluciona parte de otros problemas (dirección, montaje de servos, montaje de sistemas de alimentación, acoplamiento del motor a las ruedas motrices, etcétera). También hay chasis ya específicos para este tipo de proyectos (para ir montando todas piezas del vehículo), e incluso como paquete completo.

    Coche teledirigido

    Controlador (Raspberry Pi)

    Usaré una Raspberry Pi que tenemos para hacer pruebas e inventos en la oficina, junto con varios componentes adicionales (cámara y sensores infrarrojos). Al tener instalado GNU/Linux (Raspbian) podré instalar librerías programables y el código que desarrolle / adapte para utilizar toda la información obtenida (imágenes, datos de sensores, etcétera), de forma muy sencilla, a la vez que podré utilizar las salidas que dispone (junto con algo más de electrónica adicional) para activar y controlar los servos de dirección y de aceleración del vehículo.

    Raspberry Pi

    Sensores (cámara y sensor de infrarrojos)

    Para obtener datos que pueda procesar, utilizaré una cámara (para procesar imágenes y saber por dónde va la carretera) que ya tiene integrados sensores infrarrojos (para detectar obstáculos frontalmente y evitar colisión), que es compatible con la Raspberry Pi.

    Sensores: Cámara y sensor infrarrojos

    Redes neuronales y procesado

    El cerebro del coche autónomo (la inteligencia artificial AI) se basa en parte en redes neuronales que procesan las imágenes y datos de sensores disponibles (bien sean datos de radar, datos obtenidos mediante láser (LIDAR), imágenes, otros sensores instalados en el vehículo…).

    Con esos datos de entrada y el entrenamiento correspondiente la red neuronal puede obtener una salida en cada momento y situación (por ejemplo, acelerar, frenar, girar… según su posición y el entorno en el que se encuentre el vehículo)

    Red neuronal

    Usaré una librería para realizar el procesado de imágenes de la cámara como OpenCV (que es abierta y cualquiera la puede utilizar), o librerías para generar redes neuronales como Tensorflow.

    Asimismo, como en el mundo hay mucha gente y alguna es brillante en lo suyo, en Github hay compartidos cientos de proyectos con código de ejemplo para crear sus propios coches autónomos. Incluso hay gente que ha creado sistemas para controlar el vehículo de forma remota y autónoma utilizando un teléfono móvil Android

    Resultado esperado

    Tras la configuración correspondiente, el resultado esperado es un coche que sea capaz de avanzar por una carretera virtual marcada en el suelo sin ayuda humana, e incluso respetar señales y semáforos. Un ejemplo sería el que se puede visualizar en el siguiente vídeo:

    Más información sobre el proyecto

  • Coche RC autónomo - Construyendo un coche autónomo

    ¿Quieres construir un coche autónomo? Durante los próximos meses voy a intentar desarrollar uno de mis proyectos inacabados para aprender un poco más sobre varios temas:

    • Vehículos autónomos (self driving cars) y toda la tecnología que los van a hacer posibles, como son las redes neuronales y la visión por computador
    • Aprender a programar un poco de python para cacharrear con una Raspberry Pi 3 / Arduino UNO y poder hacer otros experimentos en el futuro
    • Hacer con Bruno un montón de inventos y preparar una presentación / espectáculo sobre los vehículos autónomos

    Autonomous RC Car

    Si también te gustan estos temas, a continuación puedes encontrar el índice de capítulos que lo va a componer para crear un vehículo autónomo paso a paso. Todo el código que utilice lo compartiré en el repositorio Github - jorgecasas/autonomous-rc-car, por lo que los comentarios y participación serán bienvenidos:

  • Haz todo lo que aprendas (sólo si sirve para algo)

    El otro día me compré un libro de papel sobre TDD (Test Driven Development). A pesar del kindle, me gusta llevar libros de papel en la mochila (de la piscina, o en la del ordenador). No es que tenga mucho tiempo para leer libros, pero alguno voy leyendo, intentando que la temática me sea útil para algo (desde útil para el trabajo hasta útil para saber un poco más de cualquier tema que me interese).

    A la cultura por la lectura

    Por ejemplo, algunos de los libros que he leído que más me han gustado (sin ninguna temática en concreto) son:

    • Makers, de Chris Anderson, sobre la nueva revolución industrial que va a suponer la impresión 3D
    • The Long Tail, también de Chris Anderson, sobre cómo los nichos de mercado y personalizados pueden triunfar gracias a que somos mucha gente diferente en el planeta e Internet nos facilita encontrarnos
    • De Saturno a Plutón, una maravilla de libro de Isaac Asimov sobre la formación y composición de nuestro sistema solar, y cómo poco a poco lo hemos ido conociendo (y lo que queda)
    • The Mars Project, de Wernher von Braun, sobre cómo pensaba en 1956 llevarnos a Marte.
    • The Nature of Code, sobre cómo realizar simulaciones del mundo real con un ordenador aplicando las matemáticas.
    • The blind watchmaker y Climbing Mount Improbable de Richard Dawkins, un tratado sobre la evolución de las especies.
    • The Hitchhiker’s Guide to the Galaxy, porque también está bien leer de vez en cuando ficción, y qué mejor ficción que la escrita por Douglas Adams. Recomiendo los 5 libros y en inglés…

    A raíz de todo esto, está muy bien (pero que muy bien) aprender cosas, incluso aquellas que no te vayan a servir para nada en tu día a día (aunque eso sea lo que te parezca). Lo que no está tan bien es aplicar todo lo que aprendas como sea.

    En ITERNOVA compartimos todas las semanas varios enlaces que nos parecen interesantes entre nosotros. De esta manera, si lees a lo largo de la semana unos 25 posts, compartes los que más interesantes te hayan parecido, realizando un filtrado previo a todos los compañeros que accederán directamente a esos posts más interesantes. Es una forma muy buena de compartir información y conocimiento rápidamente: Accedes a aquello que te puede ser útil.

    Eso sí, hay que tener en cuenta lo dicho: No siempre se puede aplicar todo lo que has aprendido. En alguna ocasión, algún desarrollador ha intentado aplicar todo lo que le llegaba en esta newsletter semanal de enlaces. Si un post hablaba de refactorizar, te refactorizaba. Si otro post te hablaba de clústers en MySQL, te modificaba la base de datos para meter clústers en su módulo de procesado de imágenes. Si un post te hablaba de servicios web SOAP te metía servicios web SOAP en una pantalla donde sólo tenía que haber un botón. Por supuesto, esto no llevaba a ningún lado, porque al final todo era difícil de mantener, difícil de entender, difícil que funcionara como debiera funcionar.

    Por tanto, recordad que todo gran poder (conocimiento) conlleva una gran responsabilidad, y que es igual de importante saber cosas que saber cuándo usar esas cosas.