Repository Summary

Description ROS2 parameter server which caches parameter into the storage if necessary and reload it during initialization.
Checkout URI https://github.com/fujitatomoya/ros2_persist_parameter_server.git
VCS Type git
VCS Version rolling
Last Updated 2025-06-07
Dev Status UNKNOWN
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

humble jazzy kilted rolling humble-nightly jazzy-nightly kilted-nightly rolling-nightly

ROS2 Persistent Parameter Server

ROS 2 Persistent Parameter Server, that resides in the ROS 2 system to serve the parameter daemon. The other nodes(e.g the client demo provided in the code) can write/read the parameter in Parameter Server, and Parameter Server is able to store the parameter into the persistent storage which user can specify such as tmpfs, nfs, or disk.

See overview slide deck for general information.

Background

The discussion is opened here, and centralized parameter server is not a good affinity to ROS 2 distributed system architecture. One of the most valuable things about ROS APIs is that we make sure that the messages have specific semantic meaning so that they can’t be misinterpreted. As we develop the ROS 2 tools and best practices we should make sure to bring that same level of rigor to parameters too for greater reusability and correctness.

Although, it is expected to be the following requirement.

  • Global configuration that many nodes share (e.g. RTOS priorities, vehicle dimensions, …)
  • Generic ROS 2 system property server.
  • Persistent storage support to re-initialize the system. parameters are modified in runtime and cache it into persistent volume as well. and next boot or next re-spawn, modified parameter will be loaded at initialization. (parameter lifetime is dependent on use case, sometimes system lifetime, sometimes node lifetime.)
  • Using ROS1 based application with Parameter Server.

Overview

overview_architecture

Generally ROS 2 Parameter Server is simple blackboard to write/read parameters on that. The other nodes can write/read the parameter on the server to share them in the ROS 2 system. there is a new concept for “Persistent Parameter” which is described later.

ROS 2 Parameter Server is constructed on ROS parameter API’s, nothing specific API’s are provided to connect to the server from the client. Also, about the security it just relies on ROS 2 security aspect.

Persistent Parameter Registration

Persistent Prefix

persistent parameter must have prefix “persistent”

Scope Overview

parameter server has the following scope for persistent parameter. since parameter server is built on top of ROS 2 Parameter API, parameter server supports “persistent” parameter based on /parameter_events topic.

Category Supported Description
Parameter API YES ROS 2 Parameter Client API supported, since this activity can be detected via /parameter_events.
Persistent Parameter File YES parameter server dedicated argument to specify the file to load as parameters. in addition, all of the persistent parameters will be stored into this file during shutdown.
e.g) –file-path /tmp/parameter_server.yaml
Parameter Arguments NO e.g) –ros-args -p persistent.some_int:=42
some_int cannot be registered as persistent parameter, since this cannot be notified via /parameter_events to parameter server.
Parameter File Arguments NO e.g) –ros-args –params-file ./parameters_via_cli.yaml
same with parameter arguments, cannot be registered as persistent parameter, since these cannot be notified via /parameter_events to parameter server.
Launch Parameter NO e.g) ros2 launch parameter_server parameter_server.launch.py
same with parameter arguments, cannot be registered as persistent parameter, since these cannot be notified via /parameter_events to parameter server.

Configurable Options

  • Node Name Since ROS 2 parameter is owned by node, node name will be needed to access the parameters, this is designed to clarify semantics for the parameters and owners. Node name will be “parameter_server” if node name is not specifies. so the other nodes can use “parameter_server” as well to access in the same system Parameter Server. If there must exist multiple parameter servers, these parameter servers need to specify a different node name, such as “parameter_server_[special_string]”, please notice that ROS 2 node name can only contains alphanumerics and ‘_’.
  • Persistent Volume Definition of “Persistent” is different from user and use cases, so it should be configurable to set the path to store the persistent –file-path FILE_PATH parameter. Expecting if the parameter’s lifespan is system boot, path would be “/tmp” because user wants a fresh start via reboot. Or maybe physical persistent volume is chosen if users want to keep the parameter into the hardware storage. At the initialization time, Parameter Server will load the parameters from the storage which is specified by user.
  • Node Options there are two important options, allow_undeclared_parameters: (default true) automatically_declare_parameters_from_overrides: (default true)

all of the configuration options will be passed via arguments as following.

File truncated at 100 lines [see the full file](https://github.com/fujitatomoya/ros2_persist_parameter_server/tree/rolling/README.md)
Options CLI Description
Node Name --ros-args --remap __node:=NODENAME in default, "parameter_server" will be used.
Help

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

Contributors must sign-off each commit by adding a Signed-off-by: ... line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the Developer Certificate of Origin (DCO).

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~ Contributors must sign-off each commit by adding a `Signed-off-by: ...` line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the [Developer Certificate of Origin (DCO)](https://developercertificate.org/).