Bird
Raised Fist0
ROSframework~10 mins

Launching multiple nodes in ROS - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Launching multiple nodes
Start launch file
↓
Parse launch config
↓
Create Node 1
↓
Create Node 2
↓
... Create more nodes ...
↓
Start all nodes
↓
Nodes running concurrently
↓
Monitor nodes
↓
Shutdown on signal
The launch file starts, parses configuration, creates each node, starts them all concurrently, then monitors until shutdown.
Execution Sample
ROS
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(package='demo_pkg', executable='node1'),
        Node(package='demo_pkg', executable='node2')
    ])
This launch file starts two nodes from the same package concurrently.
Execution Table
StepActionNode CreatedStateNotes
1Start launch fileNoneInitializingLaunch system starts
2Parse launch descriptionNoneParsedNodes to create identified
3Create Node 1node1CreatedNode 1 object ready
4Create Node 2node2CreatedNode 2 object ready
5Start Node 1node1RunningNode 1 process started
6Start Node 2node2RunningNode 2 process started
7Monitor nodesnode1, node2RunningBoth nodes active concurrently
8Shutdown signal receivednode1, node2StoppingGraceful shutdown begins
9All nodes stoppedNoneStoppedLaunch file ends
💡 All nodes stopped after shutdown signal, launch process ends
Variable Tracker
VariableStartAfter Step 3After Step 4After Step 6Final
node1NoneCreatedCreatedRunningStopped
node2NoneNoneCreatedRunningStopped
launch_stateInitializingParsedParsedRunningStopped
Key Moments - 2 Insights
Why do both nodes run at the same time instead of one after the other?
Because the launch system starts all nodes concurrently after creating them, as shown in steps 5 and 6 in the execution_table.
What happens if the shutdown signal comes while nodes are running?
The launch system begins a graceful shutdown, stopping all nodes as shown in steps 8 and 9 in the execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step does Node 2 start running?
AStep 5
BStep 6
CStep 4
DStep 7
💡 Hint
Check the 'Action' and 'State' columns for Node 2 in the execution_table rows
According to variable_tracker, what is the state of node1 after Step 4?
ACreated
BRunning
CNone
DStopped
💡 Hint
Look at the 'node1' row under 'After Step 4' in variable_tracker
If a third node is added, how would the execution_table change?
AThe shutdown step would be removed
BNode 3 would start before Node 1
CThere would be an extra 'Create Node 3' and 'Start Node 3' step
DNodes would start sequentially, not concurrently
💡 Hint
Refer to the pattern of node creation and starting steps in execution_table
Concept Snapshot
Launching multiple nodes in ROS:
- Use a launch file with multiple Node() actions
- Each Node() specifies package and executable
- Launch system creates and starts all nodes concurrently
- Nodes run simultaneously until shutdown
- Shutdown signal stops all nodes gracefully
Full Transcript
This visual execution shows how a ROS launch file starts multiple nodes. First, the launch file begins and parses the configuration. Then it creates each node object one by one. After creation, it starts all nodes concurrently, so they run at the same time. The system monitors the nodes while running. When a shutdown signal is received, it stops all nodes gracefully and ends the launch process. Variables like node1 and node2 change state from None to Created to Running and finally to Stopped. This helps beginners see the step-by-step flow of launching multiple nodes in ROS.

Practice

(1/5)
1. What is the main purpose of a ROS launch file when working with multiple nodes?
easy
A. To debug a single ROS node
B. To write the source code of ROS nodes
C. To start several ROS nodes together with one command
D. To stop all running ROS nodes automatically

Solution

  1. Step 1: Understand the role of launch files and compare options

    Launch files are used to start multiple ROS nodes at once, simplifying the process. Only "To start several ROS nodes together with one command" correctly describes starting multiple nodes together; others describe unrelated tasks.
  2. Final Answer:

    To start several ROS nodes together with one command -> Option C
  3. Quick Check:

    Launch file = start multiple nodes [OK]
Hint: Launch files group nodes to run with one command [OK]
Common Mistakes:
  • Thinking launch files write node code
  • Confusing launch files with debugging tools
  • Assuming launch files stop nodes
2. Which of the following is the correct XML tag to define a node in a ROS launch file?
easy
A.
B.
C.
D.

Solution

  1. Step 1: Recall ROS launch file syntax and check options

    The correct tag to start a node is <node> with attributes pkg, type, and name. Only <node pkg="package_name" type="node_type" name="node_name" /> uses the correct <node> tag; others use invalid tags like <launch>, <start>, <run>.
  2. Final Answer:

    <node pkg="package_name" type="node_type" name="node_name" /> -> Option A
  3. Quick Check:

    Node tag = <node> [OK]
Hint: Use <node> tag with pkg, type, and name attributes [OK]
Common Mistakes:
  • Using <launch> or <start> instead of <node>
  • Forgetting to close the tag properly
  • Mixing up attribute names
3. Given this launch file snippet:
<launch>
  <node pkg="turtlesim" type="turtlesim_node" name="sim1" />
  <node pkg="turtlesim" type="turtlesim_node" name="sim2" />
</launch>

What happens when you run roslaunch with this file?
medium
A. The launch file causes a syntax error and no nodes start
B. Only one turtlesim node starts named sim1
C. Two nodes start but both have the same name sim1 causing a conflict
D. Two turtlesim nodes named sim1 and sim2 start simultaneously

Solution

  1. Step 1: Analyze node definitions and ROS naming rules

    Two nodes are defined with different names: sim1 and sim2, both from turtlesim package. Nodes with unique names can run simultaneously without conflict.
  2. Final Answer:

    Two turtlesim nodes named sim1 and sim2 start simultaneously -> Option D
  3. Quick Check:

    Unique node names = both run [OK]
Hint: Different node names allow multiple nodes to run [OK]
Common Mistakes:
  • Assuming same package means one node only
  • Thinking duplicate names cause silent errors
  • Believing launch files always cause syntax errors
4. You wrote this launch file snippet:
<launch>
  <node pkg="demo_pkg" type="demo_node" name="node1">
</launch>

What is the error and how to fix it?
medium
A. Missing closing tag for <node>, fix by adding </node>
B. Wrong attribute name 'type', fix by changing to 'exec'
C. Missing package name, fix by adding pkg attribute
D. Extra closing tag needed for <launch>, fix by adding </launch>

Solution

  1. Step 1: Check XML tag completeness and verify attributes

    The <node> tag is opened but not closed properly; it needs a closing </node> tag. Attributes pkg and type are correct; <launch> tag is closed properly.
  2. Final Answer:

    Missing closing tag for <node>, fix by adding </node> -> Option A
  3. Quick Check:

    Unclosed node tag = add </node> [OK]
Hint: Every opened tag must be closed properly [OK]
Common Mistakes:
  • Confusing 'type' with 'exec' attribute
  • Ignoring missing closing tags
  • Assuming launch tag is not closed
5. You want to launch three nodes from different packages in one launch file:
<launch>
  <node pkg="pkg1" type="node1" name="node1" />
  <node pkg="pkg2" type="node2" name="node2" />
  <node pkg="pkg3" type="node3" name="node3" />
</launch>

How can you modify this launch file to add a parameter use_sim_time set to true for all nodes?
hard
A. Add <param name="use_sim_time" value="true" /> inside each <node> tag
B. Add <param name="use_sim_time" value="true" /> directly inside <launch> tag
C. Add <arg name="use_sim_time" default="true" /> inside each <node> tag
D. Add <env name="use_sim_time" value="true" /> inside each <node> tag

Solution

  1. Step 1: Understand parameter scope in launch files and compare options

    Parameters placed directly inside <launch> apply globally to all nodes. Adding <param name="use_sim_time" value="true" /> directly inside <launch> sets it once for all; inside each <node> repeats unnecessarily; options B and C use wrong tags (<env>, <arg>).
  2. Final Answer:

    Add <param name="use_sim_time" value="true" /> directly inside <launch> tag -> Option B
  3. Quick Check:

    Global param inside <launch> = all nodes get it [OK]
Hint: Put common params inside <launch> for all nodes [OK]
Common Mistakes:
  • Adding param inside each node causing repetition
  • Using <arg> or <env> instead of <param>
  • Placing param outside launch tag
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard