6. 参数 Parameter

Parameter 提供 跨节点键值配置。对标 ROS 2 Parameter Server。

本文 §6

相关文档

全局参数

§0 指南 · §4 服务 Service · Framework §7


6.1 调用流程

Parameter 通过 Service RPC 在 Client 与 Server 之间读写键值;Client 构造时传入目标 Server 的 node 名(非自身 node 名)。

配置 ParameterClient → ParameterServer Client 构造时传入 目标 Server 的 node 名,非自己的 node 名
Client ParameterClient SetParameter · GetParameter · ListParameters
Server ParameterServer 键值存储,绑定 Node 名
要点说明
Server 绑定每个 ParameterServer 对应一个 Node 名(如 "parameter"
典型部署进程内通常一个全局 Server;多 Server 须不同 node 名

6.2 C++ 示例

autolink/examples/cpp/paramserver.cpp

#include "autolink/parameter/parameter_client.hpp"
#include "autolink/parameter/parameter_server.hpp"

using autolink::Parameter;
using autolink::ParameterClient;
using autolink::ParameterServer;

int main(int argc, char** argv) {
    autolink::Init(argv[0]);
    auto node = autolink::CreateNode("parameter", "/examples");

    auto param_server = std::make_shared<ParameterServer>(node);
    auto param_client = std::make_shared<ParameterClient>(node, "parameter");

    // Server 侧写入
    param_server->SetParameter(Parameter("int", 1));
    Parameter parameter;
    param_server->GetParameter("int", &parameter);
    AINFO << "int: " << parameter.AsInt64();

    // Client 侧读写(跨节点时 client 用另一 Node)
    param_client->SetParameter(Parameter("string", "test"));
    param_client->GetParameter("string", &parameter);
    AINFO << "string: " << parameter.AsString();
    param_client->GetParameter("int", &parameter);
    AINFO << "int: " << parameter.AsInt64();
    return 0;
}

运行:./autolink_example_paramserver


6.3 GetParameter / SetParameter

Parameter 包装标量值;ParameterServer 本地存储,ParameterClient 经 RPC 访问远端 Server。

Parameter 包装值

Parameter("max_speed", 1.5);           // double
Parameter("frame_id", std::string("map"));
Parameter("enabled", true);
Parameter("int", 42);

ParameterServerparameter_server.hpp):

方法

说明

SetParameter(p)

设置或覆盖

GetParameter(name, &out)

按名读取;不存在返回 false

ListParameters(&vec)

枚举全部

ParameterClient

方法

说明

SetParameter(p)

向远端 Server 写入

GetParameter(name, &out)

从远端读取

ListParameters(&vec)

列举远端参数

读取辅助AsInt64()AsDouble()AsString()AsBool()


6.4 Python API

py_parameter.py

from autolink_py3 import parameter

PARAM_SERVICE_NAME = "global_parameter_service"

test_node = autolink.Node(PARAM_SERVICE_NAME)
srv = parameter.ParameterServer(test_node)

clt = parameter.ParameterClient(test_node, PARAM_SERVICE_NAME)
clt.set_parameter(parameter.Parameter("author_name", "WanderingEarth"))
clt.set_parameter(parameter.Parameter("author_age", 5000))
clt.set_parameter(parameter.Parameter("author_score", 888.88))

param_list = clt.get_paramslist()
for p in param_list:
    print(p.debug_string())
python3 py_parameter.py

6.5 配置分工

机制

适用

Lua / YAML 配置

启动时固定参数、模块装配

Parameter

运行时在线调参、多节点共享

Component DAG config

模块级 channel 名、间隔等

Autonomy 模块参数管线见 Framework §7


导航← §5 动作 Action · §0 指南 · §7 插件 Plugin →