Você está na página 1de 41

ROS Introduction

Main concepts
Basic commands

Lecturer: Roi Yehoshua


roiyeho@gmail.com
The Problem
• Lack of standards for robotics

(C)2016 Roi Yehoshua 2


What is ROS?
• ROS is an open-source robot operating system
• A set of software libraries and tools that help you
build robot applications that work across a wide
variety of robotic platforms
• Originally developed in 2007 at the Stanford
Artificial Intelligence Laboratory and development
continued at Willow Garage
• Since 2013 managed by OSRF (Open Source Robotics
Foundation)

(C)2016 Roi Yehoshua 3


ROS Main Features
ROS has two "sides"
• The operating system side, which provides standard
operating system services such as:
– hardware abstraction
– low-level device control
– implementation of commonly used functionality
– message-passing between processes
– package management
• A suite of user contributed packages that implement
common robot functionality such as SLAM, planning,
perception, vision, manipulation, etc.

(C)2016 Roi Yehoshua 4


ROS Main Features

Taken from Sachin Chitta and Radu Rusu (Willow Garage)

(C)2016 Roi Yehoshua 5


ROS Philosophy
• Peer to Peer
– ROS systems consist of numerous small computer programs which
connect to each other and continuously exchange messages
• Tools-based
– There are many small, generic programs that perform tasks such as
visualization, logging, plotting data streams, etc.
• Multi-Lingual
– ROS software modules can be written in any language for which a
client library has been written. Currently client libraries exist for C++,
Python, LISP, Java, JavaScript, MATLAB, Ruby, and more.
• Thin
– The ROS conventions encourage contributors to create stand-alone
libraries and then wrap those libraries so they send and receive
messages to/from other ROS modules.
• Free and open source

(C)2016 Roi Yehoshua 6


ROS Wiki
• http://wiki.ros.org/
• Installation: http://wiki.ros.org/ROS/Installation
• Tutorials: http://wiki.ros.org/ROS/Tutorials
• ROS Tutorial Videos
– http://www.youtube.com/playlist?list=PLDC89965A56E6A8D6
• ROS Cheat Sheet
– http://www.tedusar.eu/files/summerschool2013/ROSche
atsheet.pdf

(C)2016 Roi Yehoshua 7


Robots using ROS
http://wiki.ros.org/Robots

(C)2016 Roi Yehoshua 8


ROS Core Concepts
• Nodes
• Messages and Topics
• Services
• ROS Master
• Parameters
• Stacks and packages

(C)2016 Roi Yehoshua 9


ROS Nodes
• Single-purposed executable programs
– e.g. sensor driver(s), actuator driver(s), mapper,
planner, UI, etc.
• Individually compiled, executed, and managed
• Nodes are written using a ROS client library
– roscpp – C++ client library
– rospy – python client library
• Nodes can publish or subscribe to a Topic
• Nodes can also provide or use a Service
(C)2016 Roi Yehoshua 10
ROS Topics
• A topic is a name for a stream of messages with a
defined type
– e.g., data from a laser range-finder might be sent on
a topic called scan, with a message type of LaserScan
• Nodes communicate with each other by
publishing messages to topics
• Publish/Subscribe model: 1-to-N broadcasting

(C)2016 Roi Yehoshua 11


ROS Topics

(C)2016 Roi Yehoshua 12


The ROS Graph

(C)2016 Roi Yehoshua 13


Fetch an Item Graph

Taken from Programming Robots with ROS (Quigley et al.)

(C)2016 Roi Yehoshua 14


ROS Messages
• Strictly-typed data structures for inter-node
communication
• For example, geometry_msgs/Twist is used to
express velocity commands:
Vector3 linear
Vector3 angular
– Vector3 is another message type composed of:
float64 x
float64 y
float64 z

(C)2016 Roi Yehoshua 15


ROS Services
• Synchronous inter-node transactions / RPC
• Service/Client model: 1-to-1 request-response
• Service roles:
– carry out remote computation
– trigger functionality / behavior
• Example:
– map_server/static_map – retrieves the current grid
map used by the robot for navigation

(C)2016 Roi Yehoshua 16


ROS Master
• Provides connection information to nodes so that
they can transmit messages to each other
– Every node connects to a master at startup to register
details of the message streams they publish, and the
streams to which that they to subscribe
– When a new node appears, the master provides it
with the information that it needs to form a direct
peer-to-peer connection with other nodes publishing
and subscribing to the same message topics

(C)2016 Roi Yehoshua 17


ROS Master
• Let’s say we have two nodes: a Camera node and an
Image_viewer node
• Typically the camera node would start first notifying
the master that it wants to publish images on the
topic "images":

(C)2016 Roi Yehoshua 18


ROS Master
• Now, Image_viewer wants to subscribe to the topic
"images" to see if there's maybe some images there:

(C)2016 Roi Yehoshua 19


ROS Master
• Now that the topic "images" has both a publisher and a
subscriber, the master node notifies Camera and
Image_viewer about each others existence, so that they
can start transferring images to one another:

(C)2016 Roi Yehoshua 20


Parameter Server
• A shared, multi-variate dictionary that is
accessible via network APIs
• Best used for static, non-binary data such as
configuration parameters
• Runs inside the ROS master

(C)2016 Roi Yehoshua 21


ROS Packages
• Software in ROS is organized in packages.
• A package contains one or more nodes and
provides a ROS interface
• Most of ROS packages are hosted in GitHub

(C)2016 Roi Yehoshua 22


ROS Package System

Taken from Sachin Chitta and Radu Rusu (Willow Garage)

(C)2016 Roi Yehoshua 23


ROS Distribution Releases

(C)2016 Roi Yehoshua 24


ROS Supported Platforms
• ROS is currently supported only on Ubuntu
– other variants such as Windows and Mac OS X are considered
experimental (will be supported on ROS 2.0)
• ROS distribution supported is limited to <=3 latest
Ubuntu versions
• ROS Jade supports the following Ubuntu versions:
– Vivid (15.04)
– Utopic (14.04)
– Trusty (14.04 LTS)
• ROS Indigo supports the following Ubuntu versions:
– Trusty (14.04 LTS)
– Saucy (13.10)

(C)2016 Roi Yehoshua 25


ROS Installation
• If you already have Ubuntu installed, follow the
instructions at:
– http://wiki.ros.org/indigo/Installation/Ubuntu
– You can also download a VM with ROS Indigo Pre-
installed from here:
– http://nootrix.com/downloads/#RosVM
• Two VMs are available: one with Ubuntu 32Bits and
the other with Ubuntu 64Bits (.ova files)
• You can import this file into VirtualBox or VMWare

(C)2016 Roi Yehoshua 26


ROS Environment
• ROS relies on the notion of combining spaces using the
shell environment
– This makes developing against different versions of ROS or
against different sets of packages easier
• After you install ROS you will have setup.*sh files in
'/opt/ros/<distro>/', and you could source them like so:
$ source /opt/ros/indigo/setup.bash

• You will need to run this command on every new shell


you open to have access to the ros commands, unless
you add this line to your bash startup file (~/.bashrc)
– If you used the pre-installed VM it’s already done for you
(C)2016 Roi Yehoshua 27
ROS Basic Commands
• roscore
• rosrun
• rosnode
• rostopic

(C)2016 Roi Yehoshua 28


roscore
• roscore is the first thing you should run when
using ROS
$ roscore

• roscore will start up:


– a ROS Master
– a ROS Parameter Server
– a rosout logging node

(C)2016 Roi Yehoshua 29


roscore

(C)2016 Roi Yehoshua 30


rosrun
• rosrun allows you to run a node
• Usage:
$ rosrun <package> <executable>

• Example:
$ rosrun turtlesim turtlesim_node

(C)2016 Roi Yehoshua 31


Demo - Turtlesim
• In separate terminal windows run:
– roscore
– rosrun turtlesim turtlesim_node
– rosrun turtlesim turtle_teleop_key

(C)2016 Roi Yehoshua 32


Demo - Turtlesim

(C)2016 Roi Yehoshua 33


rosnode
• Displays debugging information about ROS nodes,
including publications, subscriptions and connections
Command
$rosnode list List active nodes
$rosnode ping Test connectivity to node
$rosnode info Print information about a node
$rosnode kill Kill a running node
$rosnode machine List nodes running on a particular machine

(C)2016 Roi Yehoshua 34


rosnode info

(C)2016 Roi Yehoshua 35


rostopic
• Gives information about a topic and allows to
publish messages on a topic
Command
$rostopic list List active topics
$rosnode echo /topic Prints messages of the topic to the screen
$rostopic info /topic Print information about a topic
$rostopic type /topic Prints the type of messages the topic
publishes
$rostopic pub /topic type args Publishes data to a topic

(C)2016 Roi Yehoshua 36


rostopic list
• Displays the list of current topics:

(C)2016 Roi Yehoshua 37


Publish to ROS Topic
• Use the rostopic pub command to publish messages
to a topic
• For example, to make the turtle move forward at a
0.2m/s speed, you can publish a cmd_vel message
to the topic /turtle1/cmd_vel:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y:
0, z: 0}, angular: {x: 0, y: 0, z: 0}}'
– To specify only the linear x velocity:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist '{linear: {x: 0.2}}'

(C)2016 Roi Yehoshua 38


Publish to ROS Topic
• Some of the messages like cmd_vel have a
predefined timeout
• If you want to publish a message continuously use
the argument -r with the loop rate in Hz
• For example, to make the turtle turn in circles
continuously, type:
$ rostopic pub /turtle1/cmd_vel -r 10 geometry_msgs/Twist ‘{angular:
{z: 0.5}}'

(C)2016 Roi Yehoshua 39


Publish to ROS Topic

(C)2016 Roi Yehoshua 40


Ex. 1
• Run the turtlesim node
• Send a command to turtlesim to move backwards
continuously at 5Hz rate

(C)2016 Roi Yehoshua 41

Você também pode gostar