Bird
Raised Fist0
ROSframework~30 mins

ROS 1 vs ROS 2 overview - Hands-On Comparison

Choose your learning style10 modes available
ROS 1 vs ROS 2 Overview
📖 Scenario: You are learning about Robot Operating System (ROS) versions to understand their differences and improvements. This knowledge helps you decide which ROS version to use for your robotics projects.
🎯 Goal: Create a simple ROS package structure that lists key features of ROS 1 and ROS 2, then add a configuration variable to select the ROS version, implement logic to display the selected version's features, and finally complete the package with a launch file to run the node.
📋 What You'll Learn
Create a dictionary with exact keys and values for ROS 1 and ROS 2 features
Add a variable to select the ROS version
Use a function to print features of the selected ROS version
Add a launch file to run the node
💡 Why This Matters
🌍 Real World
Understanding the differences between ROS 1 and ROS 2 helps robotics developers choose the right tools for their projects and migrate code safely.
💼 Career
Robotics engineers and developers often need to work with both ROS versions and explain their differences to teams or clients.
Progress0 / 4 steps
1
Create ROS features dictionary
Create a dictionary called ros_features with two keys: 'ROS 1' and 'ROS 2'. Assign to each key a list of strings describing these exact features:

ROS 1: 'Single master architecture', 'No real-time support', 'Limited security'
ROS 2: 'Distributed architecture', 'Real-time support', 'Improved security'
ROS
Hint

Use a Python dictionary with keys 'ROS 1' and 'ROS 2'. Each key should have a list of three feature strings.

2
Add ROS version selection variable
Add a variable called selected_ros_version and set it to the string 'ROS 2' to select the ROS version to display.
ROS
Hint

Set the variable selected_ros_version exactly to the string 'ROS 2'.

3
Implement function to display features
Define a function called display_features that takes no arguments. Inside, use the variable selected_ros_version to get the list of features from ros_features. Then use a for loop with variables feature to iterate over the features list and print each feature.
ROS
Hint

Use features = ros_features[selected_ros_version] and a for feature in features: loop to print each feature.

4
Add ROS launch file
Add a ROS launch file named ros_features.launch.py that imports launch and launch_ros.actions.Node. Define a function generate_launch_description that returns a launch.LaunchDescription with a single Node running the package ros_features_pkg, executable feature_display_node, and name feature_display.
ROS
Hint

Use the ROS 2 Python launch API to create a launch description with one node.

Practice

(1/5)
1. Which statement best describes the main difference between ROS 1 and ROS 2?
easy
A. ROS 1 is older and simpler, while ROS 2 supports real-time and better scalability.
B. ROS 1 supports real-time better than ROS 2.
C. ROS 2 is older and less flexible than ROS 1.
D. ROS 1 and ROS 2 have the same features and design.

Solution

  1. Step 1: Understand ROS 1 characteristics

    ROS 1 is the original version, simpler but limited in real-time and scalability.
  2. Step 2: Understand ROS 2 improvements

    ROS 2 was designed to fix these limits, adding real-time support and better scalability.
  3. Final Answer:

    ROS 1 is older and simpler, while ROS 2 supports real-time and better scalability. -> Option A
  4. Quick Check:

    ROS 1 simpler, ROS 2 modern and scalable = A [OK]
Hint: Remember ROS 2 is the newer, more advanced version [OK]
Common Mistakes:
  • Thinking ROS 2 is older than ROS 1
  • Believing ROS 1 has better real-time support
  • Assuming both versions have identical features
2. Which of the following is a correct way to describe ROS 2's communication middleware?
easy
A. ROS 2 does not support middleware communication.
B. ROS 2 uses DDS (Data Distribution Service) for flexible communication.
C. ROS 2 uses TCP only for all communication.
D. ROS 2 uses HTTP protocol for message passing.

Solution

  1. Step 1: Identify ROS 2 communication method

    ROS 2 uses DDS, a middleware standard, for flexible and scalable communication.
  2. Step 2: Check other options

    TCP only or HTTP are not used as the main middleware in ROS 2.
  3. Final Answer:

    ROS 2 uses DDS (Data Distribution Service) for flexible communication. -> Option B
  4. Quick Check:

    ROS 2 middleware = DDS [OK]
Hint: DDS is the key middleware in ROS 2 communication [OK]
Common Mistakes:
  • Confusing TCP with DDS
  • Thinking ROS 2 lacks middleware
  • Assuming HTTP is used for ROS 2 messages
3. Consider this code snippet in ROS 1 and ROS 2:
node = Node('example_node')
node.create_publisher(String, 'topic', 10)

What is a key difference in how this code behaves in ROS 1 vs ROS 2?
medium
A. ROS 2 does not support publishers.
B. ROS 1 uses create_publisher with QoS settings; ROS 2 ignores QoS.
C. Both ROS 1 and ROS 2 use create_publisher identically.
D. ROS 1 does not support create_publisher method; ROS 2 does.

Solution

  1. Step 1: Check ROS 1 publisher creation

    ROS 1 uses rospy.Publisher or roscpp::Publisher, not create_publisher.
  2. Step 2: Check ROS 2 publisher creation

    ROS 2 uses create_publisher with QoS settings for flexible communication.
  3. Final Answer:

    ROS 1 does not support create_publisher method; ROS 2 does. -> Option D
  4. Quick Check:

    ROS 2 uses create_publisher, ROS 1 does not [OK]
Hint: Remember ROS 2 introduced create_publisher method [OK]
Common Mistakes:
  • Assuming ROS 1 has create_publisher method
  • Thinking QoS is ignored in ROS 2
  • Believing ROS 2 lacks publisher support
4. You try to run a ROS 2 node but get an error about missing rclcpp::init. What is the likely cause?
medium
A. The error means your topic name is invalid.
B. ROS 1 nodes require rclcpp::init but ROS 2 does not.
C. You forgot to initialize the ROS 2 client library before creating nodes.
D. You used ROS 1 syntax in a ROS 2 project.

Solution

  1. Step 1: Understand ROS 2 initialization

    ROS 2 requires calling rclcpp::init before creating nodes to set up communication.
  2. Step 2: Check error cause

    Missing rclcpp::init causes runtime errors when nodes try to start.
  3. Final Answer:

    You forgot to initialize the ROS 2 client library before creating nodes. -> Option C
  4. Quick Check:

    Missing rclcpp::init means no ROS 2 initialization [OK]
Hint: Always call rclcpp::init before node creation in ROS 2 [OK]
Common Mistakes:
  • Confusing ROS 1 and ROS 2 initialization steps
  • Assuming topic name causes this error
  • Ignoring the need for client library init
5. You want to build a robot system that requires real-time control and works on multiple platforms including Windows and Linux. Which ROS version should you choose and why?
hard
A. Choose ROS 2 because it supports real-time control and multi-platform compatibility.
B. Choose ROS 1 because it is simpler and supports all platforms equally.
C. Choose ROS 1 because ROS 2 does not support Windows.
D. Choose ROS 2 but only if you use Linux, not Windows.

Solution

  1. Step 1: Identify real-time and platform needs

    The project needs real-time control and multi-platform support including Windows and Linux.
  2. Step 2: Match requirements to ROS versions

    ROS 2 supports real-time features and runs on Windows and Linux, unlike ROS 1 which is limited.
  3. Final Answer:

    Choose ROS 2 because it supports real-time control and multi-platform compatibility. -> Option A
  4. Quick Check:

    Real-time + multi-platform = ROS 2 [OK]
Hint: ROS 2 is designed for real-time and multi-platform use [OK]
Common Mistakes:
  • Assuming ROS 1 supports Windows well
  • Thinking ROS 2 lacks real-time features
  • Believing ROS 2 only works on Linux
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