CyberRT_概念组件以及基本流程_node_component

CyberRT两大功能

任务调度
数据通信

基本组件

component node channel
reader/writer sevice/client
Task routine

通信

1.通信的方式: 
  01. intras-process  
  02. shared Memory	
  03. socket--fastRTPS DDS也是采用发布/订阅机制进行网络通讯
      通过抽象出DDS接口,让ROS 2可以使用不同公司开发的DDS库
	  Fast RTPS是eProsima公司对RTPS标准的一个实现,也就是库
	  RTPS是DDS标准中的一个子集。
	     英文名字是Real Time Publish Subscribe,是DDS标准中的通讯协议部分
 Hybird 自适应以上三种
2.CM - communicate	 
  transport
     intraTransmitter --》 writer 
	 shmTransmitter
	 RTPSTransmitter
  ReceiverManager--Receiver--> Reader--> dispatcher
 DataFusion  
  dataDispather ---> 消息分发 -- channelBuffer   notifier 
  CacheBuffer
  DataVistor--->消息处理--notifier_
3.Service Discovery
     Transport::particopant
	    eprosima:fastrtps:participant
	 TopologyManager--manager--nodeManager channelManager serviceManager
	    startDiscovery stopDiscovery join leave  Addchangelister removechangelister
	全局队列 本地队列
4.Protobuf record

任务调度

1.基本组成 
   1.ResourceManagerment
   2.Scheduler 调度器	
   3.Executor  执行器
   4. Task     执行单元 
   5.Dag 配置任务的逻辑关系
2.用户态 协程 Routine 
  内核态 Thread
  
3.根据模块优先级、资源需求、调度算法
   调度c策略
    classic: group  process CRoutine
	choreography: task process pool
  RoutineFactory
  Component: 
     Initialize --> Init()
     Process  --> Proc()	

ROS1_ROS2_CyberRT__autosar

机制		 

启动流程

 CyberRT的启动流程
  mainBoard
  classloader

源码分析以及开发应用

开发应用
 开发流程
 
###通信 
Node节点,CyberRT的一个基础构件;
   每个模块都包含节点,它能够基于信道,服务等功能,与其他节点进行通信。
 Node最常用的功能是创建Reader和Writer  
  node_创建一个reader,并且会绑定一个回调函数 e,用来处理接收到的消息。
    /*  
        需求: 发布摄像头仿真数据。
        实现:
            1.头文件;
            2.初始化 cyber 框架;
            3.创建节点;
            4.创建发布者;
            5.组织数据并发布;
            6.等待关闭。
    */
    #include "cyber/cyber.h"
    #include "modules/common_msgs/sensor_msgs/sensor_image.pb.h"
    
    using apollo::drivers::Image;
    
    int main(int argc, char *argv[])
    {
        apollo::cyber::Init(argv[0]);
    
        // 3.创建节点;
        auto talker_node = apollo::cyber::CreateNode("camear_sim_node");
        // 4.创建发布者;
        auto talker = talker_node->CreateWriter<Image>("/image_sim");
        // 5.组织数据并发布

    ####main()函数中写通信逻辑并编译为单独的可执行文件的方法

Comopnent

相比Ros,CyberRT增加了Component组件,组件之间通过 Cyber channel 通信。Cyber RT 中用Message实现模块间通信
#include "cyber/cyber.h"
#include "cyber/class_loader/class_loader.h"
#include "cyber/component/component.h"
#include "cyber/proto/unit_test.pb.h"
using apollo::cyber::Reader;
using apollo::cyber::ReaderConfig;
using apollo::cyber::CyberConfig;
using apollo::cyber::proto::Chatter;
 
class ConsumerComponent : public apollo::cyber::Component<> {
 public:
  bool Init() override {
    // 创建Reader配置
    CyberConfig cfg;
    cfg.channel_name = "channel_name"; // 替换为你的通道名称
    cfg.qos_profile.depth = 10;
    reader_ = node_->CreateReader<Chatter>(cfg);
    return true;
  }
 
  void Proc(const std::shared_ptr<Chatter>& msg) {
    // 处理接收到的消息
    // 例如,打印接收到的消息内容
    AINFO << "Received message: " << msg->content();
  }
 
  std::shared_ptr<Reader<Chatter>> reader_;
};
 
CYBER_REGISTER_COMPONENT(ConsumerComponent)


初始化组件的文件结构
实现组件类
设置配置文件
启动组件

使用CYBER_REGISTER_COMPONENT宏定义把组件类注册成全局可用。
对于源文件 ConsumerComponent.cc, Init 和 Proc 这两个函数需要实现
 Cyber RT中,所有的 Comopnent 都会被编译成独立的.so文件,Cyber RT 会根据开发者提供的配置文件,按需加载对应的 Component。
  所以,开发者需要为.so文件编写好配置文.dag文件和.launch文件,以供 Cyber RT正确的加载执行Component。
Cyber RT提供两种加载启动Component的方式,
    分别是使用cyber_launch工具启动component对应的launch文件,
	       和使用mainboard 启动 component对应的dag文件
cyber_launch工具可以启动dag文件和二进制文件,而mainboard执行启动dag文件。

     与启动文件一起启动(推荐)
         cyber_launch start /apollo/cyber/examples/common_component_example/common.launch
     
     使用DAG文件启动
         mainboard -d /apollo/cyber/examples/common_component_example/common.dag
		 
 apollo::cyber::Init(argv[0]);
 
 读取的channel 写在dag文件中 reader

说明

 一个dag文件对应一个进程,而dag文件中的一个components对应一个协程

   CyberRT中的Component在实例化的时候会创建一个Node,通过这个Node来订阅和发布对应的消息。
     此外,Component对用户提供了两个接口Init()和Proc(),用户在Init()中进行初始化,在Proc()中执行具体的算法

参考

 第五章:使用Cyber RT进行相机仿真 https://apollo.baidu.com/community/article/1105
posted @ 2024-05-04 22:50  辰令  阅读(149)  评论(0编辑  收藏  举报