R + Arduino + ROS + ultrasonic sensor HC-SR04

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Con el objetivo de ilustrar el uso de frameworks robóticos de programación en la asignatura “Programación de Robots”, y aprovechando el trabajo previo que comenté aquí, este curso voy a incluir un ejercicio de clase que consiste en que un sónar HC-SR04 conectado a un Arduino envíe las medidas de distancia a un nodo ROS que mueve la tortuguita en función de la cercanía a los obstáculos, y además las distancias se leen y representan gráficamente usando R. Espero que a mis alumnos les guste 🙂

In order to explain how to use robotic frameworks in a “Robot Programming” course, and reusing the previous work I commented here, I have prepared a class exercise where an ultrasonic sensor HC-SR04 connected to an Arduino sends distance measurements to a ROS node which moves the turtle according to how close the obstacles are detected, and also the distances are read and drawn using R. I hope my students enjoy it 🙂

ros1ros2

Turtlebot 2 movement analysis

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]

Ahora que ya tenemos el Turtlebot 2 andando, hemos querido caracterizar los motores cuando se mueven con la carga inicial del robot. Para ello, hemos seguido los siguientes pasos, que están documentados en el vídeo al final del post; en mi repositorio de GitHub está el código C++, Matlab y R:

  • Hemos creado un nodo ROS que mueve al robot con velocidad lineal x=0.1 m/sec, y almacena en fichero las medidas de los encoders de ambos motores junto con dos marcas de tiempo: las asociadas a los mensajes ROS, y las grabadas por la base Kobuki.
  • Después, analizamos las medidas con Matlab.
    • Primero, hemos representado gráficamente las medidas de los ticks frente a los dos tipos de marcas de tiempos (tanto relativas como absolutas).
    • En segundo lugar hemos representado la velocidad de cada rueda, entendiendo velocidad como la relación entre ticks y variación de tiempo. En el vídeo se observa que la velocidad aparece como rads/sec; para hacer la transformación nos hemos basado en las especificaciones de la base Kobuki. Si manualmente se hace el cálculo V = r*ω se observa que todo es correcto.
    • En tercer lugar, aprovechando la Control Toolbox de Matlab, hemos hecho una identificación de los motores de las ruedas usando un método de aproximación mediante sistemas de primer orden con retraso. La K y la τ obtenidas se han tomado como base para hacer después un reajuste manual, que se adapta bastante bien a los datos reales (sobre todo en el caso del motor derecho).
  • Finalmente, hemos hecho una representación muy básica (aún sin usar ggplot2, estamos trabajando en ello 😉 ) en R.


[En español]

Now that our Turtlebot moves, we have characterized its motors when they are moving bearing the initial load of the robot. We have followed these steps, which are documented in the video at the botton of this post; my GitHub repository stores the C++, Matlab and R code:

  • We have created a ROS node that makes the robot move with a linear x speed=0.1 m/sec, and then writes to a file the measurements of both encoders along with two timestamps: those related to ROS messages, and those taken by the Kobuki base.
  • Then, we have analysed the data using Matlab.
    • First, we have plotted the ticks values versus both timestamps (both relative and absolute).
    • In the second place, we have plotted the speed of each wheel, where speed is the relationship between ticks and time difference. You can see in the video that speed is represented as rads/sec; we transformed the values using the Kobuki mobile base specifications. If you do your maths by hand (V = r*ω), you will see that calculations are correct.
    • In the third place, using the Control Toolbox provided by Matlab, we did the identification of both motors with an approximation using a first order system with delay. The resulting K and τ are the basis for a manual recalculation, which fits quite well to the real data (especially, for the right motor).
  • Finally, we prepared a very basic R plotting (still without ggplot2, but we are working on it 😉 )

R + Arduino + ROS

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]

Como ya comenté en un post anterior, es posible integrar Arduino dentro de ROS. Por otra parte, hay un paquete rosR muy interesante que permite crear scripts R trabajando también en ROS; la documentación del paquete es completa y cubre tanto la parte ROS como la parte R:

Combinando ambos paquetes se pueden hacer cosas majas. Por ejemplo, en el vídeo al final del post se muestra cómo un nodo ROS envía las lecturas de un sensor FSR conectado a un Arduino (Duemilanove, en este caso) por un topic al que está suscrito un script R que muestra un plot con esos valores sobre la marcha. El código del sketch y del script, basados en los ejemplos proporcionados en la documentación de ambos paquetes, están en mi Github.

En este caso, he usado la máquina virtual Nootrix con ROS indigo 32, ya que me resulta útil por motivos docentes. La misma combinación Arduino-R también funciona correctamente en un Xubuntu 14.04.3 de 64 bits con ROS indigo instalado.

Por probar, he compilado la versión 64 bits de rosR en un Ubuntu Mate 15 con ROS jade distribuido entre un portátil y el netbook del Turtlebot, y también funciona… ¡¡Turtlebot, R te espera :)!!


[En español]

As I commented in a previous post, it is possible to use Arduino with ROS. Furthermore, there is a very interesting rosR package that allows to build R scripts also in ROS; the documentation of this package is complete and covers the ROS point of view as well as the R perspective:

You can build nice things using both packages. For example, the video at the bottom of this post shows how a ROS node sends the readings of a FSR sensor connected to an Arduino (Duemilanove, in this case) through a topic; a R script which is subscribed to that topic plots those values on the fly. The code of the skecth and the script, based on the examples provided in the documentation of both packages, is in my Github.

You can see in the video that I use the Nootrix ROS indigo 32 virtual machine, since I find it useful due to teaching reasons. The same Arduino-R combination also works fine under a Xubuntu 14.04.3 64 bits with ROS indigo.

I tried to compile the rosR 64 bits version under Ubuntu Mate 15 with a ROS jade distributed between a desktop and the Turtlebot netbook, and it also works… Turtlebot, R is waiting for you 🙂

Playing with Leaflet and R :)

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Pequeña prueba con Leaflet y R… una combinación estupenda 🙂 Los datos corresponden al mes de Mayo de 2015 del proyecto Málaga City Sense, y representan información sobre operadores, estado de carga y modelo (aparece como un pop-up) de teléfonos inteligentes usados en Málaga; están disponibles en el Portal de Datos Abiertos del Ayto. de Málaga. El código R está disponible en mi GitHub.

This is a small test using Leaflet and R… a really cool combination 🙂 The data belong to the Málaga City Sense project (May 2015), and they represent information about phone providers, battery level and devices (as a pop-up) of smartphones deployed in Málaga; they are available at the Open Data Website of the Málaga Townhall. The R code can be found at my GitHub.

R + RStudio + PostGIS + Xubuntu 14.04/Debian jessie

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]

Estos son los pasos para poder obtener datos de una base de datos PostGIS desde RStudio trabajando en Xubuntu 14.04 o en Debian jessie:

  1. Deben estar instaladas las librerías libgeos, libgeos-c1, libgeos-dev y libgeos++-dev; las dos primeras ya las tenía instaladas tanto en Xubuntu como en jessie, pero las dos últimas las he tenido que añadir desde Synaptics, según se indica en este enlace de AskUbuntu.
  2. En RStudio, hay que instalar y después cargar los paquetes RPostgreSQL, rgeos y sp.
  3. Después hay que crear la conexión a la base de datos:

    drv <- dbDriver(“PostgreSQL”)

    con<- dbConnect(drv,dbname=’tuBD’,host=’localhost’,port=5432,user=’tuUsuario’,password=’tuPw’)

  4. Para obtener datos que utilicen información extraída de una tabla con datos espaciales, deben usarse las funciones PostGIS habituales de acceso a geometrías:

data <- dbGetQuery(con,”SELECT nongeocolumn, ST_AsText(geocolumn) FROM yourtable”)

Una vez finalizado el trabajo con la BD, se cierran conexión y driver:

dbDisconnect(con)
dbUnloadDriver(drv)

Los pasos 2-4 están explicados en este enlace de R-bloggers. A partir de él he subido a Github un pequeño script R (accessDB.R) que realiza la instalación y carga de paquetes, y la conexión a la base de datos.


[En español]

These are the steps for retrieving data from a PostGIS database using RStudio under Xubuntu 14.04 or under Debian jessie:

  1. Libraries libgeos, libgeos-c1, libgeos-dev y libgeos++-dev must be installed; both Xubuntu and jessie had the first two of them installed, but I had to add the last ones from Synaptics, as it is explained in this link at AskUbuntu.
  2. In RStudio, you have to install and then load RPostgreSQL, rgeos y sp packages.
  3. After that, you have to create the connection to the database:

    drv <- dbDriver(“PostgreSQL”)

    con<- dbConnect(drv,dbname=’yourDB’,host=’localhost’,port=5432,user=’yourUser’,password=’yourPw’)

  4. In order to get  information from tables which store geospatial data, you have to use the usual PostGIS functions for handling geometries:

data <- dbGetQuery(con,”SELECT nongeocolumn, ST_AsText(geocolumn) FROM yourtable”)

Once the work with the DB is finished, connection and driver must be closed:

dbDisconnect(con)
dbUnloadDriver(drv)

Steps 2-4 are explained in this link at R-bloggers. From the content in this post I have uploaded to Github a little R script (accessDB.R) that installs and load the required packages, and then connects to a database.

 

Digging numbers+R+PostgreSQL

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]
Este año quiero centrarme en Estadística para Arqueología, usando R y una base de datos PostGIS; esta es la información de partida que estoy empleando:


[En español]
This year I want to focus in Statistics for Archaeology, using R and a PostGIS database; this is the starting info I am working with: