2 个不稳定版本
0.2.0 | 2023 年 7 月 4 日 |
---|---|
0.1.0 | 2023 年 5 月 25 日 |
#68 in 机器人
77KB
1.5K SLoC
rosrust_dynamic_reconfigure
这目前还是一个非常多的 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
值
max
和 min
描述了所有 int
和 double
值的取值范围,而 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
值
bools
、ints
、strs
和 doubles
包含每种数据类型的扁平化值。
string name
{type} value
组
groups
包含类似于 ParamDescription
的层次信息。
string name
bool state
int32 id
int32 parent
state
控制了 collapse
和 hide
的状态。
依赖关系
~28–40MB
~847K SLoC