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
strboolintdouble
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