3. ROS Overview

3.1. Overview

Nodes are programs, a package is a collection of programs. ROS is based on nodes, that are processes that communicate with each others, send messages via topics. A topic is the bus where a message is sent.

The master, that can be run by `roscore`, provides naming and registration services to the rest of nodes in the ROS system. When a node publish an information, using a message structure, it publish it on a topic. A node must subscribe to a topic in order to read that information. The master track publishers and subscribers.

Messages are data types or data structures, one can use ROS messages, std_msgs, or create new one. User defined messages are stored in files with .msg extensions in the msg folder in the src folder of the workspace.

Topics are only one way buses, it mean if a node publish a topic, it doesn’t wait an answer. If a node need to receive a reply from another node, services should be used.

As you can see node1 publish a message on a topic. Node2 receive the message on that topic. It is similar to the concepts of newsletters. If you are subscribed to it, you receive emails otherwise no. And evry topic should have a name.

3.2. Turtle sim

In order to illustrate these concepts we will use the preinstalled package turtlesim. Open 4 terminal or use a terminal multiplexer and run:

// Terminal 1
roscore

// terminal 2
rosrun turtlesim turtlesim_node

// teminal 3
rosrun turtlesim turtle_teleop_key

// terminal 4
rqt_graph

In the graph we can see that the node (process) teleop_turtle is publishing on a topic called cmd_vel. The node turtlesim is receiving from the topic cmd_vel.

In another terminal run:

rostopic list

rostopic info /turtle1/cmd_vel

rostopic list show all list of topics that are active. rostopic info show the type of message that is published on the topic. We can see that on cmd_vel is being published a message of type geometry_msgs/Twist.

Run the follwing command:

rosmsg show geometry_msgs/Twist

you will get the data structure of the Twist message. A Twist is message that contain 2 variables linear and angular of type geometry_msgs/Vector3. A geometry_msgs/Vector3 type contain 3 variables x, y, z of type float64.

Simply a geometry_msgs/Twist is a data structure that can be used to write linear and angular speed. So on topic cmd_vel the teleop_turtle node is sending the desired speed to turtlesim node.

The speed can be sent to the turtle from any other node that publish on the /turtle1/cmd_vel topic. For example if you open rqt

rqt

Then from plugin, Robot tools, Robot steering, we can control the speed of the turtle.

../../../_images/turtlesim.gif