Cyber-组件
/* 组件 CyberRT提供的用于构建应用程序模块的基类 用于实现数据过滤、融合 例如无人车上不同传感器之间的数据融合 */ /* 需求 启动之前的消息发布节点,对订阅到的数据进行过滤,只获取其中的姓名和年龄信息并输出到终端 准备 在demo_cc目录下新建文件夹:component_common01,并在component_common01下新建BUILD文件 流程 1.自定义类继承Component类,并重写其Init()与Proc()函数; 2.编写dag文件与launch文件 3.编写BUILD文件 4.编译执行 */ /////////////////////////////.h文件///////////////////////////////////////// // component_common01目录下新建c++文件common_cpt.h #include "cyber/component/component.h" #include "cyber/demo_base_proto/student.pb.h" using apollo::cyber::Component; using apollo::cyber::demo_base_proto::Student; class CommonCpt : public Component<Student>{ public: // 初始化函数 bool Init() override; // 处理函数 bool Proc(const std::shared_ptr<Student>& stu) override; }; CYBER_REGISTER_COMPONENT(CommonCpt) // 在cyber rt中注册组件 /////////////////////////////////////////////////////////////////////////// //////////////////////////////.cpp文件///////////////////////////////////// // 在component_common01目录下新建c++文件common_cpt.cc #include "cyber/demo_cc/component_common01/common_cpt.h" bool CommonCpt::Init() { AINFO << "init..."; return true; } bool CommonCpy::Proc(const std::shared_ptr<Student>& stu){ AINFO << "do message: " << stu->name() << " -- " << stu->age(); return true; } ///////////////////////////////////////////////////////////////////////// ////////////////////////dag文件///////////////////////////////////// // 模块拓扑关系的配置文件,可以在dag文件中定义使用的Component和上游/下游通道 // 在component_common01目录下新建cpt.dag文件 module_config { // 动态库路径 module_library : "/apollo/bezal-bin/cyber/demo_cc/component_common01/lib_common_cpt.so" components { class_name : "CommonCpt" // 类名 config { // 该配置文件名称,自定义 name : "my_common" // 订阅的消息的话题,有几个发布方,就写几个readers readers { channel : "chatter" } } } } //////////////////////////launch文件////////////////////////////////////////// // 一种启动模块的简单方法,通过在launch文件中定义一个或者多个dag文件,可以同时启动多个模块 // 在component_common01目录下新建cpt.launch文件 <cyber> <module> <name>my_common</name> // 指向dag文件的绝对路径 <dag_conf>/apollo/bezal-bin/cyber/demo_cc/component_common01/cpt.dag</dag_conf> <process_name>my_common</process_name> </module> </cyber> //////////////////////////////////////////////////////////////////////////// /////////////////////////////BUILD/////////////////////////////////////// package(default_visibility = ["//visibility:public"]) load("//tools/install:install.bzl", "install") // build不会自动导入install,需要手动导入 cc_library( name = "common_cpt_lib", srcs = ["common_cpt.cc"], hdrs = ["common_cpt.h"], deps = [ "//cyber", "//cyber/demo_base_proto:student_cc" ] ) // 因为实现了cpp文件,所以增加cc_binary,并将其指定为动态库 cc_binary( name = "lib_common_cpt.so", linkshared = True, // 动态库所以共享链接为true linkstatic = False, // 静态链接为false deps = [":common_cpt_lib"] ) filegroup( name = "conf", // 将dag文件和launch文件打包 srcs = [ ":cpt.dag", ":cpt.launch" ] ) // 安装dag和launch install( name = "install", data = [ ":conf" ], runtime_dest = "cyber/demo_cc/component_common01" // 当前包相对路径 targets = [ "//cyber/demo_cc:demo01_talker", // 发布方 ":lib_common_cpt.so" // 组件的动态库 ] ) //////////////////////////////////////////////////////////////////// // bezal build cyber/demo_cc/component_common01/... // source cyber/setup.bash // 执行: /* 终端A执行发布方: source cyber/setup.bash ./bazel-bin/cyber/demo_cc/demo01_talker 终端B执行组件: source cyber/setup.bash cyber_launch start cyber/demo_cc.component_common01/cpt.launch 或者执行dag文件 mainboard -d cyber/demo_cc/component_common01/cpt.dag 关闭组件: ctrl + c 或者 source cyber/setup.bash cyber_launch stop cyber/demo_cc.component_common01/cpt.launch */
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号