Learning ROS
I’ve recently finished to read the book titled “Learning ROS for Robotics Programming”, written by Aaron Martinez and Enrique Fernández and edited by PACKT publishing.

This is a must-read for any developer who wants to understand ROS deeper. The authors have written a really good book as well as to learn ROS (for complete beginners) and also to improve knowledge of more confirmed ROS developers. The book is well written and very pedagogic. And the most important, I think, is that the topics of the chapters are carefully chosen. This means that depending on your ROS experience you can directly jump to some chapters. Nevertheless, this book does not target advanced ROS users.

Chapter 1 (Getting Started with ROS) is a great introduction to ROS. I liked the history and the installation process descriptions for both Electric and Fuerte versions of ROS. I only regret that this book (fist published in September 2013) does not focus on Groovy which is now the stable version. But this is not critical and installation process can be easily applied to Groovy or even Hydro (current unstable version of ROS). Moreover, it also important to note that some ROS stacks still work better on Fuerte.

Chapter 2 (The ROS Architecture with Examples) explains very well the basics of ROS: nodes, topics, master, parameter manager, … It then gives examples of installing and creating its own nodes. This is a must read to begin with ROS and I will recommend it to all my students. Again, I only regret that it does not explain the new Catkin package management included in newer ROS versions.

Chapter 3 (Debugging and Visualisation) shows that the authors really know the daily job of robots developers ;-). I really appreciate finding this kind of information in this a ROS book because robot development is hard and error prone. It should not be idealised and it is not in this book. Most of the time, you will ask yourself: “what is going on?” and you need some tools to investigate and localize the bug. This chapters present all the tools needed to debug from GDB to ROS tools such rviz, wtf, … I really liked this chapter because debugging is IMPORTANT and I learnt things that will now help me to be more efficient when debugging.

Chapter 4 (Using Sensors and Actuators with ROS) presents how to use “common” robotics sensors with ROS. In my case, I was interested by kinect, Arduino and Xsens.

Chapter 5 (3D Modelling and Simulation) presents how to use simulation tools from URDF models loaded in rviz to real Gazebo simulations. This chapter is classical. Nevertheless, I want to report about a small but usefull section that explains how to do a 3d model of a robot in Google Sketchup and then import it in rviz. This is interesting because it shows how to add support into ROS for non-ROS robots that we all have in our labs!

I cannot give an opinion on chapter 6 (Computer vision) because I am less involved in this topic.

Chapter 7 (Navigation stack) and Chapter 8 (Navigation stack – Beyond setups) are completely in my current activities. Chapter 7 explains how to adapt the navigation stack to your robot. This is exactly what we did in our lab for some non-ROS robots. It would have been good to read this chapter before doing it, I am sure we would have been faster! Chapter 8 describe some tuning elements. Indeed, the navigation stack is full of parameters at different levels that make the difference between a “good” and a “bad” behaviour. All of these parameters (fixed values) are difficult to set up and sometimes difficult to determine. This chapter gives some useful insights on how to proceed.

Chapter 9 (Combining Everything – Learn by doing) presents some standard ROS installations for different known robots such as REEM, PR2, Robonaut 2, Husky and Turtlebot. We have multiple Turtlebots 2 in our lab. I must admit that the 2 pages on this robot base in chapter did not help me very much. But, other robots such as the PR2 is far more described and you can use it in Gazebo simulations.

After initials tests we have made at the lab, we presented our RoboShop project on the 16th of October, as well as during 3 days from 21st to 23rd october in two different events outside our university. The stand was small. Yet we managed to successfully run our demo of a helper robot that targets shopping malls (see video below). We will be presenting even more demos to the public on thursday 28th november as part of the European Robotics Week. We will report them here. Stay tuned.  

The french academic system requires that people pass yet another diploma higher than the PhD before applying for a full professor position. The diploma is called “Habilitation à Diriger les Recherches” (HDR for short) which stands for “Ability to Supervise Research”. It requires writing a thesis presenting how the candidate co-supervised PhD students and Post-Doc, and the strategy  of conducted research.

Since all 3 reviewers approved my thesis, I can proceed with the defense. So, I’m glad to announce that it will be held on 10:30, the 6th December 2013, at Ecole des Mines de Douai of course. My talk is entitled: “On Flexible Autonomous and Mobile Multi-Robot Systems”. You’ll find below a summary as well as names of jury members. The defense is public and you are welcome to attend.

Last, I would like to acknowledge that I have been supported for this work by several people, for many years. Unfortunately, I can name here only a few of them: Stéphane Ducasse, Luc Fabresse, Serge Stinckwich, Georg Heeg, Jannik Laval, Anaud Doniec, Anthony Fleury,  Cécile Labarre, Christine Delille, and Muriel Morgan.


SUMMARY

Research I have been conducting and co-supervising so far address control software for robots that are both mobile and autonomous. Such  a robot is able to perform its missions and to move in a partially known changing environment, without any human assistance. I have been targeting solutions which assist software developers in different stages of the process of building flexible multi-robot systems. I have relied on a thought framework structured around four pillars: software components, aspect-oriented programming, dynamic languages and multi-agent systems. Part of my contributions address the microscopic scale of multi-robot systems, that is robots considered as individuals. We have thus proposed programming models, that merge aspect-oriented programming and components. Our goal is to favor modularity in order to introduce flexibility during software development and maintenance. Then, we have studied flexibility at run-time by introduce software architecture that support dynamic self-adaptation. As a result, such an architecture enables robots to evolve their behavior at run-time according to environmental changes and to the task at hand. We have complemented these contributions by introducing  development tools and execution infrastructures that take into account resource constraints. For instance, we have introduced a model of an application-driven object-oriented virtual memory. It allows adapting RAM usage by dynamically loading/unloading object graphs. We have also proposed a framework for remote debugging that is required for software-hardware integration tests. This proposal relies on a remote meta-level located on the developer machine, that controls a base-level located on a robot. Another facet of my research tackles the macroscopical level, that is multi-robot systems considered as a whole. Part of this work is a follow up to our use of components in robot control architectures. It consists in making robots coordinate their decisions for local dynamic adaptations by exchanging software components. These interactions as well as any high-level coordination require remote communications. However, network infrastructures are not always available. We have addressed this issue by proposing a light-weight distributed algorithm where robots organize themselves to set up an ad hoc mobile network. We have built on top of this solution a distributed multi-robot exploration strategy. It allows a robotic fleet to collaboratively build a map while maintaining a network connectivity and compensating for possible disconnections.


JURY

Promotor: Stéphane DUCASSE, Research Director at INRIA, Scientific Director of INRIA Lille, Head of the RMoD Team – Lille  (France)

Reviewers:

  • Michel OCCELLO, Professor at Université Pierre Mendes France (Grenoble 2), Head of the COSY team (LCIS) – Grenoble  (France)
  • Rachid ALAMI, Research Director at CNRS, Head of the RIS team (LAAS) – Toulouse (France)
  • Theo D’HONDT, Professor at Vrije Universiteit Brussel, Software Languages Lab – Brussels (Belgium)

Members:

  • Davide BRUGALI, Professor at Università Degli Studi Di Bergamo, Head of the Software for Experimental Robotics Lab – Bergamo (Italy)
  • Jacques FERBER, Professor at Université de Montpellier 2, SMILE team (LIRMM) – Montpellier (France)

 

As part of the Robotics Week 2013 organized  by the non-profit euRobotics, we will be presenting demos featuring some robots we are using for our research. Our goal is to increase awareness of the general public to current status of robotics and what robots can actually do. We will present different kinds of robots and demo their capabilities through some application scenarios.

Demos will be held in the Département Informatique et Automatique at the Ecole des Mines de Douai (Northern France). If you wish to attend, please drop us an email: car @ minesdouai . fr. We scheduled demos the 28th of november 2013 at the following hours:
* morning from 10:00am to 12:00am
* afternoon from 2:30pm to 4:30pm

You can find more info on this event on the dedicated page.

In a recent experiment we demoed a scenario of how a robot can be used to help shoppers (see Video below). The robot computes the optimal path for picking items of an arbitrary shopping list. It carries the bag and guides the shopper to items locations.  As we explain in the slideshow (below the video), there are other possible applications of mobile robots in a shopping. We also give a quick overview of hardware and software. We reused some existing ROS packages that we combined with our own software built using the PhaROS client based on Pharo a Smalltalk inspired OO dynamic language.

Video: A Robot Made to Help Shoppers

Slideshow about the RoboShop project

Firstly, assuming you have already installed ROS Groovy and MORSE 1.x.x.

Then you need two additional packages p2os and exploration:

git clone https://github.com/allenh1/p2os.git
svn co https://svn.code.sf.net/p/bosch-ros-pkg/code/trunk/stacks/exploration

Finally, download the attachment (yz_morse_sim), decompress it and enter into the folder morse_sim.

Now, let’s start the simulation!

1. Launch roscore in a terminal window:

roscore

2. Launch MORSE simulator in a new terminal window:

morse run single_robot.py

3. Launch ROS nodes in a new terminal window (This step will also launch gmapping and rivz):

roslaunch single_robot.launch

4. Save the map if you want, in a new terminal window:

rosrun map_server map_saver

Done!

Firstly, assuming you have already installed ROS Groovy and Stage 3.x.x.

Then you need two additional packages p2os and exploration:

git clone https://github.com/allenh1/p2os.git
svn co https://svn.code.sf.net/p/bosch-ros-pkg/code/trunk/stacks/exploration

Finally, download the attachment (yz_stage_sim), decompress it and enter into the folder stage_sim.

Now, let’s start the simulation!

1. Launch roscore in a terminal window:

roscore

2. So, you have three options to implement the exploration: teleoperation, exploration and exploration with SLAM, in a new terminal window:

roslaunch teleop.launch (or explore.launch, or explore_slam.launch)

3. You can track the exploration progress by using rviz, in a new terminal window:

rosrun rviz rviz -d stage.rviz

4. If you want build a map by teleoperation, in a new terminal window:

rosrun gmapping slam_gmapping scan:=base_scan

5. Save the map, in a new terminal window:

rosrun map_server map_saver

Done!

Being a TDD fan, I’m writing tests all the time. And I sometimes ended up having groups of nearly identical tests:

  • they use exactly the same objects, send the same messages,
  • but they differ only by values.

In a discussion on the Pharo-dev mailing list, Laurent Laffont pointed what is done in PhpUnit and suggested to have something similar in Pharo. After a few hours hacking I’ve my parametrized tests working and integrated with the test runner to ease debugging.

I’ve introduced a ParameterizedTestCase which supports both “plain” tests as well as parametrized tests. This class should be subclassed as in the following example:

ParameterizedTestCase subclass: #ExampleOfParameterizedTestCase
        instanceVariableNames: ”
        classVariableNames: ”
        poolDictionaries: ”
        category: ‘ParameterizedTests’

A test method is any method that is marked with the pragma testParametersSelector: as in the following example:

ExampleOfParameterizedTestCase>>#should: value1 plus: value2 equals: expectedSum
        <testParametersSelector: #givenValuesAndTheirExpectSum>
        self assert: value1 + value2 equals: expectedSum

The argument of the pragma testParametersSelector: is the selector of a method that provides a collection of arrays. Each array gathers parameters for a different test case. In our example the method givenValuesAndTheirExpectSum is defined as following:

ExampleOfParameterizedTestCase>>#givenValuesAndTheirExpectSum
        ^{{1. 2. 3}.
        {10. 20. 30}.
        {100. 200. 300}}

Since we have three arrays of parameters, we will have 3 different test cases all three with the same test selector, but each with a different parameters array. This is displayed by the test runner as shown in picture 1.

wpid-passingParametrizedTests-2013-10-5-10-09.png

Picture 1: Passing Parametrized Test

If any of the parameters arrays leads to a test failure, the Test Runner will display the failing test selector as well as the parameters that lead to the defect. For demo purpose, let’s introduce some invalid parameters and change the previous givenValuesAndTheirExpectSum method as following:

ExampleOfParameterizedTestCase>>#givenValuesAndTheirExpectSum
        ^{{1. 2. 3}.
        {10. 2. 30}.
        {100. 200. 0}}

I have changed the second and the third parameter arrays. The Test Runner detects indeed 2 failing tests out of 3 runs as shown in picture 2. As you can see the parameters that lead to the defect are displayed so, one can identify the origin of the defect.

wpid-failingParametrizedTests-2013-10-5-10-09.png

Picture 2: Failing Parametrized Test

I have developed and tested parametrized tests under Pharo 2.0. If you want to try it, you can install it by evaluating the following expression in a workspace.

Gofer it
        url: ‘http://car.mines-douai.fr/squeaksource/BoTest’;
        package: ‘ParameterizedTests’;
        load.

It is worth noting that although in the examples I have given above data is hard coded, nothing prevent from adopting an approach as suggested by Frank Shearar in his Squeak Check project. Method that return the array of parameters can rely on any arbitrary complex data generator class, that may produce different data randomly each time tests are run.

Zhi YAN (Web Page) is a new postdoc in our team since september, 15th 2013. He will work 12 months on our CAIRE project. Today, Zhi presented us some of its work during its PhD.

Presentation title: Tasks and motion planning for multi-robot systems

Summary: This presentation focuses on the issue of multi-robot coordination from the standpoint of planning, which contains task planning and motion planning.
Two new approaches are proposed for the task planning. The first one is a decentralized approach based on trading rules. This approach is designed to simulate the relationship between buyers and sellers in a business system, to achieve dynamic task allocation by using a mechanism of unsolicited bid. The second approach is an heuristic one which is based on an empirical model. It is designed to assign the transportation task to individual robots by estimating the production rate of goods in a centralized system.
Two new approaches are proposed for the motion planning. Both are sampling-based approaches, designed to plan separate kinematic paths for multiple robots to minimize the issue of waiting situation including congestion, collision and deadlock, in an effective way in order to improve the system planning efficiency. All these proposed approaches have been tested and evaluated through simulation experiments.

Slides (in French)

Videos