Robot Operating System

ROS (a.k.a Robot Operating System or Robot OS), can be seen as a kind of Robotic Framework. Because it can't be installed directly on robotic equipment (ROS needs a computer and works above its OS), it can't be considered as a pure operating system. In addition to providing a complete development and execution environment, ROS includes numerous simulation tools. However, it does not guarantee runtime properties, services or event processing in deterministic time spots (i.e. realtime processing), though it is possible to integrate ROS with realtime code (openCV is supported).

Originally developed in 2007 by the Stanford Artificial Intelligence Laboratory (see Stair Project), ROS is now widely used by the robotic ecosystem thanks to the open source community and Willow Garage ( a robotics research institute/incubator, which produce the famous PR2 or TurtleBot and is currently making the main development). Many robots are supported: WifiBot, Lego Mindstorm NXT, HERB (see http://www.ros.org/wiki/Robots for a full list).

A ROS application is organized into "nodes" which are Unix competitors processes. The nodes interact by sending events via "topics" in a publisher-subscriber model. The implementation of internal functions can be achieved in C++ or Python language. Many robotic Equipment have their dedicated ROS nodes developped (Lidar, Kinect, ...).

ROS is available on a wide range of OS, but the Ubuntu version, for compatibility reasons and rapid implementation, is the best choice.

In this short page, we propose to you a short ROS start guide, with a the most frequent erros who can encounter during your development.

Setup sources.list
In a terminal, type the following line: where is your Ubuntu ditsribution name (e.g. "precise", "quantal", "raring", ...) This will add ROS repositories to your distribution.

Setup your keys
Now, you are able to download the latest updates from ROS.

Installation
Update the Debian packages:

Install the full Groovy configuration:

It will install ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception.

Initialize rosdep: This tool is used to install system dependencies required by ROS packages.

ROS is now installed but in order to run it, some environment variables must be assigned. This can be automatically done at the launch of the session:

Install python tools:

Finally, execute the script:

Configuration
Create a ROS workspace:

Every time you modify or add entries in your workspace, re-source ~/groovy_workspace/setup.bash:

Principles
ROS is organized in packages. They include, among other, ROS nodes. They allows developers to easily reuse pieces of software. You can create a package by hand or with the command:. Actually, a ROS package is nothing but a directory descended from ROS_PACKAGE_PATH that has a manifest.xml file in it. A package may include the following contents: : message types : service types : executable scripts (Pyhton sources for example) : CMake build file (ROS package are build with [CMake], this file describes how to do it) : minimal specification about the package: describes metadata and dependancies (see an example). To build a package, type ROS nodes are processes, that reside in the same or different machines. Usually, there are many nodes to control a robot. The nodes are combined together and communicate with topics or services. They get to know each other via a particular node, rosmaster. A node has a name and a type. During an execution, type  to list the currently running nodes. A topic is a bus over which nodes communicate data (thanks to the publisher/subscriber model). Communication over a topic is unidirectional and asynchronous. Type  to list the current topics. Services allows nodes to make remote procedure calls. Communication over a service is synchronous. Launch files are XML files that specify a list of nodes, topics, services, parameter values and eventually the machines for distributed applications.
 * Packages
 * Nodes
 * Topics
 * Services
 * Launch files

Useful commandline tools

 * : change directory directly to a package (indepently from your current directory)
 * : list directory contents directly
 * : lists the currently running nodes
 * : lists the current topics
 * : build a package

Troubleshooting

 * Error messages:
 * "No ROS_WORKSPACE set": check if your environment variable ROS_WORKSPACE is assigned . If not, update your .bashrc file.
 * "No ROS_PACKAGE_PATH set": check if your environment variable ROS_PACKAGE_PATH is assigned . If not, update your .bashrc file.
 * "roscd: No such package/stack '': check if the package exists and is included in your ROS_PACKAGE_PATH.

Others
For industrial robots, a dedicated ROS version exists: ROS industrial.

Polytech' Projects which use ROS
RobAIR2013 Armind

Javascript
rosnodejs Programming robots with Javascript & Node.js

Projets AIR

 * RobAIR2013-RICM5 tunnelling XMPP entre des nodes ROS. GStreamer
 * Armind
 * Robot d'inspection géotechnique