#ros #rosrust #namespaces #dynamic-reconfigure

rosrust_dynamic_reconfigure

为 rosrust 实现的 dynamic_reconfigure

2 个不稳定版本

0.2.0 2023 年 7 月 4 日
0.1.0 2023 年 5 月 25 日

#68 in 机器人

MIT/Apache

77KB
1.5K SLoC

rosrust_dynamic_reconfigure

CI Status Crates.io Docs.rs Documentation for main

这目前还是一个非常多的 WIP,更多的是一个实验,看看如何在 Rust 中最好地实现它。

动态重配置 API

在开发这个 crate 的过程中,我发现关于 dynamic_reconfigure 所使用的 API 并没有任何结论性的文档。本节是我尝试提供这一内容的尝试。

{namespace} 是配置通常“托管”的地方,通常是 ~

名称应匹配以下模式 [a-zA-Z][a-zA-Z0-9_]*,描述可以是任何不包含引号的字符串,例如 "'^2。尽管引号可能没问题,但这可能只是原始库的限制。

端点

实现 dynamic_reconfigure 的节点需要提供^3

  • 一个提供 ConfigDescription 的闩锁发布者,在 {namespace}/parameter_descriptions
  • 一个锁存发布者,提供在 Config 中定义的 Config,位置为 {namespace}/parameter_updates
  • 一个类型为 Reconfigure 的服务,位置为 {namespace}/set_parameters

属性

除了在初始化时读取 dynamic_reconfigure 发布者/服务的属性,并在 {namespace}/{parameter_name} 处写入参数外。

数据格式

ConfigDescription 消息

Group[] groups
Config max
Config min
Config dflt

maxmin 描述了所有 intdouble 值的取值范围,而 dflt 包含所有参数的默认值(见 Config)。

groups 包含配置的层次结构,配置的根是具有 id=0 的组,所有其他组都是具有相同 id 的组的子组。

string name
string type
ParamDescription[] parameters
int32 parent 
int32 id

type 涉及组在例如 rqt_reconfigure 中的显示方式,目前它支持^4

  • 空('')普通组
  • collapse 组可以折叠,折叠状态由 state 控制
  • tab 以标签形式显示组
  • hide 如果 state 为假,则隐藏组
  • apply 显示一个 Apply 按钮,并且只有在点击时才提交输入。
ParamDescription

params 描述属于组的参数。

string name
string type
uint32 level
string description
string edit_method

type 是数据类型,例如^1

  • str
  • bool
  • int
  • double

level 提供了优化部分更新的方法,其中所有修改属性的级别通过 | 二进制-按位或组合成一个位掩码。

如果 edit_method 非空,字段是一个枚举。内容期望是(几乎 JSON 格式的)字符串,其表示与 JSON 不同之处在于字符串使用单引号,但在解码方向上,应支持双引号,这意味着只要不使用转义字符,就不会有问题。

{
    "enum_description": "{description}",
    "enum": [ // for every variant
        {
            "name": "{variant_name}",
            "type": "{variant_type}", // Not used by rqt_reconfigure (should be the same as the param)
            "value": "{variant_value}",
            "description": "{variant_description}"
            // .. srcline + srcfile
        }
    ]
}

Config 信息

BoolParameter[] bools
IntParameter[] ints
StrParameter[] strs
DoubleParameter[] doubles
GroupState[] groups

boolsintsstrsdoubles 包含每种数据类型的扁平化值。

string name
{type} value

groups 包含类似于 ParamDescription 的层次信息。

string name
bool state
int32 id
int32 parent

state 控制了 collapsehide 的状态。

依赖关系

~28–40MB
~847K SLoC