定义&作用
定义:组件是用于构建应用程序模块的基类。
作用:把多方传感器的数据进行过滤,融合,并导出使用。
通用组件:
作用:实现简单的信息过滤和融合
实列分析:启动一个talker节点,对该节点进行信息的过滤,只收集信息和年龄
实现流程:
-
- 自定义类继承Component类,并重写其Init()与Proc()函数;
- 编写dag文件与launch文件;
- 编写BUILD文件
- 编译执行
继承demo_cc_talker并重写Component类Component_common01目录
代码解释
使用的模板与订阅的消息类型一致
Init()函数是用于初始化的,只会执行一次
Proc()函数在订阅到消息的时候就会被回调执行
编写dag文件
有向无环图,可当作数据结构理解,不闭环。
编写launch文件
用来作为程序启动的入口文件(之前启动方式都是命令执行,现在通过配置启动程序到launch中实现)。
/***
* 组件相关的头文件
* 实现:
* 1包含其他头文件
* 2定义类继承组件,重写init和proc
* 3在cyber中注册组件
* ***/
#include "cyber/component/component.h"
#include"cyber/demo_base_proto/lasers.pb.h"
using apollo::cyber::Component;
using apollo::cyber::demo_base_proto::Lasers;
//自定义类继承component
//模板需要与处理的消息类型一致
//组件最多支持四个模板传入
//不够的话就多次调用
class LasersCpt: public Component<Lasers,Lasers>{
public:
bool Init() override; //覆盖一种方法并对其进行重写
bool Proc(const std::shared_ptr<Lasers> &LasersFront,
const std::shared_ptr<Lasers> &LasersBack ) override;
//里面的参数要和重写的函数一致
};
//宏实现
CYBER_REGISTER_COMPONENT(LasersCpt)
//把自定义的类传进来,在cyber rt中注册一个类
/*******
* #根据头文件和源文件生成一个C++库
********/
#include "cyber/demo_component1/lasers_cpt.h"
#include "cyber/demo_base_proto/lasers.pb.h"
using apollo::cyber::demo_base_proto::Lasers;
//资源的初始化
bool CommonCpt::Init(){
//初始化一个发布者
this->node ->CreateWriter();
AINFO << ".....................INT.........................";
return true;
}
//消息处理,订阅到student消息时,会回调该函数
bool CommonCpt::Proc(const std::shared_ptr<Lasers> &LasersFront,const std::shared_ptr<Lasers> &LasersBack){
//数据写出
AINFO<< "提取到学生姓名为:" << LasersFront->seq()<<"; 年龄为: "<<LasersFront->count();
AINFO<< "提取到学生姓名为:" << LasersBack->seq()<<"; 年龄为: "<<LasersBack->count();
return true;
}
启动: cyber_launch start 路径.Launch
关闭: cyber launch stop 路径.launch
待续