Programming for Robotics
Introduction to ROS
Course 1
Pter Fankhauser, Dominic Jud, Martin Wermelinger
Prof. Dr. Marco Hutter
Pter Fankhauser | 20.02.2017 | 1
Overview
Course 1 Course 3 Course 5
ROS architecture & philosophy TF Transformation System Case study
ROS master, nodes, and topics rqt User Interface
Console commands Robot models (URDF)
Catkin workspace and build system Simulation descriptions (SDF)
Launch-files
Gazebo simulator
Course 2 Course 4
ROS package structure ROS services
Integration and programming with Eclipse ROS actions (actionlib)
ROS C++ client library (roscpp) ROS time
ROS subscribers and publishers ROS bags
ROS parameter server
RViz visualization
Pter Fankhauser | 20.02.2017 | 2
Course Structure
Course 1 Course 2 Course 3 Course 4 Course 5
Deadline for Ex. 1. Deadline for Ex. 2. Deadline for Ex. 3. Deadline for Ex. 4.
Lecture 1
Lecture 2 Lecture 3 Lecture 4 Case Study
Exercise 1 Intro.
Exercise 2 Intro. Exercise 3 Intro. Exercise 4 Intro. Exercise 5 Intro.
Exercise 1 Exercise 5
Exercise 2 Exercise 3 Exercise 4
Deadline for Ex. 5.
Pter Fankhauser | 20.02.2017 | 3
Exercise Evaluation
Each exercise has several check questions
Each exercise counts for 20% of the final grade
We encourage team work, but every student has the show the results on his
own PC and is evaluated individually
Exercises are check by the teaching assistants when you are read, but latest the
following course day in the morning (08:1508:45, except for exercise 5)
Let the teaching assistant know once you are reading to present your results
The lectures start at 08:45
Pter Fankhauser | 20.02.2017 | 4
Overview Course 1
ROS architecture & philosophy
ROS master, nodes, and topics
Console commands
Catkin workspace and build system
Launch-files
Gazebo simulator
Pter Fankhauser | 20.02.2017 | 5
What is ROS?
ROS = Robot Operating System
ros.org
Process Simulation Control Package organization
management Visualization Planning Software distribution
Inter-process Graphical user Perception Documentation
communication interface Mapping Tutorials
Device drivers Data logging Manipulation
Pter Fankhauser | 20.02.2017 | 6
History of ROS
Originally developed in 2007 at the
Stanford Artificial Intelligence
Laboratory
Since 2013 managed by OSRF
Today used by many robots,
universities and companies
De facto standard for robot
programming
ros.org
Pter Fankhauser | 20.02.2017 | 7
ROS Philosophy
Peer to peer
Individual programs communicate over defined API (ROS messages, services, etc.).
Distributed
Programs can be run on multiple computers and communicate over the network.
Multi-lingual
ROS modules can be written in any language for which a client library exists (C++, Python,
MATLAB, Java, etc.).
Light-weight
Stand-alone libraries are wrapped around with a thin ROS layer.
Free and open-source
Most ROS software is open-source and free to use.
Pter Fankhauser | 20.02.2017 | 8
ROS Workspace Environment
Defines context for the current workspace This is
Default workspace loaded with already
setup in the
> source /opt/ros/indigo/setup.bash provided
installation.
Overlay your catkin workspace with
> cd ~/catkin_ws See setup with
> source devel/setup.bash
> cat ~/.bashrc
Check your workspace with
> echo $ROS_PACKAGE_PATH
More info
http://wiki.ros.org/indigo/Installation/Ubuntu
http://wiki.ros.org/catkin/workspaces
Pter Fankhauser | 20.02.2017 | 9
ROS Master
Manages the communication between nodes ROS Master
Every node registers at startup with the
master
Start a master with
> roscore
More info
http://wiki.ros.org/Master
Pter Fankhauser | 20.02.2017 | 10
ROS Nodes
Single-purpose, executable program ROS Master
Individually compiled, executed, and
Registration Registration
managed
Organized in packages
Run a node with Node 1 Node 2
> rosrun package_name node_name
See active nodes with
> rosnode list
Retrieve information about a node with
More info
> rosnode info node_name http://wiki.ros.org/rosnode
Pter Fankhauser | 20.02.2017 | 11
ROS Topics
Nodes communicate over topics ROS Master
Nodes can publish or subscribe to a topic
Typically, 1 publisher and n subscribers Registration Registration
Informs about
Topic is a name for a stream of messages connection
Node 1 Messages Node 2
Publisher Subscriber
List active topics with
> rostopic list
Publish Subscribe
Subscribe and print the contents of a topic with topic
Subscribe
> rostopic echo /topic
Show information about a topic with
More info
> rostopic info /topic http://wiki.ros.org/rostopic
Pter Fankhauser | 20.02.2017 | 12
ROS Messages
Data structure defining the type of a topic ROS Master
Compromised of a nested structure of
Registration Registration
integers, floats, booleans, strings etc. and
arrays of objects
Defined in *.msg files Node 1 Node 2
Publisher Subscriber
See the type of a topic
> rostopic type /topic Publish Subscribe
topic
Publish a message to a topic Subscribe
*.msg Message definition
> rostopic pub /topic type args
int number
double width
More info
string description
etc. http://wiki.ros.org/Messages
Pter Fankhauser | 20.02.2017 | 13
ROS Messages
Pose Stamped Example
geometry_msgs/PoseStamped.msg
geometry_msgs/Point.msg
std_msgs/Header header
float64 x uint32 seq
float64 y time stamp
float64 z string frame_id
geometry_msgs/Pose pose
geometry_msgs/Point position
sensor_msgs/Image.msg float64 x
float64 y
std_msgs/Header header float64 z
uint32 seq geometry_msgs/Quaternion
time stamp orientation
string frame_id float64 x
uint32 height float64 y
uint32 width float64 z
string encoding float64 w
uint8 is_bigendian
uint32 step
uint8[] data
Pter Fankhauser | 20.02.2017 | 14
Example
Console Tab Nr. 1 Starting a roscore
Start a roscore with
> roscore
Pter Fankhauser | 20.02.2017 | 15
Example
Console Tab Nr. 2 Starting a talker node
Run a talker demo node with
> rosrun roscpp_tutorials talker
Pter Fankhauser | 20.02.2017 | 16
Example
Console Tab Nr. 3 Analyze talker node
See the list of active nodes
> rosnode list
Show information about the talker node
> rosnode info /talker
See information about the chatter topic
> rostopic info /chatter
Pter Fankhauser | 20.02.2017 | 17
Example
Console Tab Nr. 3 Analyze chatter topic
Check the type of the chatter topic
> rostopic type /chatter
Show the message contents of the topic
> rostopic echo /chatter
Analyze the frequency
> rostopic hz /chatter
Pter Fankhauser | 20.02.2017 | 18
Example
Console Tab Nr. 4 Starting a listener node
Run a listener demo node with
> rosrun roscpp_tutorials listener
Pter Fankhauser | 20.02.2017 | 19
Example
Console Tab Nr. 3 Analyze
See the new listener node with
> rosnode list
Show the connection of the nodes over the
chatter topic with
> rostopic info /chatter
Pter Fankhauser | 20.02.2017 | 20
Example
Console Tab Nr. 3 Publish Message from Console
Close the talker node in console nr. 2 with Ctrl + C
Publish your own message with
> rostopic pub /chatter std_msgs/String
"data: 'ETH Zurich ROS Course'"
Check the output of the listener in console nr. 4
Pter Fankhauser | 20.02.2017 | 21
catkin Build System
catkin is the ROS build system to generate
executables, libraries, and interfaces
The catkin
We suggest to use the Catkin Command Line Tools command line
tools are pre-
Use catkin build instead of catkin_make installed in the
provided
Navigate to your catkin workspace with installation.
> cd ~/catkin_ws
Build a package with
> catkin build package_name
!
Whenever you build a new package, update your environment More info
http://wiki.ros.org/catkin/Tutorials
> source devel/setup.bash https://catkin-tools.readthedocs.io/
Pter Fankhauser | 20.02.2017 | 22
catkin Build System
The catkin workspace contains the following spaces
Work here Dont touch Dont touch
The source space contains The build space is where The development (devel)
the source code. This is where CMake is invoked to build the space is where built targets
you can clone, create, and packages in the source are placed (prior to being
edit source code for the space. Cache information and installed).
packages you want to build. other intermediate files are
kept here.
If necessary, clean the entire build and devel space with
More info
> catkin clean
http://wiki.ros.org/catkin/workspaces
Pter Fankhauser | 20.02.2017 | 23
catkin Build System
The catkin workspace setup can be checked with
> catkin config
For example, to set the CMake build type to Release
(or Debug etc.), use
> catkin build --cmake-args
-DCMAKE_BUILD_TYPE=Release
Already
setup in the
More info provided
http://catkin-tools.readthedocs.io/en/latest/verbs/catkin_config.html
http://catkin-tools.readthedocs.io/en/latest/cheat_sheet.html installation.
Pter Fankhauser | 20.02.2017 | 24
Example
Open a terminal and browse to your git folder https://github.com/ethz-asl/ros_best_practices
> cd ~/git
Clone the Git repository with
> git clone https://github.com/ethz-
asl/ros_best_practices.git
Symlink the new package to your catkin workspace
> ln -s ~/git/ros_best_practices/ ~/catkin_ws/src/
Note: You could also directly clone to your catkin workspace, but using a
common git folder is convenient if you have multiple catkin workspaces.
Pter Fankhauser | 20.02.2017 | 25
Example
Go to your catkin workspace
> cd ~/catkin_ws
Build the package with
> catkin build ros_package_template
Re-source your workspace setup
> source devel/setup.bash
Launch the node with
> roslaunch ros_package_template
ros_package_template.launch
Pter Fankhauser | 20.02.2017 | 26
Example console output for
ROS Launch roslaunch roscpp_tutorials talker_listener.launch
launch is a tool for launching multiple nodes
(as well as setting parameters)
Are written in XML as *.launch files
If not yet running, launch automatically starts
a roscore
Browse to the folder and start a launch file with
> roslaunch file_name.launch
Start a launch file from a package with
> roslaunch package_name file_name.launch
More info
http://wiki.ros.org/roslaunch
Pter Fankhauser | 20.02.2017 | 27
ROS Launch
File Structure
talker_listener.launch
!
<launch> Notice the syntax difference
<node name="listener" pkg="roscpp_tutorials" type="listener" output="screen"/>
<node name="talker" pkg="roscpp_tutorials" type="talker" output="screen"/>
for self-closing tags:
</launch> <tag></tag> and <tag/>
launch: Root element of the launch file
node: Each <node> tag specifies a node to be launched
name: Name of the node (free to choose)
pkg: Package containing the node
type: Type of the node, there must be a corresponding executable with the same name
output: Specifies where to output log messages (screen: console, log: log file)
More info
http://wiki.ros.org/roslaunch/XML
http://wiki.ros.org/roslaunch/Tutorials/Roslaunch%20tips%20for%20larger%20projects
Pter Fankhauser | 20.02.2017 | 28
ROS Launch
Arguments
range_world.launch (simplified)
<?xml version="1.0"?>
<launch>
<arg name="use_sim_time" default="true"/>
Create re-usable launch files with <arg> tag, <arg name="world" default="gazebo_ros_range"/>
<arg name="debug" default="false"/>
which works like a parameter (default optional) <arg name="physics" default="ode"/>
<arg name="arg_name" default="default_value"/>
<group if="$(arg use_sim_time)">
<param name="/use_sim_time" value="true" />
</group>
Use arguments in launch file with
<include file="$(find gazebo_ros)
$(arg arg_name) /launch/empty_world.launch">
<arg name="world_name" value="$(find gazebo_plugins)/
test/test_worlds/$(arg world).world"/>
When launching, arguments can be set with <arg name="debug" value="$(arg debug)"/>
<arg name="physics" value="$(arg physics)"/>
> roslaunch launch_file.launch arg_name:=value </include>
</launch>
More info
http://wiki.ros.org/roslaunch/XML/arg
Pter Fankhauser | 20.02.2017 | 29
ROS Launch
Including Other Launch Files
range_world.launch (simplified)
<?xml version="1.0"?>
<launch>
<arg name="use_sim_time" default="true"/>
<arg name="world" default="gazebo_ros_range"/>
Include other launch files with <include> tag to <arg name="debug" default="false"/>
organize large projects <arg name="physics" default="ode"/>
<include file="package_name"/> <group if="$(arg use_sim_time)">
<param name="/use_sim_time" value="true" />
</group>
Find the system path to other packages with
<include file="$(find gazebo_ros)
$(find package_name) /launch/empty_world.launch">
<arg name="world_name" value="$(find gazebo_plugins)/
Pass arguments to the included file test/test_worlds/$(arg world).world"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="arg_name" value="value"/> <arg name="physics" value="$(arg physics)"/>
</include>
</launch>
More info
http://wiki.ros.org/roslaunch/XML/include
Pter Fankhauser | 20.02.2017 | 30
Gazebo Simulator
Object tree Toolbar
Simulate 3d rigid-body dynamics
Simulate a variety of sensors including noise
3d visualization and user interaction
Includes a database of many robots and
environments (Gazebo worlds)
Provides a ROS interface
Extensible with plugins
Run Gazebo with
> rosrun gazebo_ros gazebo Properties Start and pause simulation
More info
http://gazebosim.org/
http://gazebosim.org/tutorials
Pter Fankhauser | 20.02.2017 | 31
Further References
ROS Wiki ROS Cheat Sheet
http://wiki.ros.org/ https://github.com/ros/cheatsheet/releases/dow
Installation nload/0.0.1/ROScheatsheet_catkin.pdf
http://wiki.ros.org/ROS/Installation ROS Best Practices
Tutorials https://github.com/ethz-
asl/ros_best_practices/wiki
http://wiki.ros.org/ROS/Tutorials
ROS Package Template
Available packages
https://github.com/ethz-
http://www.ros.org/browse/
asl/ros_best_practices/tree/master/ros_packag
e_template
Pter Fankhauser | 20.02.2017 | 32
Contact Information
ETH Zurich Lecturers
Robotic Systems Lab Pter Fankhauser (pfankhauser@ethz.ch)
Prof. Dr. Marco Hutter Dominic Jud
LEE J 225 Martin Wermelinger
Leonhardstrasse 21
8092 Zurich Course website:
Switzerland http://www.rsl.ethz.ch/education-
students/lectures/ros.html
http://www.rsl.ethz.ch
Pter Fankhauser | 20.02.2017 | 33