LIDAR asistido por ODROID: Detección y medición lumínica con el ODROID-XU4

LIDAR: Light Detection & Ranging with the ODROID-XU4

Hace poco encargué un ODROID-XU4 para poner en marcha mi último proyecto, un Earth Rover, un robot explorador de 6 ruedas que puede desplazarse tanto por áreas internas como externas de forma autónoma. Estoy utilizando un sistema LIDAR extraído de una vieja aspiradora robotizada, la Neato XV-11 LIDAR. Este proyecto cubre la interconexión de ODROID con el LIDAR, la recepción de las mediciones de lectura y su integración en un sistema SLAM, localización y mapeo simultáneo con la finalidad de crear un mapa del área explorada. Elegí ODROID porque era la única placa lo suficientemente potente como para procesar las mediciones sobre un mapa en tiempo real.

Tiene ocho núcleos, cuatro se ejecutan a 2Ghz y los cuatro a 1.6Ghz. ¿Recuerdas tu famoso Pentium 133Mhz? Esta placa es quince veces más rápida y lo hace cuatro veces al mismo tiempo. Además, cuenta con otros cuatro núcleos simplemente por pura diversión y se puede introducir dentro de una taza de café. ¿Cuánto cuesta? 59$. Conéctale el cable HDMI, la fuente de alimentación, el teclado y el ratón USB, el adaptador wifi USB y enciéndelo. En primer lugar, ejecuta los siguientes comandos para actualizar completamente tu sistema:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
Gracias al conjunto de instrucciones de multiprocesamiento NEON, el rendimiento es bastante bueno, http://bit.ly/2zG12Ix, para tareas específicas como SLAM, incluso comparandolo con la potente Raspberry Pi, tal y como se muestra en la Figura 1.

Figura 1 – Comparando las lecturas por segundo de varios dispositivos SBC

Primero, clona el sistema de instalación e inícialo:

$ sudo apt-get install git
$ git clone https://github.com/tjacobs/betabot
$ cd betabot/install
$ ./install
Ahora que tenemos muchas y muy buenas aplicaciones, como Python, PIP, OpenCV, FFMPEG y Alsa, vamos a instalar BreezySLAM:
$ git clone https://github.com/simondlevy/BreezySLAM
$ cd BreezySLAM/python
$ sudo python setup.py install
$ cd ../examples
$ make pytest
Figura 2 – Una imagen preliminar de una habitación SLAM usando LIDAR

Tal y como se muestra en la Figura 2, ¡Estamos viendo una sala mapeada con SLAM! desde el propio archivo de datos del sistema, de modo que aún no disponemos de ningún LIDAR físico externo. Vamos intentar ver los objetos en vivo, lo cual requiere matplotlib:

$ sudo apt-get install python-matplotlib
$ make movie
Figura 3 – Película en vivo de una habitación SLAM usando LIDAR

Tal y como muestra la Figura 3, podemos ver cómo se ejecuta y se va generando el mapa. El siguiente paso es probar LIDAR, que requiere xvlidar, pip y pyrserial:

$ git clone https://github.com/simondlevy/xvlidar
$ sudo python setup.py install
$ python lidarplot.py
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ sudo pip install pyserial
El resultado ahora es:
SerialException could not open port /dev/ttyACM0
Puesto que está intentando acceder al puerto serie, podemos verificar el dispositivo:
$ ls /dev/tty*
$ /dev/ttyACM99
Resulta que el dispositivo está realmente en otro puerto:
$ /dev/ttySAC0
Para saber dónde conectar el LIDAR, podríamos consultar el manual de ODROID-XU4 en http://bit.ly/2xYZhco, pero el caso es que no se menciona. La información que necesitamos está en http://bit.ly/2hYj8NQ, la Figura 4 muestra los pines que estamos buscando.

Figura 4 – Configuración GPIO para un proyecto LIDAR en el ODROID-XU4

Los pines de recepción y transmisión son UART_0.RXD (#6) y UART_0.TXD (#8). Tenemos también la puesta a tierra (#2) y la alimentación de 5v (#1). La mayoría de los sensores Lidars XV son a 5v, tal y como se menciona en http://bit.ly/2gBSiPc. Utilice el pin de 1.8v para alimentar el motor LIDAR, que como era de esperar proporciona suficiente amperaje. Tras ejecutar lidarplot.py nuevamente, se obtiene un LIDAR giratorio y un gráfico en blanco con un único punto, suele aparecer “Checksum fail” alguna vez que otra cuando se agitan las clavijas. De modo que se consigue algo, pero nada útil todavía, tal y como muestra la Figura 5.

Figura 5 – Resultado inicial de la configuración LIDAR en el ODROID-XU4

Después de añadir algunas impresiones, observo que el puerto serie generaba muchos 82 a lo largo de la matriz de 360 grados. Supongo que eso significa “Not spinning fast enough”, porque utilicé una Raspberry Pi 2 para generar el voltaje correcto a 3.3v, y fui capaz de conseguir lecturas LIDAR. También se actualiza muy rápido, ya que cuando colocaba mi mano en frente, el cambio quedaba reflejado en un segundo más o menos.

Figura 6 – Resultado adaptado usando un motor 3.3v de la configuración LIDAR en el ODROID-XU4

Ahora estamos listos para ejecutar la aplicación SLAM:

$ cd BreezySLAM/examples
$ python xvslam.py
Figure 7 – SLAM sobre el ODROID-XU4

Para comentarios, preguntas y sugerencias, visita el artículo original en: http://bit.ly/2xX6ObL.

Be the first to comment

Leave a Reply