The Robot Operating System
A 5-day ROS crash course
Murilo Fernandes Martins, PhD
Department of Electrical Engineering
FEI University Centre
28 January 2013
Meet the teachers
Learning ROS
Part : Meet the teachers
Meet the teachers
J. Angelo Gurzoni Jr., MSc
Ph.D. candidate in Robotics
Dept. of Mechanical Engineering, USP
Luiz A. Celiberto Jr., PhD
Research Fellow in Robotics
Dept. of Electrical Engineering, FEI
Murilo Fernandes Martins, PhD
Research Fellow in Robotics
Dept. of Electrical Engineering, FEI
Meet the teachers
Learning ROS
ROS and the learning process
The task of learning ROS can be partitioned into. . .
Learning HOW to use ROS and its tools
Core concepts of the framework
Command line tools
Graphical tools
Learning HOW to make use of ROS to facilitate R & D
Object recognition
Mapping, localisation, navigation
Object manipulation
Part I: Course programme for the 5 days
Day 1 An Introduction to ROS
Day 2 Diving into ROS with practical examples
Tutorial I: Getting familiar with basic command line tools
Tutorial II: Programming ROS nodes and services in C++
Day 3: Case Study 1 Mobile robots, SLAM and navigation
Day 4: Case Study 2 Computer Vision using the Kinect sensor
Day 5: Hackathon! Group project
Day 1 Intro
Day 1
Day 2 Practising
Presenter: Murilo F. M.
An Introduction to ROS
1
What is ROS?
Getting started
ROS filesystem
ROS graph concepts
Case Study 1
Case Study 2
Hackathon
Day 1 Intro
Day 2 Practising
Case Study 1
Tutorial I: Getting familiar with basic command line tools
Tutorial I
Presenter: Luiz A. Celiberto Jr.
Getting familiar with basic command line tools
rosrun
rostopic
rxplot
rxgraph
rosnode
using ROS with multiple machines
Case Study 2
Hackathon
Day 1 Intro
Day 2 Practising
Case Study 1
Case Study 2
Tutorial II: Programming ROS nodes and services in C++
Tutorial II
Presenter: J. A. Gurzoni Jr.
Programming ROS nodes and services in c++
Programming a publisher node
Coding a subscriber node
Writing a node which provides a service
Calling a service from within a node
Discussion: difference between Topics and Services
Hackathon
Day 1 Intro
Day 2 Practising
Day 3: Case Study 1
Case Study 1
Case Study 2
Hackathon
Presenter: Murilo F. M.
Using ROS with mobile robots to perform SLAM and navigation
Preparing the testbed: the Gazebo simulator and the PR2 robot
Simultaneous Localisation and Mapping (SLAM) using Gmapping
Probabilistic robot localisation using the AMCL algorithm
PR2 Navigation stack: path planning using the DWA approach
Also covering key concepts of ROS, featuring
rviz: 3D visualisation environment for robots using ROS
rosbag: tools for recording from and playing back to ROS Topics
ROS launch files
Day 1 Intro
Day 2 Practising
Day 4: Case Study 2
Case Study 1
Case Study 2
Hackathon
Presenters: J. A. Gurzoni Jr. and Luiz A. Celiberto Jr.
Computer Vision using the Kinect sensor
Using depth information from RGB-D sensors with ROS
Controlling a real robot
Implementing a Kinect-powered person-follower robot
ROS + OpenCV for face recognition
Further exploring the power of OpenCV with ROS
Day 1 Intro
Day 2 Practising
Case Study 1
Day 5: Hackathon!
Group project
We need ideas. . . Have you got any?
Case Study 2
Hackathon
Part II: Day 1 An Introduction to ROS
1
What is ROS?
Getting started
Supported operating systems
Supported hardware
Installation
Setting up VM
ROS filesystem
ROS graph concepts
Nodes
Master
Parameter server
Messages
Topics
Services
Messages, Topics and Services
Revisiting the filesystem
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
What is ROS?
What is ROS?
ROS is an open-source meta-operating system
Groovy Galapagos
31 December 2012
Fuerte Turtle
23 April 2012
Electric Emys
30 August 2011
Diamondback
02 March 2011
C Turtle
02 August 2010
Box Turtle
02 March 2010
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
What is ROS?
ROS key features
Features resembling a real operating system
hardware abstraction and low-level device control
programming language independence
implementation of a wide range of commonly used algorithms
message passing between processes (OS-independent)
standardised package management
useful set of shell commands and utilities with tab completion
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
What is ROS?
ROS key features
ROS is inherently distributed
Structured as a peer-to-peer network of processes (Nodes) and loosely
coupled at runtime, which may share messages using:
synchronous RPC-style communication (over Services)
asynchronous data streaming communication (over Topics)
storage of data (on a Parameter Server)
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
ROS concepts and components
ROS concepts and components
ROS client libraries
Main client libraries:
Experimental client libraries:
Python
Java (with Android support)
c++
Lua
Lisp
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Supported operating systems
Supported operating systems
Supported operating system
Ubuntu (12.04 LTS + ROS Fuerte)
Experimental
Arch
Mac OS X
Debian
OpenSuse
Fedora
Windows
Gentoo
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
The end
Supported hardware
Supported robots
Nao
Willowgarage PR2
Baxter
Care-o-Bot
Toyota Helper
Gostai Jazz
Robonaut
Peoplebot
Kuka YouBot
Guardian
Husky A200
Summit
Turtlebot
Erratic
Qbo
AR.Drone
Miabot
AscTec
Lego NXT
Pioneer
SIA 10D
A lot more on http://www.ros.org/wiki/Robots
What is ROS?
Getting started
Setting up VM
ROS filesystem
Supported hardware
Videos ROS Overview
Video: Celebrating 3 years of ROS1
1 Video
available at http://youtu.be/7cslPMzklVo
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
Supported hardware
Videos ROS Overview
Video: Celebrating 5 years of ROS2
2 Video
available at http://youtu.be/PGaXiLZD2KQ
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
Supported hardware
Sensors
1D/2D/3D range finders
Sharp IR range finder
Hokuyo laser scanners
Sick lasers
Microsoft Kinect
Asus Xtion
ROS filesystem
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
Supported hardware
Sensors
1D/2D/3D range finders
Cameras
monocular and stereo
USB (uvc) and firewire
video streaming (gstreamer)
ROS filesystem
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
Supported hardware
Sensors
1D/2D/3D range finders
Cameras
Force/torque/touch sensors
Motion capture systems
Pose estimation (IMU/GPS)
Audio/Speech recognition
RFID
Sensor/actuator interfaces
Dynamixel
Phidgets
Arduino
Arbotix
Lego NXT
And many more. . .
ROS filesystem
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Supported hardware
Simulators
Stage
Stage is a 2D simulator for multiple (large scale) mobile robots
Models for sensors (e.g., laser, sonar) and actuators (e.g., gripper)
Models of simple objects for (limited) manipulation
No physics model at all (e.g., friction, collision, and so forth)
Open source project
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Supported hardware
Simulators
Gazebo
Gazebo is a 3D simulator of multiple robots in realistic environments
Realistic simulation of rigid body physics/dynamics
Models for complex robots, actuators and sensors (cameras, IMU)
Support provided in part by Open Source Robotics Foundation
Chosen as the simulator for DARPAs Robot Challenge
Open source project
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Supported hardware
Simulators
Webots
Development environment used to program and simulate robots
Complex and realistic 3D simulation of physics/dynamics
Large collection of robot, sensor and actuator models
Library of indoor and outdoor objects
Cross-platform, but proprietary
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Installation
Installation
ROS (Fuerte) on Ubuntu 12.04 (Precise)
Configure Ubuntu repositories
Allow restricted, universe and multiverse to be used
Setup sources.list
sudo sh -c echo deb http://packages.ros.org/ros/ubuntu precise main > /etc/apt/sources.list.d/ros-latest.list
Setup keys
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
Install ROS Desktop-Full, and standalone tools
sudo apt-get update
sudo apt-get install ros-fuerte-desktop-full
sudo apt-get install python-rosinstall python-rosdep
Setup environment (shell)
echo source /opt/ros/fuerte/setup.bash >> /.bashrc
. /.bashrc
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Setting up Virtual Machine
Configuring the Virtual Machine
Loading the VM and logging on to Ubuntu
1
Locate the VM (inside C:\temp folder)
Open the VM with VMPlayer (there should be a desktop shortcut)
Wait until it loads. . . and switch to full screen mode
Log in with username roscourse and password 123456
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
Creating a new user
Creating a new user within the VM
Open System Settings
Open User Accounts
Unlock dialog window
Add a new user
Set a password!
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Setting up ROS
Setting up ROS environment for the new user
Open up a terminal
Press windows key, then type terminal, then press Enter
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Setting up ROS
Setting up ROS environment for the new user
Type in the following commands
Remember that spaces are necessary, and linux is case sensitive!
1
2
echo s o u r c e / o p t / r o s / f u e r t e / s e t u p . bash
source
/. bashrc
>>
/. bashrc
3
4
5
mkdir
rosws
/ f u e r t e w o r k s p a c e
init
/ f u e r t e w o r k s p a c e
/ opt / r o s / f u e r t e
6
7
8
echo s o u r c e / f u e r t e w o r k s p a c e / s e t u p . bash
s o u r c e / f u e r t e w o r k s p a c e / s e t u p . b a s h
9
10
11
12
m k d i r / f u e r t e w o r k s p a c e / s a n d b o x
rosws
s e t / f u e r t e w o r k s p a c e / s a n d b o x
s o u r c e / f u e r t e w o r k s p a c e / s e t u p . b a s h
13
14
echo
$ROS PACKAGE PATH
>>
/. bashrc
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Setting up ROS
Setting up ROS environment for the new user
Understanding the commands (line by line)
1
Add the command (in double quotes) to the end of the file /.bashrc
Re-set the settings in /.bashrc for the current terminal
3
4
Create a new directory called /.bashrc
Initialise a ROS overlay pointing at /fuerte workspace
6
7
Same effect as line 1
Same effect as line 2
9
10
Create a new directory called sandbox inside fuerte workspace
11
Set sandbox as the workspace
12
Same effect as lines 2 and 8
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
ROS filesystem
ROS filesystem
Overview
Package
Lowest level of ROS software organisation
Dedicated to a single functionality (e.g., data acquisition from a
laser scanner)
Manifest: description (metadata) of a package, which main role is to
define dependencies between packages (manifest.xml)
Stack
Collection of packages forming a higher level library
Stack Manifest: same as in packages, but for stacks (stack.xml)
Stacks do not exist in Groovy anymore (fear not, now there are
meta-packages!)
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS filesystem
Example
ROS filesystem
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
ROS filesystem
ROS filesystem
Package structure
Hypothetical package myPkg/
CmakeLists.txt: CMake build settings for package myPkg
manifest.xml: metadata and dependencies required by package
mainpage.dox: doc information of package myPkg
include/myPkg: c++ header files
src/: source code directory
bin/: compiled binaries directory
launch/: where launch files are stored (if needed)
msg/: message (.msg) types
srv/: service (.srv) types
scripts/: executable scripts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Exploring the ROS filesystem
rosbash
ROS command line tools
Open up a terminal
Press windows key, then type terminal, then press Enter
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
Exploring the ROS filesystem
rosbash
ROS command line tools
rospack: ROS package management tool
1
2
3
4
rospack
rospack
rospack
rospack
list
find
turtlesim
depends
turtlesim
profile
roscd: change directory command for ROS
1
2
3
roscd
roscd
turtlesim
ls
( standard linux
s h e l l command )
rosls: allows you to list the contents of a ROS package
1
2
roscd
rosls
( return to workspace d i r e c t o r y )
turtlesim
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Creating a ROS package
Creating a new ROS package
rosed: allows you to quickly see/edit a file from a given package
1
2
3
echo $EDITOR ( i f b l a n k , d e f a u l t
e x p o r t EDITOR=g e d i t
rosed
turtlesim
m a n i f e s t . xml
is
vi )
Change directory to your sandbox and create a new ROS package
1
2
3
roscd
cd s a n d b o x
r o s c r e a t e pkg
myPkg
std msgs
rospy
roscpp
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
Creating a ROS package
Creating a new ROS package
Locating and examining the newly created package
1
2
3
4
rospack
f i n d myPkg
r o s c d myPkg
rospack
d e p e n d s 1 myPkg
r o s e d myPkg m a n i f e s t . xml
Building the package using rosmake
1
rosmake
myPkg
Now examine the output!
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Nodes
Nodes
Nodes are processes which perform specific computations:
control robot wheel motors
acquire data from laser scanner
acquire images from camera
perform localisation
perform path planning
provide graphical visualisation of the system
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Master
Master
Master is the core node of ROS, called roscore
Acts as a nameservice for the Computation Graph (DNS-like server)
Stores topics and services registration information for ROS nodes
Nodes then establish connections as appropriate
Also makes callbacks to nodes when registration information changes
Allows nodes to dynamically create connections as new nodes are run
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Parameter server
Parameter server
Shared, multi-variate dictionary which is acessible via network APIs
Currently runs inside ROS Master
Nodes use this server to store and retrieve parameters at runtime
Not designed for high performance, and hence. . .
Better suited for configuration parameters
Follows ROS naming convention, having a hierarchy meant to
protect parameters from conflicting (namespaces)
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
Parameter server
Parameter server
Open up a terminal, then run ROS Master node
1
roscore
In another terminal, explore the parameter server
1
2
3
rosparam
rosparam
rosparam
list
get / r o s d i s t r o
get / r o s v e r s i o n
It should look like this
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Messages
Messages
Messages are simply a data structure, consisting of typed fields
Standard primitive types (and nested arrays) are supported:
int{8, 16, 32, 64}
float{32, 64}
string
time
duration
array[]
Nodes communicate with each other by passing messages
Routed via a transport system with publish/subscribe semantics
When used with topics: *.msg (n:n non-blocking)
When used with services: *.srv (1:1 blocking request + response)
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Topics
Topics
A node sends out a message by publishing it to a given Topic
The Topic type is defined by the message type publish on it
A node requiring a certain type of data must subscribe to the
appropriate Topic
Multiple publishers/subscribers to the same Topic are allowed
A single node may publish and/or subscribe to multiple Topics
Publishers and subscribers are generally unaware of each others
existence
Publish/subscribe model is a flexible paradigm (many-to-many,
one-way transport)
There is no order of execution required
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
Topics
Topics diagrammatic representation
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Services
Services
Publish/subscribe paradigm not appropriate for services
Services implement the request/reply functionality
Pair of message structures: one for request and one for reply
A node provider offers a service under a specific name
A client node uses the service by sending the request message and
awaits for the reply
From the programmer perspective, works as a remote procedure call
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
Services
Services diagrammatic representation
ROS graph concepts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Messages, Topics and Services
Messages more ROS command line goodies
Messages over Topics
1
2
3
rosmsg
rosmsg
rosmsg
list
show g e o m e t r y m s g s / V e c t o r 3
show g e o m e t r y m s g s / T w i s t
Vector3.msg and Twist.msg, from package geometry msgs
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Messages, Topics and Services
Messages more ROS command line goodies
Messages over Services
1
2
rossrv
rossrv
list
show
t u r t l e s i m /Spawn
Spawn.srv, from package turtlesim
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Revisiting the filesystem
ROS filesystem
Package structure revisited
Hypothetical package myPkg/
CmakeLists.txt: CMake build settings for package myPkg
manifest.xml: metadata and dependencies required by package
mainpage.dox: doc information of package myPkg
include/myPkg: c++ header files
src/: source code directory
bin/: compiled binaries directory
launch/: where launch files are stored (if needed)
msg/: message (.msg) types
srv/: service (.srv) types
scripts/: executable scripts
The end
What is ROS?
Getting started
Setting up VM
ROS filesystem
ROS graph concepts
Thats all for today, folks!
Today we have learnt
How awesome (and complex) ROS is
Why we should surrender to Ubuntu
How easy it is to install (on Ubuntu)
The power of rosbash
The ROS filesystem concepts
The ROS Graph concepts (most important lesson of today!)
Question time
Thank you very much!
Questions?
The end