Configure and tune ROS 2 node parameters using YAML files and ros2 param commands. Use when asked to configure parameters, create parameter files, update parameters at runtime, validate parameter syntax, manage parameter namespaces, tune node behavior, or troubleshoot parameter loading issues. Supports static configuration files and dynamic parameter updates.
Configure and dynamically tune ROS 2 node parameters using YAML configuration files and runtime parameter commands.
ros2 param command available| Type | Example Value | Python Type | YAML Syntax |
|---|
| bool | true, false | bool | param: true |
| int | 42, -10 | int | param: 42 |
| double | 3.14, -2.5 | float | param: 3.14 |
| string | "hello" | str | param: "hello" |
| int_array | [1, 2, 3] | List[int] | param: [1, 2, 3] |
| double_array | [1.0, 2.5] | List[float] | param: [1.0, 2.5] |
| string_array | ["a", "b"] | List[str] | param: ["a", "b"] |
Create a parameter configuration file for node initialization.
Create config directory in package:
mkdir -p <workspace_root>/packages/runtime/<package_name>/config
Create parameter file (e.g., config/robot_params.yaml):
# Node name with double wildcard for namespace flexibility
/**:
ros__parameters:
# Robot identification
robot_name: "Dr.QP"
robot_id: 1
# Control parameters
control_frequency: 50.0
max_velocity: 1.5
max_acceleration: 0.5
# Safety limits
enable_safety: true
emergency_stop_enabled: true
# Communication settings
serial_port: "/dev/ttyUSB0"
baudrate: 115200
timeout_ms: 1000
# Arrays
joint_names: ["joint1", "joint2", "joint3", "joint4"]
position_limits: [0.0, 180.0, 0.0, 180.0]
Install config directory in CMakeLists.txt:
install(DIRECTORY config
DESTINATION share/${PROJECT_NAME}
)
Rebuild package:
colcon build --packages-select <package_name> --symlink-install
Load parameters in launch file:
import os
from ament_index_python.packages import get_package_share_directory
params_file = os.path.join(
get_package_share_directory('<package_name>'),
'config',
'robot_params.yaml'
)
node = Node(
package='<package_name>',
executable='<node_name>',
parameters=[params_file]
)
When to use: Initial node configuration, environment-specific settings
Inspect current parameter values of running nodes.
List all running nodes:
ros2 node list
List all parameters for a specific node:
ros2 param list /<node_name>
Get value of a specific parameter:
ros2 param get /<node_name> <parameter_name>
Get all parameters in YAML format:
ros2 param dump /<node_name>
Save parameters to file:
ros2 param dump /<node_name> --output-dir ./config/
When to use: Inspecting runtime configuration, debugging parameter issues
Change node parameters dynamically without restarting.
Set a single parameter:
ros2 param set /<node_name> <parameter_name> <value>
Examples:
ros2 param set /controller max_velocity 2.0
ros2 param set /serial_driver baudrate 115200
ros2 param set /robot enable_safety true
Verify parameter was updated:
ros2 param get /<node_name> <parameter_name>
Load multiple parameters from file:
ros2 param load /<node_name> <params_file>.yaml
Monitor parameter changes in real-time (if node publishes them):
ros2 topic echo /parameter_events
Important: Not all parameters support runtime updates. Some nodes require restart for changes to take effect.
When to use: Tuning control parameters, testing different configurations
Organize parameters using namespaces for multi-robot systems.
Create namespaced parameter file (config/robot1_params.yaml):
/robot1/**:
ros__parameters:
robot_name: "robot1"
max_velocity: 1.5
/robot2/**:
ros__parameters:
robot_name: "robot2"
max_velocity: 2.0
Launch nodes with namespaces:
robot1_node = Node(
package='<package>',
executable='<node>',
name='controller',
namespace='robot1',
parameters=[params_file]
)
robot2_node = Node(
package='<package>',
executable='<node>',
name='controller',
namespace='robot2',
parameters=[params_file]
)
Access namespaced parameters:
ros2 param get /robot1/controller max_velocity
ros2 param get /robot2/controller max_velocity
Update namespaced parameters:
ros2 param set /robot1/controller max_velocity 1.8
When to use: Multi-robot systems, component reuse with different configs
Check parameter files for syntax errors before using them.
Attempt to parse YAML file with Python:
python3 -c "import yaml; yaml.safe_load(open('config/params.yaml'))"
Check for common YAML errors:
[item1, item2] or multi-linetrue/false (lowercase)Test parameter file by loading into a running node:
ros2 param load /<node_name> config/params.yaml
Check for parameter type mismatches in node logs:
ros2 run <package> <executable> --ros-args --log-level debug
When to use: Before committing parameter files, debugging load issues
Define parameters in your ROS 2 node implementation.
C++ Example:
class MyNode : public rclcpp::Node
{