The rqt tool in ROS enables us to visualize the node connections while a launch file is running. Let’s see what happens when we run the launch file we created in this tutorial. Open up a new terminal window.
Directions
Type:
roslaunch hello_world talker_listener.launch
Then in a new terminal window, type:
rqt_graph
You can see that the listener_node is subscribed to the /chatter topic. The talker_node is publishing to the /chatter topic. You might also see another node called /rosout (if you don’t see /rosout that is OK). This is where debug statements from nodes are going.
One way to execute a program in ROS it to launch one node at a time. In fact, that is exactly what we did in my previous post. This is fine if we have just two nodes, but what do we do if we have multiple nodes? Launching each node one-by-one can get inefficient really quickly.
Fortunately, ROS has a tool called roslaunch that enables you to launch multiple nodes all at once. Let’s do that now.
Directions
The first thing we need to do is to open a new terminal window and go to the hello_world package (or whatever package you want to launch).
cd catkin_ws/src/hello_world
Create a folder called ‘launch’.
mkdir launch
Create a new launch file inside the launch directory you just made.
cd launch
Open up the text editor.
gedit
Type the code below into the file, and save it. I’m going to save mine as talker_listener.launch. Save this file to the catkin_ws/src/hello_world/launch folder. This file will run C++ executables.
Note in the code above, if we are running a Python script, you will put the name of the script between the double quotes after type=. For example, if we want the launch file to run code named example.py, that line of the launch file code would look like this:
And, to make sure the ROS launch file can find the code, we have to make sure we change the permissions of the Python script before we execute the launch file. The code for doing this would be as follows:
chmod +x example.py
Open up a new terminal window, and type:
cd catkin_ws/src/hello_world/launch
Change the permissions of the launch file we just created. It will ask you for your password.
sudo chmod +x talker_listener.launch
Run the launch file. Note that roslaunch automatically starts up roscore, so you don’t need to type roscore.
roslaunch hello_world talker_listener.launch
Press CTRL+C on your keyboard to stop the processes.
Now let’s create a launch file that launches the python nodes, talker.py and listener.py. I created these nodes in this tutorial. Open up the text editor.
gedit
Type the code below into the file, and save it as talker_listener_python.launch. Save this file to the catkin_ws/src/hello_world/launch folder.
Press CTRL+C on your keyboard to stop the processes.
There may be times when you try to run a launch file, and ROS isn’t able to locate a new package. To refresh the package list, you execute the following command.
In this post, we will learn how to create and execute publisher and subscriber nodes in ROS using C++ and Python.
A node in ROS is just a program (e.g. typically a piece of source code made in C++ or Python) that does some computation. ROS nodes reside inside ROS packages. ROS packages reside inside the src folder of your catkin workspace (i.e. catkin_ws).
If you don’t already have a package named “hello_world” set up, set that up now.
Once you have your package set up, you are ready to create a node. Let’s create our first node. This node will be a publisher node. A publisher node is a software program that publishes messages (i.e. data values) to a particular topic. Check out this post, if you need more clarification on what a publisher and a topic are.
Open up a new Linux terminal window.
Type the following command to open the Linux text editor.
We now need a program that subscribes to the data (i.e. “hello world” message) published by the talker. This node will be a subscriber node. A subscriber node is a software program that subscribes to messages (i.e. data values) on a particular topic.
Open up a new Linux terminal window.
Type the following command to open the Linux text editor.
Our two nodes have been created, but now we need to convert that source code written in C++ into an executable that our machine can understand. To do that, open a new terminal window, and navigate to your catkin_ws/src/hello_world/ folder.
cd catkin_ws/src/hello_world/
Type the dir command to see the list of files in that directory. One of these files is CMakeLists.txt. Open that file.
gedit CMakeLists.txt
Add these lines to the very bottom of your CMakeLists.txt file.
Congratulations! We have covered a lot of ground. You now know how to build publisher and subscriber nodes using the two most common languages used in robotics, Python and C++.