WidowX+ROS: Primeras pruebas unitarias / First unit tests

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Como coment√© en el post anterior, estamos trabajando con un brazo WidowX instalado sobre un Turtlebot. Estas son las muy primeras, muy iniciales y muy parciales pruebas ūüôā que hemos realizado: un “home” b√°sico, en el que las articulaciones de la 1 a la 5 se posicionan en 0¬ļ.¬† Por si fuera de utilidad, este c√≥digo de prueba est√° disponible en mi GitHub,¬† y poco a poco iremos a√Īadiendo pruebas m√°s complicadas. Est√° preparado para trabajar con el software ROS para WidowX de Robotnik Automation.

Ahora mismo, las articulaciones no se relajan desde código; para lograrlo, llamar desde consola al servicio de relax de las articulaciones; por ejemplo, rosservice call /arm_5_joint/relax

 

As I commented in the previous post, we are working with a WidowX arm fixed on a Turtlebot 2. These are the very first, very preliminar and very partial tests ūüôā we have performed: a basic “home”, with joints from 1 to 5 set to 0¬ļ . In case it could be useful, I have uploaded this code to my GitHub, though we will keep adding more tests. The code is prepared to work with the ROS software for WidowX created by Robotnik Automation.

Right now, joints are not relaxed from code; to do this, you should call from console to the relax service of every joint; for example, rosservice call /arm_5_joint/relax

WidowX + Arbotix + ROS Indigo

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]

Estamos trabajando con el brazo WidowX instalado en nuestro Turtlebot 2. El brazo utiliza los drivers de Arbotix para ROS Indigo. Estas son las diferencias encontradas con la documentación original de la web:

  • La instalaci√≥n desde apt-get no funciona, ya que cuando se crea el paquete aparecen errores. Es mejor descargar los drivers desde el github de Vanadium. Si se va a escoger s√≥lo una parte de los drivers, es necesario asegurarse que se bajan todos los paquetes ROS necesarios; por ejemplo, no deber√≠a faltar el paquete de mensajes de arbotix.
  • El c√≥digo fuente se copia al directorio de trabajo de ROS (en mi caso, que uso el directorio t√≠pico creado por ROS, /home/catkin_ws/src). Luego se crea como cualquier otro paquete ROS usando catkin_make .
  • El paquete arbotix_python tambi√©n presenta diferencias con la documentaci√≥n de ROS. Una vez creado el paquete, en el directorio_de_trabajo/src/arbotix_python/bin aparecen tres ficheros: arbotix_driver, arbotix_gui (en lugar de controllerGUI.py) y arbotix_terminal (y no terminal.py)
    • arbotix_terminal debe lanzarse tal cual, es decir,¬† ejecutando¬† ./arbotix_terminal sin lanzar roscore.
    • arbotix_driver y arbotix_gui necesitan lanzarse en ROS, es decir, con roscore ejecut√°ndose.
    • arbotix_gui, adem√°s, parece venir preparado para un modelo URDF/XACRO concreto que no encuentra, ya que al ejecutarlo no aparecen las articulaciones del brazo en el interfaz gr√°fico que se abre, y en la ventana de comandos se muestra el error No URDF defined, proceeding with defaults. Bicheando un poco en el c√≥digo, he visto que arbotix_gui llama a la funci√≥n getJointsFromURDF, que est√° en directorio_de_trabajo/src/arbotix_python/joints.py y que carga el par√°metro robot_description con el modelo URDF que utilizar√°. He intentado modificar este par√°metro robot_description con otro modelo llamando a rosparam set /directorio_del_modelo/modelo.xacro (roscore debe estar lanzado), pero, aunque getJointsFromURDF s√≠ encuentra este nuevo modelo, el resto del c√≥digo de la funci√≥n no est√°, aparentemente, preparado para √©l, as√≠ que por ahora voy a dejarlo y a centrarme en la programaci√≥n del brazo que realmente necesitamos.


[En espa√Īol]

We are working with the WidowX arm set on our Turtlebot 2. This arm uses the Arbotix drivers for ROS Indigo.  These are the differences with the documentation in the web:

  • Installation from apt-get does not work: errors arise when the package is created. The best option is to download the drivers from¬†the Vanadium repository at github. If you download just a subset of the drivers, make sure that you choose all the basic ROS packages; for example, don’t forget to download de arbotix messages package.
  • All the source code should be copied to the ROS workspace (for example, I use the default workspace created by ROS, so I put it into /home/catkin_ws/src). After that, the package is created like any other ROS package with catkin_make .
  • arbotix_python package has also differences with ROS documentation. Once the package is created, three files are stored in your_workspace/src/arbotix_python/bin folder: arbotix_driver, arbotix_gui (instead of controllerGUI.py) and arbotix_terminal (not terminal.py)
    • arbotix_terminal runs “stand alone”, i.e.,¬† calling to¬† ./arbotix_terminal without a launched roscore.
    • arbotix_driver and arbotix_gui must be run within ROS, i e., with a running roscore.
    • Furthermore, arbotix_gui waits for a specific URDF/XACRO model that cannot find: the gui does not open all the joints of the arm, and the command window shows error No URDF defined, proceeding with defaults. Tracing the code, I found that arbotix_gui calls to function getJointsFromURDF in your_workspace/src/arbotix_python/joints.py, which in turn loads the robot_description parameter, that stores the URDF model used by this function. I tried to set another model in this parameter, running¬†¬†rosparam set /model_folder/model.xacro (roscore must be running), but, though getJointsFromURDF does find this new model, the rest of the code of this function is not prepared to work handle it, so by now I am going to skip this question and move to the programming of the arm that we really need.

 

Turtlebot simulation with ROS in the Nootrix virtual machine

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]

Siguiendo con la idea de utilizar la máquina virtual de Nootrix para Indigo 32, he estado trabajando con las opciones incluidas en ROS para simular  el robot Turtlebot usando Gazebo y rviz.

Para lograr una visualización y teleoperación básicas hay que ejecutar lo siguiente:

  • Instalar todo lo que haga falta para simular el Turtlebot:
    • sudo apt-get install ros-indigo-turtlebot-simulator
    • sudo apt-get install ros-indigo-turtlebot-apps
    • sudo apt-get install ros-indigo-simulators
  • Abrir un terminal y ejecutar roslaunch turtlebot_gazebo turtlebot_world.launch
  • Abrir otro terminal y ejecutar roslaunch turtlebot_rviz_launchers view_navigation.launch
  • Abrir un √ļltimo terminal y lanzar un nodo que permita la teleoperaci√≥n. Yo he utilizado¬†roslaunch kobuki_keyop keyop.launch, ya que el funcionamiento de la otra opci√≥n de teleoperaci√≥n (roslaunch turtlebot_teleop keyboard_teleop.launch) no me queda claro.
  • El resultado puede verse en este v√≠deo.

Para navegar con Turtlebot y construir un mapa, se puede consultar este tutorial o este otro. Ninguno de los dos funciona:

  • En un terminal, se ejecuta roslaunch turtlebot_gazebo turtlebot_world.launch. Hasta ah√≠, todo ok.
  • En otro terminal, ejecutar roslaunch turtlebot_gazebo gmapping_demo.launch. Ah√≠ se fastidia el invento, y al cabo de unos momentos aparece el mensaje [ WARN] [1437734908.414750431, 97.100000000]: MessageFilter [target=odom ]: Dropped 100.00% of messages so far. Please turn the [ros.gmapping.message_notifier] rosconsole logger to DEBUG for more information.
  • Si en un tercer terminal se lanza rviz con roslaunch turtlebot_rviz_launchers view_navigation.launch, el fixed frame por defecto es map, y el elemento map aparece en amarillo y con el mensaje No map received.
  • Si se abre otro terminal para teleoperar el robot (roslaunch kobuki_keyop keyop.launch), el robot se mueve tanto en Gazebo como en rviz, pero sin mostrar las lecturas de las sensores.
  • Finalmente, si en otro terminal intentamos grabar el mapa con rosrun map_server map_saver -f mimapa, el mensaje que aparece es Waiting for the map.

Para averiguar qué estaba fallando, comprobé diferentes cosas:

  • Si el √°rbol de transformadas estaba completamente conectado: rosrun tf view_frames. Aparentemente, s√≠ lo est√°.tftree
  • Hacer un source antes de cada roslaunch: source /opt/ros/indigo/setup.bash¬†
  • Comprobar el topic /map (en el que, seg√ļn rviz, se lee el mapa), para ver si los nodos implicados acced√≠an a √©l: rqt_graph, rosnode info slam_gmapping, rosnode info rviz. Todo bien tambi√©n.
  • Comprobar qu√© informaci√≥n se transmit√≠a por el topic /map. A pesar de que los nodos estaban bien conectados, al hacer rosrun tf tf_echo /map /odom los valores que circulaban por √©l eran siempre nulos, incluso si mov√≠a el robot con la teleoperaci√≥n del kobuki.

Después de buscar ayuda infructuosamente por tooooda internet ;), pensé en instalar ROS directamente sobre mi Xubuntu 14.04, sin máquina virtual. Lo hice, volví a lanzar Gazebo, rviz y la teleoperación del kobuki, y tachán tachán, apareció un error distinto: [ERROR] [1433813576.466253926, 24.270000000]: Scan message must contain angles from -x to x, i.e. angle_min = -angle_max. Este error me sonaba de haberlo visto reportado y resuelto en answers.ros.org, así que hice lo que se decía en esta respuesta y conseguí hacer un mapa con gmapping.

As√≠ que se me ocurri√≥ replicar esa soluci√≥n en el ROS de la m√°quina virtual, y esta vez s√≠, logr√© un hermoso mapilla virtualmente simulado ūüôā

mapiki

Digamos que he logrado la soluci√≥n ingenieril (funciona) pero no la cient√≠fica (no s√© por qu√©) ūüėČ Cualquier explicaci√≥n sobre qu√© estaba fallando ser√° bienvenida.


[En espa√Īol]

According to my idea of using the Indigo 32 Nootrix virtual machine, I have been checking the options included in ROS for simulating the Turtlebot robot with Gazebo and rviz.

In order to get a basic visualization and teleoperation, you should follow these steps:

  • First, get all the tools to simulate the Turtlebot:
    • sudo apt-get install ros-indigo-turtlebot-simulator
    • sudo apt-get install ros-indigo-turtlebot-apps
    • sudo apt-get install ros-indigo-simulators
  • Open a terminal and run roslaunch turtlebot_gazebo turtlebot_world.launch
  • Open another terminal and run roslaunch turtlebot_rviz_launchers view_navigation.launch
  • Open a third terminal and launch something that lets you to teleoperate the robot. I have used¬† roslaunch kobuki_keyop keyop.launch, since how the other ROS option for teleoperation works (roslaunch turtlebot_teleop keyboard_teleop.launch) is not clear to me.
  • You can see the results in this video.

If you want to navigate the Turtlebot and get a map, you have this tutorial or this other. None of them works:

  • Open a terminal and run roslaunch turtlebot_gazebo turtlebot_world.launch. Everything is ok.
  • In other terminal, run roslaunch turtlebot_gazebo gmapping_demo.launch. This is where things go wrong and you get the message [ WARN] [1437734908.414750431, 97.100000000]: MessageFilter [target=odom ]: Dropped 100.00% of messages so far. Please turn the [ros.gmapping.message_notifier] rosconsole logger to DEBUG for more information.
  • If you open a third terminal with roslaunch turtlebot_rviz_launchers view_navigation.launch, the default fixed frame is map, and the map element is shown in yellow, with the message No map received.
  • If you open another terminal for teleoperation (roslaunch kobuki_keyop keyop.launch), the robot moves both in Gazebo and rviz, but it does not show the sensor readings.
  • Finally, if you open another terminal and try to store the map with rosrun map_server map_saver -f mimap, you get a Waiting for the map message.

Here is a list of all the things I tried to solve the problem:

  • Was the transforms tree properly connected (rosrun tf view_frames)?. Apparently, it was.tftree
  • I sourced before every roslaunch: source /opt/ros/indigo/setup.bash¬†
  • I checked the /map topic (where the map is read, according to rviz), in order to see in the involved nodes were properly connected: rqt_graph, rosnode info slam_gmapping, rosnode info rviz. Everything seemed ok too.
  • I checked which information was sent through the /map topic. Despite of the nodes being well connected, rosrun tf tf_echo /map /odom proved that all the values moving across the topic were always null, even if the robot was teleoperated with the kobuki node.

After vainly googling half the internet ;), I thought I could install ROS directly on my Xubuntu 14.04, without virtual machine. I did it, run again Gazebo, rviz and kobuki teleoperation and, oh boy, I got a different error: [ERROR] [1433813576.466253926, 24.270000000]: Scan message must contain angles from -x to x, i.e. angle_min = -angle_max. I recalled this error from answers.ros.org, so I did what it was explained  in this answer and finally I got a map.

So I applied that solution to the ROS on the virtual machine, and finally I got a lovely virtually simulated little map ūüôā

mapiki

We could say that this is the engineering solution (it works), but not the scientific solution (I don’t know why) ūüėČ Any explanation on what was failing will be heartily welcomed.

Arduino + ROS Indigo 32 on Nootrix Virtual Machine

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[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!”.

  • Seguir las instrucciones para ejecutar HelloWorld (importante: asegurarse que se han escogido las instrucciones para¬† Indigo).
  • Para averiguar qu√© dev utilizar: lsusb, y luego dmesg | grep tty.
  • Ahora hay que dar permisos a ese dispositivo serie, con cd /dev/ y luego sudo chmod 666 ttyACM0.
  • Despu√©s, pasamos el programa al Arduino, seleccionando bien el puerto.
  • Abrir un terminal con roscore.
  • Abrir otro terminal con rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0.
  • Abrir otro terminal con rostopic echo chatter (chatter es el nombre del topic usado en el c√≥digo .ino de ejemplo)
  • Aviso: como ROS est√° usando rosserial, el Serial Monitor de Arduino no funciona (al menos con Arduino UNO)

El resultado se puede ver en el v√≠deo al final del post ūüôā


[En espa√Īol]

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 ūüôā

European Robotics Week 2014: yeah :)!!

Facebooktwittergoogle_plusredditpinterestlinkedinmail

El pasado sábado 29 de Noviembre celebramos el Taller Lego NXT en la Escuela de Ingenierías de la UMA. Yo me lo pasé muy bien :), y por eso quiero agradecer el interés y las ganas de participar y aprender de todos los asistentes.

Our Lego NXT Workshop was hold on Saturday 29 November at Escuela de Ingenierías (UMA). I really had a good time :), and I am very grateful for the interest and the desire to learn that all the participants showed.

20141129_111215 20141129_133241_redu 20141129_121709

Free chapter of “Simultaneous Localization and Mapping for Mobile Robots: Introduction and Method”

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Capítulo gratis del libro Simultaneous Localization and Mapping for Mobile Robots: Introduction and Method, Juan-Antonio Fernández-Madrigal y José-Luis Blanco-Claraco (Universidad de Málaga),  IGI Global (2013)

Free chapter of  Simultaneous Localization and Mapping for Mobile Robots: Introduction and Method, Juan-Antonio Fernández-Madrigal and José-Luis Blanco-Claraco (Universidad de Málaga),  IGI Global (2013)

Maps for Mobile Robots: Types and Construction

 

Lego NXT Workshop at M√°laga University (European Robotics Week 2014)

Facebooktwittergoogle_plusredditpinterestlinkedinmail

lego

Dentro de las actividades de la Semana Europea de la Robótica 2014, el próximo Sábado 29 de Noviembre llevaremos a cabo un Taller Lego NXT, dirigido a ingenieros con conocimientos básicos de programación. Más información aquí.

We celebrate the European Robotics Week 2014 next Saturday 29th November with a Lego NXT Workshop, targeted to engineers with a basic programming knowledge. More info here [in Spanish]