Creating launch files
The launch files in ROS are a very useful feature for launching more than one node. In the preceding examples, we have seen a maximum of two ROS nodes, but imagine a scenario in which we have to launch 10 or 20 nodes for a robot. It will be difficult if we run each node in a terminal one by one. Instead, we can write all nodes inside an XML-based file called launch files and, using a command called roslaunch, we can parse this file and launch the nodes.
The roslaunch command will automatically start the ROS Master and the parameter server. So, in essence, there is no need to start the roscore command and individual node; if we launch the file, all operations will be done in a single command.
Let's start creating launch files. Switch to the package folder and create a new launch file called demo_topic.launch to launch two ROS nodes that are publishing and subscribing an integer value. We keep the launch files in a launch folder, which is inside the package:
$ roscd mastering_ros_demo_pkg $ mkdir launch $ cd launch $ gedit demo_topic.launch
Paste the following content into the file:
<launch> <node name="publisher_node" pkg="mastering_ros_demo_pkg" type="demo_topic_publisher" output="screen"/> <node name="subscriber_node" pkg="mastering_ros_demo_pkg" type="demo_topic_subscriber" output="screen"/> </launch>
Let's discuss what is in the code. The <launch></launch> tags are the root element in a launch file. All definitions will be inside these tags.
The <node> tag specifies the desired node to launch:
<node name="publisher_node" pkg="mastering_ros_demo_pkg" type="demo_topic_publisher" output="screen"/>
The name tag inside <node> indicates the name of the node, pkg is the name of the package, and type is the name of executable we are going to launch.
After creating the launch file demo_topic.launch, we can launch it using the following command:
$ roslaunch mastering_ros_demo_pkg demo_topic.launch
Here is the output we get if the launch is successful:
We can check the list of nodes using:
$ rosnode list
We can also view the log messages and debug the nodes using a GUI tool called rqt_console:
$ rqt_console
We can see the logs generated by two nodes in this tool, as shown here: