Understanding ROS Parameter Server: Communication Model and Implementation

The ROS Parameter Server serves as a shared data repository for nodes in a ROS system, enabling data exchange between different components. It stores configuraton parameters and global settings that multiple nodes can access and modify.

Parameter Server Communication Model

The parameter server follows a simple client-server model with three roles:

  1. Master: Maintains the parameter database
  2. Clients: Nodes that either set or get parameters

Communication occurs through RPC calls:

  1. Setting Parameters:

    • Client sends parameter name/value pairs to the Master via RPC
    • Master stores the parameters in its database
  2. Getting Parameters:

    • Client requests a parameter by name via RPC
    • Master responds with the parameter value if it exists

The server supports various data types including integers, booleans, strings, doubles, lists, and binary data.

Parameter Operations in C++

ROS provides two approaches for parameter operations in C++:

1. Using NodeHandle

ros::NodeHandle nh;
// Setting parameters
nh.setParam("robot_name", "explorer");
nh.setParam("max_speed", 2.5);

// Getting parameters
std::string name;
double speed;
nh.getParam("robot_name", name);
nh.getParam("max_speed", speed);

2. Using ros::param Namespace

// Setting parameters
ros::param::set("robot_name", "explorer");
ros::param::set("max_speed", 2.5);

// Getting parameters
std::string name = ros::param::param<std::string>("robot_name", "default");
double speed = ros::param::param<double>("max_speed", 1.0);

Parameter Operations in Python

Python provides a unified API for parameter operations:

import rospy

# Setting parameters
rospy.set_param('robot_name', 'explorer')
rospy.set_param('max_speed', 2.5)

# Getting parameters
name = rospy.get_param('robot_name', 'default')
speed = rospy.get_param('max_speed', 1.0)

Additional Parameter Operations

  1. Checking Parameter Existence:
if (nh.hasParam("robot_name")) {
    // Parameter exists
}
  1. Deleting Parameters:
rospy.delete_param('max_speed')
  1. Listing All Parameters:
std::vector<std::string> param_names;
nh.getParamNames(param_names);

Tags: ROS Parameter Server Robotics C++ python

Posted on Sat, 17 Oct 2026 16:05:06 +0000 by pranav_kavi