Note: This tutorial assumes that you have completed the previous tutorials: Understanding ROS services and parameters. |
![]() |
Using rxconsole and roslaunch
Description: This tutorial introduces ROS using rxconsole and rxloggerlevel for debugging and roslaunch for starting many nodes at once.Tutorial Level: BEGINNER
Next Tutorial: Using rosed
Contents
Using rxconsole and rxloggerlevel
rxconsole can attaches to ROS's logging framework to display output from nodes. rxloggerlevel allows us to change the verbosity level (DEBUG, WARN, INFO, and ERROR) of nodes as they run. First we need to make rxtools:
$ rosmake rxtools
Now let's look at the turtlesim output in rxconsole and switch logger levels in rxloggerlevel as we use tutrlesim. Before we start the turtlesim, new terminals let's start rxconsole and rxloggerlevel:
$ rxloggerlevel $ rxconsole
You will see two windows popup:
Now let's start turtlesim in a new terminal:
$ rosrun turtlesim turtlesim
Since the default logger level is INFO you will see any info that the turtlesim publishes when it starts up, which should look like:
Now let's change the logger level to error by refreshing the nodes in the rxloggerlevel window and selecting error as shown below:
Now let's run our turtle into the wall and see what is displayed in our rxconsole:
rostopic pub command_velocity turtlesim/Velocity -r 1 -- 2.0 0.0
Let's Crtl-C our turtlesim and let's use roslaunch to bring up multiple turtlesims and a mimicing node to cause one turtlesim to mimic another:
Using roslaunch
roslaunch starts nodes as defined in a launch file.
Usage:
$ roslaunch [package] [filename.launch]
First we must make a launch file. In your beginner tutorials package let's make a launch directory and create a launch file:
$ roscd beginner_tutorials $ mkdir launch $ cd launch
The Launch File
Now let's create a launch file called turtlemimic.launch and paste the following:
1 <launch>
2
3 <group ns="turtlesim1">
4 <node pkg="turtlesim" name="sim" type="turtlesim"/>
5 </group>
6
7 <group ns="turtlesim2">
8 <node pkg="turtlesim" name="sim" type="turtlesim"/>
9 </group>
10
11 <node pkg="turtlesim" name="mimic" type="mimic">
12 <remap from="input" to="turtlesim1"/>
13 <remap from="output" to="turtlesim2"/>
14 </node>
15
16 </launch>
The Launch File Explained
Now, let's break the launch xml down.
1 <launch>
Here we start the launch file with the launch tag, so that the file is identified as a launch file.
Here we start two groups with a namespace tag of turtlesim1 and turtlesim2 with a turtlesim node with a name of sim. This allows us to start two simulators without having name conflicts.
11 <node pkg="turtlesim" name="mimic" type="mimic">
12 <remap from="input" to="turtlesim1/turtle1"/>
13 <remap from="output" to="turtlesim2/turtle1"/>
14 </node>
Here we start the mimic node with the topics input and output renamed to turtlesim1 and turtlesim2. This renaming will cause turtlesim2 to mimic turtlesim1.
16 </launch>
This closes the xml tag for the launch file.
roslaunching
Now let's roslaunch the launch file:
$ roslaunch beginner_tutorials turtlemimic.launch
Two turtlesims will start and in a new terminal send the rostopic command:
$ rostopic pub turtlesim1/command_velocity turtlesim/Velocity -r 1 -- 90.0 -1.8
You will see the two turtlesims start moving even though the publish command is only being sent to turtlesim1.
We can also use rxgraph to better understand what our launch file did:
$ rxgraph
Now that you have successfully use rxconsole and roslaunch, let's write a simple publisher and subscriber (python) (c++). You can Crtl-C all your turtlesims you will not need them for the next tutorials.