📖 Scenario: You are building a simple ROS node that uses the ROS parameter server to store and retrieve configuration values for a robot's speed settings.
🎯 Goal: Create a ROS node that sets initial speed parameters on the parameter server, reads a threshold parameter, updates speed values based on that threshold, and finally retrieves and prints the updated parameters.
📋 What You'll Learn
Create parameters on the ROS parameter server with exact names and values
Read a parameter value from the parameter server
Use conditional logic to update parameters based on the threshold
Retrieve and print the final parameter values
💡 Why This Matters
🌍 Real World
Robots often use the ROS parameter server to store configuration values like speed limits, sensor thresholds, and calibration data. This project shows how to manage such parameters programmatically.
💼 Career
Understanding how to use the ROS parameter server is essential for robotics developers to create flexible and configurable robot software that can adapt to different environments and requirements.
Progress0 / 4 steps
1
Set initial speed parameters on the ROS parameter server
Write code to set two parameters on the ROS parameter server: /robot/max_speed with the value 1.5 and /robot/min_speed with the value 0.5.
ROS
Hint
Use rospy.set_param(param_name, value) to set parameters on the ROS parameter server.
2
Read the speed threshold parameter
Add code to read a parameter named /robot/speed_threshold from the parameter server and store it in a variable called speed_threshold. Use a default value of 1.0 if the parameter does not exist.
ROS
Hint
Use rospy.get_param(param_name, default_value) to read a parameter with a fallback default.
3
Update max_speed if it exceeds the threshold
Write code that gets the current /robot/max_speed parameter, compares it to speed_threshold, and if max_speed is greater than speed_threshold, update /robot/max_speed to be equal to speed_threshold.
ROS
Hint
Use rospy.get_param to read the current max speed, then an if statement to compare and update with rospy.set_param.
4
Retrieve and print the updated speed parameters
Add code to retrieve the updated /robot/max_speed and /robot/min_speed parameters and print them using rospy.loginfo with the exact messages: "Max speed: {value}" and "Min speed: {value}".
ROS
Hint
Use rospy.get_param to get the updated values and rospy.loginfo to print messages.
Practice
(1/5)
1. What is the main purpose of the ROS parameter server?
easy
A. To compile ROS packages
B. To store and share configuration settings between ROS nodes
C. To execute robot movement commands
D. To visualize sensor data in real-time
Solution
Step 1: Understand the role of the parameter server
The ROS parameter server is designed to hold parameters that nodes can access and share, such as configuration values.
Step 2: Compare options with this role
Options A, B, and D describe other ROS functionalities unrelated to parameter storage.
Final Answer:
To store and share configuration settings between ROS nodes -> Option B
Quick Check:
Parameter server = shared settings [OK]
Hint: Parameter server holds shared settings, not commands or data [OK]
Common Mistakes:
Confusing parameter server with command execution
Thinking it compiles code
Mixing it up with visualization tools
2. Which of the following is the correct command to set a parameter named robot_speed to 1.5 using rosparam?
easy
A. rosparam set robot_speed 1.5
B. rosparam get robot_speed 1.5
C. rosparam delete robot_speed 1.5
D. rosparam list robot_speed 1.5
Solution
Step 1: Identify the command to set a parameter
The rosparam set command is used to assign a value to a parameter on the parameter server.
Step 2: Verify the syntax
The syntax is rosparam set <param_name> <value>, so rosparam set robot_speed 1.5 is correct.
Final Answer:
rosparam set robot_speed 1.5 -> Option A
Quick Check:
Set parameter = rosparam set [OK]
Hint: Use 'rosparam set' to assign values to parameters [OK]
Common Mistakes:
Using 'get' instead of 'set' to assign values
Trying to delete or list with value arguments
Incorrect command syntax
3. Given the following Python ROS node code snippet, what will be printed if the parameter max_speed is not set on the parameter server?
Step 1: Understand the use of rospy.get_param with default
The function rospy.get_param('max_speed', 2.0) tries to get the parameter 'max_speed'. If it does not exist, it returns the default value 2.0.
Step 2: Apply this to the scenario
Since 'max_speed' is not set, the default 2.0 will be assigned and printed.
Final Answer:
It will print 2.0 -> Option C
Quick Check:
Missing param returns default = 2.0 [OK]
Hint: get_param returns default if param missing [OK]
Common Mistakes:
Expecting an error if parameter missing
Assuming None is returned by default
Confusing default value usage
4. You wrote this code to get a parameter but it crashes with a KeyError. What is the problem?
import rospy
rospy.init_node('node')
value = rospy.get_param('unknown_param')
print(value)
medium
A. The parameter 'unknown_param' does not exist and no default was provided
B. The node was not initialized before getting the parameter
C. The print statement is incorrect syntax
D. The parameter server is not running
Solution
Step 1: Analyze the get_param call without default
Calling rospy.get_param('unknown_param') without a default raises a KeyError if the parameter does not exist.
Step 2: Confirm the cause of the crash
Since 'unknown_param' is missing and no default is given, the code crashes with KeyError.
Final Answer:
The parameter 'unknown_param' does not exist and no default was provided -> Option A
Quick Check:
Missing param + no default = KeyError [OK]
Hint: Always provide default or check param exists to avoid KeyError [OK]
Common Mistakes:
Assuming node init causes KeyError
Thinking print syntax is wrong
Ignoring parameter server status
5. You want to set multiple parameters at once for a robot configuration using a YAML file named config.yaml. Which command correctly loads all parameters from this file onto the ROS parameter server under the namespace /robot?
hard
A. rosparam set config.yaml /robot
B. rosparam delete config.yaml /robot
C. rosparam get config.yaml /robot
D. rosparam load config.yaml /robot
Solution
Step 1: Identify the command to load parameters from a file
The rosparam load command loads parameters from a YAML file onto the parameter server.
Step 2: Confirm the correct syntax for namespace
Using rosparam load config.yaml /robot loads all parameters under the /robot namespace.
Final Answer:
rosparam load config.yaml /robot -> Option D
Quick Check:
Load YAML file with rosparam load [OK]
Hint: Use 'rosparam load' to import YAML parameters [OK]
Common Mistakes:
Using 'set' instead of 'load' for files
Trying to 'get' or 'delete' files
Omitting namespace or using wrong syntax
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.