Cyber-参数服务
/* 参数服务 存储多节点的共享数据,类似于全局变量 用于通用数据(车辆型号、尺寸、最大速度、最小速度等)模块之间的共享 参数服务器包含客户端和服务端,服务端节点存储数据,客户端节点可以访问数据 需求: 创建两个节点A和B,节点A作为参数服务端,节点B作为参数客户端,在节点A存储数据(车辆参数), 节点B操作数据 流程: 创建参数服务器服务端 创建参数服务器客户端 编译并执行 CyberRT中通过apollo::cyber::Parameter封装参数 支持类型 Patameter type INT DOUBLE BOOL STRING PROTOBUF NOT_SET C++ type int64_t double bool string string - protobuf type int64 double bool string string - */ ///////////////////////////服务端cpp///////////////////////////////////////// /* demo_cc目录下新建C++文件demo05_param_server.cc 需求: 服务端设置参数,客户端操作参数 实现: 1.包含头文件 2.初始化cyber框架 3.创建节点 4.创建参数服务器 5.设置参数 6.等待关闭 */
#include "cyber/cyber.h" #include "cyber/parameter/parameter_server.h" using apollo::cyber::ParameterServer; using apollo::cyber::Parameter; int main(int argc, char* argv[]) { apollo::cyber::Init(argv[0]); AINFO << "Init success"; // 创建节点 // 使用auto默认情况下返回的是unique_ptr // 在参数服务器中要使用shared_ptr,具体原因待定 std::shared_ptr<apollo::cyber::Node> param_server_node = apollo::cyber::CreateNode("param_server_node"); // 创建参数服务端 // 没有显示指定话题名称,底层通过服务通信实现,封装了话题名称 = 节点名称 // 所以在客户端指定话题名称时,令其 = 服务端节点名称 即可 auto param_server = std::make_shared<ParameterServer>(param_server_node); // 设置参数,key-value形式 // 修改也直接用setParameter即可 param_server->SetParameter(Parameter("type", "apollo")); param_server->SetParameter(Parameter("speed", 30.0)); param_server->SetParameter(Parameter("size", 10)); // 获取指定参数 Parameter temp; param_server->GetParameter("type", &temp); AINFO << "type: " << temp.AsString(); param_server->GetParameter("speed", &temp); AINFO << "speed: " << temp.AsDouble(); param_server->GetParameter("size", &temp); AINFO << "size: " << temp.AsInt64(); // 获取所有参数 std::vector<Parameter> params; param_server->ListParameters(¶ms); for(auto &¶m : params) { AINFO << "name = " << param.Name() << ", typename = " << param.TypeName() << ", value = " << param.DebugString(); // DebugString()会输出当前元素的key and value } apollo::cyber::WaitForShutdown(); return 0; }
////////////////////////////////////////////////////////////////////////// ///////////////////////////服务端BUILD/////////////////////////////////// cc_binary( name = "demo05_param_server_cc", srcs = ["demo05_param_server.cc"], deps = [ "//cyber", "//cyber/parameter" ] ) ///////////////////////////////////////////////////////////////////////// // bezal build cyber/demo_cc/... // ./cyber-bin/cyber/demo_cc/demo05_param_server /////////////////////////////////客户端cpp/////////////////////////////// /* 在demo_cc目录下新建c++文件demo06_param_client.cc 需求: 服务端设置参数,客户端操作参数 实现: 1.包含头文件 2.初始化cyber狂减 3.创建节点 4.创建客户端 5.操作参数 6.等待关闭 */ #include "cyber/cyber.h" #include "cyber/parameter/parameter_client.h" using apollo::cyber::Parameter; using apollo::cyber::ParameterClient; int main(int argc, char* argv[]) { apollo::cyber::Init(argv[0]); AINFO << "初始化..."; // 创建节点 std::shared_ptr<apollo::cyber::Node> client_node = apollo::cyber::CreateNode("client_node"); // 创建客户端 auto client = std::make_shared<ParameterClient>(client_node, "param"); // 话题名称 = 服务端节点名称 // 操作参数 Parameter temp; client->GetParameter("type", &temp); AINFO << "type: " << temp->AsString(); client->GetParameter("height", &temp); AINFO << "height: " << temp->AsDouble(); client->GetParameter("laser", &temp); AINFO << "laser: " << temp->AsInt64(); // 批量操作参数 std::vector<Parameter> params; client->ListParameter(¶ms); for(auto &¶m_temp : params){ AINFO << "type: " << param_temp->Name() << " " << param_temp->DebugString(); } apollo::cyber::WaitForShutDown(); return 0; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////客户端BUILD//////////////////////////////////// cc_binary( name = "demo06_param_client_cc", srcs = ["demo06_param_client.cc"], deps = [ "//cyber", "//cyber/parameter" ] ) ////////////////////////////////////////////////////////////////////////////// // bezal cyber/demo_cc/... // ./bezal-bin/cyber/demo_cc/demo06_param_client_cc
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号