📖 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:
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
Step 1: Understand ROS 1 characteristics
ROS 1 is the original version, simpler but limited in real-time and scalability.
Step 2: Understand ROS 2 improvements
ROS 2 was designed to fix these limits, adding real-time support and better scalability.
Final Answer:
ROS 1 is older and simpler, while ROS 2 supports real-time and better scalability. -> Option A
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
Step 1: Identify ROS 2 communication method
ROS 2 uses DDS, a middleware standard, for flexible and scalable communication.
Step 2: Check other options
TCP only or HTTP are not used as the main middleware in ROS 2.
Final Answer:
ROS 2 uses DDS (Data Distribution Service) for flexible communication. -> Option B
Quick Check:
ROS 2 middleware = DDS [OK]
Hint: DDS is the key middleware in ROS 2 communication [OK]
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
Step 1: Understand ROS 2 initialization
ROS 2 requires calling rclcpp::init before creating nodes to set up communication.
Step 2: Check error cause
Missing rclcpp::init causes runtime errors when nodes try to start.
Final Answer:
You forgot to initialize the ROS 2 client library before creating nodes. -> Option C
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
Step 1: Identify real-time and platform needs
The project needs real-time control and multi-platform support including Windows and Linux.
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.
Final Answer:
Choose ROS 2 because it supports real-time control and multi-platform compatibility. -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.