{"id":17874235,"url":"https://github.com/modprog/rosrust_dynamic_reconfigure","last_synced_at":"2026-01-19T08:32:17.750Z","repository":{"id":168608667,"uuid":"635898070","full_name":"ModProg/rosrust_dynamic_reconfigure","owner":"ModProg","description":null,"archived":false,"fork":false,"pushed_at":"2023-08-03T18:22:51.000Z","size":35,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-21T01:22:04.117Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ModProg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-03T17:34:41.000Z","updated_at":"2024-08-01T21:54:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"e18c935e-c716-4baf-8460-61516eeff30b","html_url":"https://github.com/ModProg/rosrust_dynamic_reconfigure","commit_stats":null,"previous_names":["modprog/rosrust_dynamic_reconfigure"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ModProg/rosrust_dynamic_reconfigure","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModProg%2Frosrust_dynamic_reconfigure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModProg%2Frosrust_dynamic_reconfigure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModProg%2Frosrust_dynamic_reconfigure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModProg%2Frosrust_dynamic_reconfigure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ModProg","download_url":"https://codeload.github.com/ModProg/rosrust_dynamic_reconfigure/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModProg%2Frosrust_dynamic_reconfigure/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28564011,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-28T11:08:08.486Z","updated_at":"2026-01-19T08:32:17.717Z","avatar_url":"https://github.com/ModProg.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rosrust_dynamic_reconfigure\n\n[![CI Status](https://github.com/ModProg/rosrust_dynamic_reconfigure/actions/workflows/test.yaml/badge.svg)](https://github.com/ModProg/rosrust_dynamic_reconfigure/actions/workflows/test.yaml)\n[![Crates.io](https://img.shields.io/crates/v/rosrust_dynamic_reconfigure)](https://crates.io/crates/rosrust_dynamic_reconfigure)\n[![Docs.rs](https://img.shields.io/crates/v/template?color=informational\u0026label=docs.rs)](https://docs.rs/rosrust_dynamic_reconfigure)\n[![Documentation for `main`](https://img.shields.io/badge/docs-main-informational)](https://modprog.github.io/rosrust_dynamic_reconfigure/rosrust_dynamic_reconfigure/)\n\nThis is currently very much WIP and more of an experiment how to best implement\nit in rust.\n\n## The `dynamic_reconfigure` API\n\nIn the process of developing this crate, I noticed that there wasn't any\nconclusive documentation on the API used by `dynamic_reconfigure`. This section\nis my attempt at providing that.\n\nThe `{namespace}` is the place where the config is \"hosted\" normally `~`.\n\nNames are expected to match the pattern `[a-zA-Z][a-zA-Z0-9_]*` and descriptions\ncan be any string not containing quotes, i.e. `\"` and `'`[^2]. Though quotes are\nprobably fine, this might just be a limitation of the original library.\n\n### Endpoints\nA Node implementing `dynamic_reconfigure` needs to provide[^3]:\n\n- A latched publisher providing the [`ConfigDescription`](#configdescription-message) at `{namespace}/parameter_descriptions`.\n- A latched publisher providing the [`Config`](#config-message) at `{namespace}/parameter_updates`.\n- A service with type [`Reconfigure`](#reconfigure-service) at `{namespace}/set_parameters`.\n\n### Properties\nAdditionally to the publishers/service `dynamic_reconfigure` reads on initialization and writes parameters at\n`{namespace}/{parameter_name}`.\n\n### Data Format\n\n#### `ConfigDescription` Message\n```\nGroup[] groups\nConfig max\nConfig min\nConfig dflt\n```\n\n##### Values\n`max` and `min` describe the ranges for all `int` and `double` values, while\n`dflt` contains the default value for all parameters (see [`Config`](#config-message)).\n\n##### Groups\n`groups` contains the hierarchical structure of the configuration, with the root\nof the configuration being the group with `id=0`, all other groups are\nsubgroups of the group whose `id` matches their `parent`.\n\n```\nstring name\nstring type\nParamDescription[] parameters\nint32 parent \nint32 id\n```\n\n`type` concerns how the group is displayed in e.g. `rqt_reconfigure`, which\ncurrently supports[^4]:\n- empty (`''`) Normal group\n- `collapse` Group is collapsible, collapse state is controlled by [`state`](#groups-1)\n- `tab` Shows the group as a tab\n- `hide` If [`state`](#groups-1) is false hides the group\n- `apply` Shows an `Apply` button and only submits input when clicked.\n\n##### ParamDescription\n`params` describes the parameters that belong to a group.\n\n```\nstring name\nstring type\nuint32 level\nstring description\nstring edit_method\n```\n\n`type` is the data type, either[^1]:\n- `str`\n- `bool`\n- `int`\n- `double`\n\n`level` provides a way to optimize partial updates, where the levels of all\nmodified properties are `|` binary-ored to create a bit mask.\n\nIf `edit_method` is non-empty, the field is an enum. The contents are then\nexpected to be the `repr()` (almost JSON) string of the required constants[^5]:\n(one way `repr()` differs from `JSON` is its use of single quotes for strings,\nthough in the decoding direction `\"` should be supported as well, meaning this\nis only an issue for parsing as long as no escapes are used.)\n```jsonc\n{\n    \"enum_description\": \"{description}\",\n    \"enum\": [ // for every variant\n        {\n            \"name\": \"{variant_name}\",\n            \"type\": \"{variant_type}\", // Not used by rqt_reconfigure (should be the same as the param)\n            \"value\": \"{variant_value}\",\n            \"description\": \"{variant_description}\"\n            // .. srcline + srcfile\n        }\n    ]\n}\n```\n\n#### `Config` Message\n```\nBoolParameter[] bools\nIntParameter[] ints\nStrParameter[] strs\nDoubleParameter[] doubles\nGroupState[] groups\n```\n\n##### Values\n`bools`, `ints`, `strs` and `doubles` hold the flattened values for each datatype.\n\n```\nstring name\n{type} value\n```\n\n##### Groups\n`groups` contain the hierarchical information similar to [`ParamDescription`](#groups).\n\n```\nstring name\nbool state\nint32 id\nint32 parent\n```\n\n`state` controls state of `collapse` and `hide`.\n\n[^1]: https://github.com/ros/dynamic_reconfigure/blob/2654f228adae0848c6e9b70fcf07f890ca6a2841/src/dynamic_reconfigure/parameter_generator.py#L56-L59\n[^2]: https://github.com/ros/dynamic_reconfigure/blob/2654f228adae0848c6e9b70fcf07f890ca6a2841/src/dynamic_reconfigure/parameter_generator.py#L64-L74\n[^3]: https://github.com/ros/dynamic_reconfigure/blob/2654f228adae0848c6e9b70fcf07f890ca6a2841/src/dynamic_reconfigure/server.py#L77-L83\n[^4]: https://github.com/ros-visualization/rqt_reconfigure/blob/988179e349329b5b29f19a891b37d3ac0620ebd2/src/rqt_reconfigure/param_groups.py#L52-L58\n[^5]: https://github.com/ros/dynamic_reconfigure/blob/2654f228adae0848c6e9b70fcf07f890ca6a2841/src/dynamic_reconfigure/parameter_generator.py#LL269C21-L269C73\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodprog%2Frosrust_dynamic_reconfigure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmodprog%2Frosrust_dynamic_reconfigure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodprog%2Frosrust_dynamic_reconfigure/lists"}