# 6. 参数 Parameter Parameter 提供 **跨节点键值配置**。对标 ROS 2 Parameter Server。 | 本文 §6 | 相关文档 | |---------|----------| | 全局参数 | [§0 指南](00_guide.md) · [§4 服务 Service](04_service.md) · [Framework §7](../05_Framework/07_commsgs_integration.md) | --- ## 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`: ```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(node); auto param_client = std::make_shared(node, "parameter"); // Server 侧写入 param_server->SetParameter(Parameter("int", 1)); Parameter parameter; param_server->GetParameter("int", ¶meter); AINFO << "int: " << parameter.AsInt64(); // Client 侧读写(跨节点时 client 用另一 Node) param_client->SetParameter(Parameter("string", "test")); param_client->GetParameter("string", ¶meter); AINFO << "string: " << parameter.AsString(); param_client->GetParameter("int", ¶meter); AINFO << "int: " << parameter.AsInt64(); return 0; } ``` 运行:`./autolink_example_paramserver`。 --- ## 6.3 GetParameter / SetParameter `Parameter` 包装标量值;`ParameterServer` 本地存储,`ParameterClient` 经 RPC 访问远端 Server。 **Parameter 包装值**: ```cpp Parameter("max_speed", 1.5); // double Parameter("frame_id", std::string("map")); Parameter("enabled", true); Parameter("int", 42); ``` **ParameterServer**(`parameter_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`: ```python 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()) ``` ```bash python3 py_parameter.py ``` --- ## 6.5 配置分工 | 机制 | 适用 | |------|------| | Lua / YAML 配置 | 启动时固定参数、模块装配 | | Parameter | 运行时在线调参、多节点共享 | | Component DAG `config` | 模块级 channel 名、间隔等 | Autonomy 模块参数管线见 [Framework §7](../05_Framework/07_commsgs_integration.md)。 --- **导航**:[← §5 动作 Action](05_action.md) · [§0 指南](00_guide.md) · [§7 插件 Plugin →](07_plugin.md)