ROS - Tutorials - UnderstandingNodes - ROS Wiki
ROS - Tutorials - UnderstandingNodes - ROS Wiki
Note: This tutorial assumes that you have completed the previous tutorials: building a ROS
package (/ROS/Tutorials/BuildingPackages).
Please ask about problems and questions regarding this tutorial on answers.ros.org
(http://answers.ros.org). Don't forget to include in your question the link to this page, the versions
of your OS & ROS, and also add appropriate tags.
Contents
1. Prerequisites
2. Quick Overview of Graph Concepts
3. Nodes
4. Client Libraries
5. roscore
6. Using rosnode
7. Using rosrun
8. Review
1. Prerequisites
For this tutorial we'll use a lighweight simulator, to install it run the following command:
Replace '<distro>' with the name of your ROS distribution (e.g. indigo, jade, kinetic)
wiki.ros.org/ROS/Tutorials/UnderstandingNodes 1/7
06/11/2019 ROS/Tutorials/UnderstandingNodes - ROS Wiki
roscore (/roscore): Master + rosout + parameter server (parameter server will be introduced
later)
3. Nodes
A node really isn't much more than an executable file within a ROS package. ROS nodes use a ROS
client library to communicate with other nodes. Nodes can publish or subscribe to a Topic. Nodes can
also provide or use a Service.
4. Client Libraries
ROS client libraries allow nodes written in different programming languages to communicate:
5. roscore
roscore is the first thing you should run when using ROS.
Please run:
$ roscore
wiki.ros.org/ROS/Tutorials/UnderstandingNodes 2/7
06/11/2019 ROS/Tutorials/UnderstandingNodes - ROS Wiki
SUMMARY
======
PARAMETERS
* /rosversion
* /rosdistro
NODES
If roscore does not initialize, you probably have a network configuration issue. See Network Setup
- Single Machine Configuration
(http://www.ros.org/wiki/ROS/NetworkSetup#Single_machine_configuration)
If roscore does not initialize and sends a message about lack of permissions, probably the ~/.ros
folder is owned by root, change recursively the ownership of that folder with:
6. Using rosnode
Open up a new terminal, and let's use rosnode to see what running roscore did... Bear in mind to
keep the previous terminal open either by opening a new tab or simply minimizing it.
Note: When opening a new terminal your environment is reset and your ~/.bashrc file is sourced.
If you have trouble running commands like rosnode then you might need to add some environment
setup files to your ~/.bashrc or manually re-source them.
rosnode displays information about the ROS nodes that are currently running. The rosnode list
command lists these active nodes:
$ rosnode list
wiki.ros.org/ROS/Tutorials/UnderstandingNodes 3/7
06/11/2019 ROS/Tutorials/UnderstandingNodes - ROS Wiki
/rosout
This showed us that there is only one node running: rosout (/rosout). This is always running as it
collects and logs nodes' debugging output.
This gave us some more information about rosout, such as the fact that it publishes /rosout_agg.
------------------------------------------------------------------------
Node [/rosout]
Publications:
* /rosout_agg [rosgraph_msgs/Log]
Subscriptions:
* /rosout [unknown type]
Services:
* /rosout/get_loggers
* /rosout/set_logger_level
Now, let's see some more nodes. For this, we're going to use rosrun to bring up another node.
7. Using rosrun
rosrun allows you to use the package name to directly run a node within a package (without having
to know the package path).
Usage:
wiki.ros.org/ROS/Tutorials/UnderstandingNodes 4/7
06/11/2019 ROS/Tutorials/UnderstandingNodes - ROS Wiki
NOTE: The turtle may look different in your turtlesim window. Don't worry about it - there are many
types of turtle (/Distributions#Current_Distribution_Releases) and yours is a surprise!
In a new terminal:
$ rosnode list
/rosout
/turtlesim
One powerful feature of ROS is that you can reassign Names from the command-line.
Close the turtlesim window to stop the node (or go back to the rosrun turtlesim terminal and use
ctrl-C). Now let's re-run it, but this time use a Remapping Argument (/Remapping%20Arguments) to
change the node's name:
wiki.ros.org/ROS/Tutorials/UnderstandingNodes 5/7
06/11/2019 ROS/Tutorials/UnderstandingNodes - ROS Wiki
$ rosnode list
/my_turtle
/rosout
Note: If you still see /turtlesim in the list, it might mean that you stopped the node in the terminal
using ctrl-C instead of closing the window, or that you don't have the $ROS_HOSTNAME
environment variable defined as described in Network Setup - Single Machine Configuration
(http://www.ros.org/wiki/ROS/NetworkSetup#Single_machine_configuration). You can try cleaning
the rosnode list with: $ rosnode cleanup
We see our new /my_turtle node. Let's use another rosnode command, ping, to test that it's up:
8. Review
What was covered:
roscore = ros+core : master (provides name service for ROS) + rosout (stdout/stderr) +
parameter server (parameter server will be introduced later)
rosnode = ros+node : ROS tool to get information about a node.
rosrun = ros+run : runs a node from a given package.
Now that you understand how ROS nodes work, let's look at how ROS topics work
(/ROS/Tutorials/UnderstandingTopics). Also, feel free to press Ctrl-C to stop turtlesim_node.
(http://www.osrfoundation.org)
wiki.ros.org/ROS/Tutorials/UnderstandingNodes 6/7
06/11/2019 ROS/Tutorials/UnderstandingNodes - ROS Wiki
wiki.ros.org/ROS/Tutorials/UnderstandingNodes 7/7