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 English]
ROS puede conectarse con un Arduino sin problemas. Mi objetivo es comprobar si esta conexión puede hacerse a través de la máquina virtual que proporciona Nootrix, ya que es la que utilizo en clase, puesto que facilita el trabajo con máquinas Windows, y también es más rápida y sencilla de instalar para los alumnos.
En mi máquina tengo instalado Xubuntu 14.04, uso Virtual Box 4.3.10, y la máquina virtual que he instalado es la de ROS Indigo de 32 bits. Una vez que has instalado la máquina de ROS en Virtual Box, hay que seguir estos pasos:
Si tu usuario no está en vboxusers, añádelo con sudo adduser tu_usuario vboxusers (o sudo usermod -aG vboxusers tu_usuario).
Arrancar la máquina virtual y escoger el Arduino de los dispositivos USB en el menú Dispositivos de Virtual Box.
Seguir las instrucciones de instalación de Arduino (con catkin); hay una pequeña variación en la máquina Nootrix: el directorio de sketches está en $HOME/Arduino.
Una vez instalados los elementos básicos para trabajar con Arduino en ROS, veamos qué hace falta para ejecutar uno de los ejemplos básicos incluidos en la instalación de Arduino: HelloWorld.ino, en el que el Arduino publica en un topic el mensaje “hello world!”.
ROS can be easily connected to an Arduino board. But I wanted to check if this connection could be done with the Nootrix virtual machine, the one I use for my classes since it makes easier to work with ROS if you have Windows machines, and it helps the ROS installation for the students.
My machine runs on Xubuntu 14.04, I use Virtual Box 4.3.10, and the virtual machine I have chosen is ROS Indigo 32 bits. Once you have installed the ROS virtual machine on Virtual Box, you should follow these steps:
If your user does not belong to vboxusers group, you should add it with sudo adduser your_user vboxusers (or sudo usermod -aG vboxusers your_user).
Run the virtual machine and choose Arduino from the USB devices listed on the Virtual Box Devices menu.
Go to Arduino installation and follow those steps (use catkin); there is a sligth modification on the Nootrix machine: the sketches folder is stored in $HOME/Arduino.
Now we have all the basic elements to work with Arduino under ROS; let’s see what else we need to run one of the basic examples included with the Arduino installation: HelloWorld.ino, which makes Arduino publish a “hello world!” message in a topic.
Follow these steps to run HelloWorld (it is important to choose the proper instructions, i.e., the Indigo ones).
In order to know which dev to use: lsusb, and then dmesg | grep tty.
Now you have to grant permissions to that serial device: cd /dev/ and then sudo chmod 666 ttyACM0.
Then you upload the program to the Arduino, choosing the right port.
Open a terminal and run roscore.
Open another terminal and run rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0.
Open another terminal and run rostopic echo chatter (chatter is the name of the topic used in the .ino example code)
Warning: since ROS is using rosserial, Arduino’s Serial Monitor does not work (at least with Arduino UNO)
And voilà, here we have our Arduino publishing in a ROS topic 🙂
He descubierto Autodesk 123D circuits Electronics Labs, una aplicación en la nube donde se pueden implantar, programar y simular circuitos electrónicos en protoboard usando diferentes elementos, como Arduino. Aquí va un pequeño ejemplo de lo que se puede hacer.
I have discovered Autodesk 123D circuits Electronic Labs, a cloud application which allows to implement, program and simulate electronics circuits on a breadboard using different elements, like Arduino. Here you have a small example of what can be done.
Por fin he vuelto al blog. Aquí tenéis una de las razones de mi ausencia: he estado trasteando con el módulo Datalogging and Supervisory Control de LabVIEW (version 2009) para diseñar sistemas SCADA, integrando también un Arduino. ¡¡Feliz Semana Santa :)!!
Finally, I have managed to get back to blogging. Here you have one of the reasons of my leave: I have been diving into LabVIEW’s Datalogging and Supervisory Control module (2009 version) in order to design SCADA systems, using an Arduino too. Have a happy Easter :)!!
[In English]
Para utilizar Arduino y LabVIEW conjuntamente, existe un interfaz llamado LIFA (LabVIEW Interface For Arduino) que permite conectarlos. Una sencilla búsqueda en Google devuelve mucha documentación de cómo hacerlo, aunque para mi gusto estos dos documentos proporcionados por National Instruments son suficientes:
El equipo con el que he trabajado tiene Windows 7, y la versión de LabVIEW es la 2009 SP1. Los únicos detalles a tener en cuenta son:
Para poder cargar el firmware LIFA en Arduino es necesario descargarle un fichero que se encuentra en un directorio de C:\Archivos de Programa, donde se almacenen los datos de National Instruments. Por tanto, la cuenta de usuario Windows con la que se trabaja debe tener acceso a ese directorio (o quizás baste con obtener ese fichero en concreto, y guardarlo en otra ubicación del disco duro para usarlo posteriormente).
Para cargar el firmware LIFA en Arduino es necesario que Windows lo haya detectado y le haya asignado un puerto. En mi equipo, a pesar de que los drivers de Arduino están instalados, intenta buscarlos fuera y tarda bastante en detectar el Arduino. Paciencia 🙂
Para volver a trabajar con Arduino sin conexión con LabVIEW no hay que hacer nada especial: basta con cargarle el .ino que deseemos, como siempre.
Una vez instalado LIFA en LabVIEW, resulta muy útil consultar los ejemplos que se incluyen en Toolkits and Modules/Embedded Development. Las fotos y el vídeo que incluyo al final de esta entrada muestran una adaptación del ejemplo de lectura de pines analógicos usando un potenciómetro de 1K.
Finalmente, he descubierto que LIFA ha sido sustituido por LINX. Puesto que la instalación de LIFA ha ido como la seda, y por el momento cubre lo que quiero hacer, voy a mantenerme fiel a LIFA 🙂 [En español]
If you want to connect Arduino and LabVIEW, you can use the LIFA interface (LabVIEW Interface For Arduino). A simple Google search returns a lot of information about how this can be done, but in my opinion these two National Instruments documents are enough:
The computer I have used is a Windows 7 platform with LabVIEW 2009 SP1. Some considerations about the installation process:
In order to upload the LIFA firmware in Arduino, you need a file that can be found in a folder inside C:\Program Files, where NI data are stored. Therefore, your Windows user account should have permissions to access that folder (or maybe you just need to get that file by any other means, and then store it where you want).
To upload the LIFA firmware in Arduino, Windows must first detect the microcontroller, and then assign a port to it. In my computer, despite that the Arduino drivers are loaded, Windows searches them again, so it spends a while until the Arduino is detected. Patience is a virtue 🙂
You can go back to work with Arduino without LabVIEW connection without any special steps: just upload the .ino file you wish, as usual.
Once you have installed LIFA in LabVIEW, it is really useful to check the examples stored in Toolkits and Modules/Embedded Development. The photos and video at the end of this post show an adaptation of the example devoted to read analogic pins, using a 1K potentiomete.
Finally, I have discovered that LIFA has been replaced by LINX. Since LIFA has been installed like a charm, and up to this moment covers what I need to do, I will stay faithful to LIFA 🙂