首页 > 编程语言 >CyberRT_源码与简单功能

CyberRT_源码与简单功能

时间:2025-01-17 17:59:30浏览次数:1  
标签:name proto CyberRT cyber 源码 ROLE transport 简单 channel

阅读源码

 首先快速地作了一个每个模块的简单功能介绍,后续会按照程序的顺序对每个模块深入源码学习
  核心功能: 数据通信和任务调度
      Cyber RT采用了基于Component模块和有向无环图(DAG)的动态加载配置	

role_attributes

cyber/proto/role_attributes.proto中定义了两个数据结构:
    SocketAddr:推测它应该是告知当前write应该往哪个地址中写
    RoleAttributes:
         host_name  host_ip  qos_profile  socket_addr
		 process_id
		 node_name  node_id
		 channel_name  channel_id  message_type  proto_desc
		 service_name  service_id
    角色使用 RoleAttributes 进行标识
	    SocketAddr   ip  port

cyber/proto/topology_change.proto
    enum ChangeType { CHANGE_NODE CHANGE_CHANNEL CHANGE_SERVICE CHANGE_PARTICIPANT};
    enum OperateType { OPT_JOIN OPT_LEAVE};
    enum RoleType {
      ROLE_NODE
      ROLE_WRITER  ROLE_READER
      ROLE_SERVER  ROLE_CLIENT 
      ROLE_PARTICIPANT 
    };
    message ChangeMsg {
       timestamp 
       change_type ChangeType { CHANGE_NODE CHANGE_CHANNEL CHANGE_SERVICE CHANGE_PARTICIPANT};
       role_type   RoleType   {  ROLE_NODE  ROLE_WRITER  ROLE_READER ROLE_SERVER  ROLE_CLIENT  ROLE_PARTICIPANT }
       operate_type OperateType { OPT_JOIN OPT_LEAVE};
       RoleAttributes role_attr node_name  node_id
    			 channel_name  channel_id  message_type  proto_desc
    			 service_name  service_id
    };	

  NodeManager 和 ServiceManager中节点存储比较简单,使用Role-ID和RoleAttributes映射的map存储
  
  通过 TopologyManager 的 AddChangeListener 来监听整个系统中拓扑的变化
        拓扑消息的 Publisher和Subscriber
 
 拓扑发现--channel加入、离开等信息的交换
   cyber/service_discovery/specific_manager/channel_manager.cc
    ChannelManager()--channel_nm= "channel_change_broadcast"
       getMsgType()
       GetWriters()    获取 Node的写对象  获取通过CyberRT框架中的 通道发送的数据
       GetWritesOfNode 获取channel的写对象
       GetWritesOfChannel 获取 发布channel_name的 Reader  
       GetReaders GetReadersOfNode  GetReaderOfChanmel  
       GetUpstreamOfNode()  GetDownstreamOfNode() GetFlowDirection
Reader/Writer基于ChannelManager管理channel信息

在 ReceiverManager::GetReceiver 调用了 transport::Transport::Instance()->CreateReceiver 进行Receiver的创建:

Participant

 Participant 类封装fastrtps接口
 Manager 
      cyber/transport/rtps/participant.h
	  cyber/transport/rtps/publisher.h   cyber/transport/rtps/subscriber.h 
 Manager基于Participant
    NodeManager  ChannelManager ServiceManager 并有共同的基类Manager
	 class ChannelManager : public Manager { friend class TopologyManager;
	 class NodeManager : public Manager {
	 class ServiceManager : public Manager {
 TopologyManager  初始化三个子管理器,。  它们分别为:

- NodeManager用于管理网络拓扑中的节点。
  - ChannelManager用于管理channel,即网络拓扑中的边。
  - ServiceManager用于管理Service和Client。
Participant 类封装fastrtps接口
成员 participant_ 是 Participant实例
Manager 基于 Participant 管理 topology消息的收发

cyber Fast RTPS的两种方式:

    cyber/transport/rtps/participant.h
	cyber/transport/rtps/publisher.h  
	cyber/transport/rtps/subscriber.h 
	
两种方式	
 Publisher-Subscriber方式:对RTPS的简单抽象,用户只需要定义某个Topic的Publisher和Subscriber、传输方式就可以发布订阅数据。
        Writer-Reader方式:更接近RTPS标准中的概念,能直接操作RTPS的读写端点的HistoryCache

核心功能

数据通信和任务调度
 
Node 是整个数据拓扑网络中的基本单元。
     通过在节点中定义 Reader/Writer 或 Service/Client,
	     transport 多进程通信,为上层封装了底层数据传输的细节
    通信功能基础分为 Transmitter、Receiver 和 service_discovery
	  Transmitter 和 Receiver 是 Writer 和 Reader 的通信实现,
	      都具有 SHM、RTPS、INTRA、HYBRID 的实现,对应不同的通信方式
		  过程: 数据分发器 DataDispather 和数据访问器  DataVistor     DataNotifier 用于唤醒协程任务
		  ChannelBuffer 实现缓冲区管理,DataDispatcher进行消息分发,DataVisitor允许用户自定义通道和缓冲区大小
	  service_discovery 是二者的服务发现实现。
	
schedule 的功能是为 CRoutine(其实就是线程池中的task)提供调度策略  
    Resource Management  Executor(执行器) Task
     scheduler的调度单元-协程(coroutine)。
	 Scheduler 会将 node 与 CRoutine 建立联系,然后与 Processor 也建立联系
	 数据处理过程是通过协程来实现的
Component 是封装好的数据处理流程 
    Dag 文件是模块拓扑关系的配置文件
	Launch 文件提供了一种启动模块的简单方法

message

cyber/node
cyber/data
   Data目录下有如下类:
      DataFusion,AllLatest,ChannelBuffer ,CacheBuffer ,DataDispatcher,DataVisitor,VisitorConfig,DataNotifier等 。
	     消息融合策略的定义AllLatest,多路消息下设定msg0为主消息,由msg0根据条件是否满足触发多路消息融合
   Cyber的 Transport 为上层封装了底层数据传输的细节。
      上层主要使用Transport,Transmitter,Receiver三个类,其中Transport是工厂类,负责创建Transmitter、Receiver以及Dispatcher(上层不直接使用)		 
		 
cyber/message
整个数据通道channel 内的数据可以分为两部分:
    CyberRT 框架定义的元数据 和 通道对应的消息格式(Message)所定义的消息数据
        元数据 
		    ChannelName、MessageType、FrameRatio、RawMessage Size 数据字
		消息格式(Message)所定义的消息数据	
cyber/transport/message/message_info.h
 Message:消息是Cyber RT框架中数据交换的基本单位。消息定义了数据的结构和类型,用于在模块之间传递信息	
  // 创建消息对象 // 填充消息内容  // 发布消息
  // 创建消息读取器  // 消息处理回调函数

调度

scheduler类是基类,其拥有两个子类,分别为 
   SchedulerClassic和SchedulerChoreography,分别对应两种策略,Classic(经典)策略与Choreophgray(编排)策略
   
   Scheduler是个单例 实例化过程由scheduler_factory.cc提供
       // 根据策略,实例化不同的调度器
   
 调度配置 :
    cyber/proto/scheduler_conf.proto
    cyber/proto/classic_conf.proto
	cyber/proto/choreography_conf.proto
	

ProcessorContext 只是基类,根据Scheduler的两种策略,分别对应着两种ProcessorContext,
分别是:
   ClassicContext
   ChoreographyContext	
 ProcessorContext  
	为每个group创建对应数量的Processor,并设置相关策略,这是由函数SchedulerClassic::CreateProcessor()来实现的。
	  Processor::Run这个线程不断的尝试从context_成员变量中获取协程
 Scheduler::CreateTask这个函数是Scheduler基类的函数,
   其内部会调用子类SchedulerClassic或SchedulerChoreography的DispatchTask()函数,
   最后将子类的NotifyProcessor函数注册给DataVistor对象

C++ 语法

 shared_from_this():
     shared_from_this 获取一个 shared_ptr,指向当前对象,以确保在异步操作完成之前对象不会被销毁	
	 
	‌weak_ptr的lock方法用于获取一个指向对象的shared_ptr 
lambda表达式是C++11最重要也是最常用的特性之一
     [capture](params) opt -> ret {body;};
	   auto x6 = [this, x, y] {return m_number + x + y; };    // 
	匿名函数内部,需要通过lambda表达式的捕获列表控制如何捕获外部变量,以及访问哪些变量。默认状态下lambda表达式无法修改通过复制方式捕获外部变 

参考

 http://epsilonjohn.club/2021/11/28/Cyber-RT%E7%B3%BB%E5%88%97%E4%B9%8B%E4%B8%AD%E6%9E%A2%E8%B0%83%E5%BA%A6Scheduler/

标签:name,proto,CyberRT,cyber,源码,ROLE,transport,简单,channel
From: https://www.cnblogs.com/ytwang/p/18677476

相关文章

  • NodeJS“学雷锋”志愿者管理系统-计算机毕设 附源码 39269
    NodeJS“学雷锋”志愿者管理系统目 录摘要1绪论1.1研究背景与意义1.2开发现状1.3论文结构与章节安排2 “学雷锋”志愿者管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功......
  • 基于协同过滤算法的电影购票系统的设计与实现-计算机毕设 附源码 38993
    基于协同过滤算法的电影购票系统的设计与实现目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5......
  • SSM宠物救助系统小程序-计算机毕设 附源码 39244
    SSM宠物救助系统小程序摘 要随着现在网络的快速发展,网络的应用在各行各业当中它很快融入到了许多学校的眼球之中,他们利用网络来做这个洗衣店预约的网站,随之就产生了“宠物救助系统”,这样就让用户宠物救助系统更加方便简单。对于本宠物救助系统的设计来说,它主要是采......
  • springboot大学生兼职网站系统-计算机毕设 附源码 39473
    springboot大学生兼职网站系统摘 要随着大学生就业市场的竞争日益激烈,越来越多的大学生选择通过兼职工作来提升自己的能力和经验。为了方便大学生寻找合适的兼职机会并提供雇主与求职者的匹配服务,设计了一个基于SpringBoot框架的兼职网站系统。该系统使用Java语言和Sp......
  • SpringBoot实验课程管理系统8t062(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,实验老师,班级,实验室,实验室预约,课程类型,课程信息,课表信息开题报告内容一、选题背景与意义随着信息技术的快速发展和教育改革的深入,实验课程管理在教......
  • SpringBoot实训实习职业技能管理系统9621h(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学员,教师,工作类型,招聘信息,投简信息,视频类型,实训教学,实训技能,课程名称,教师评价,部门信息,实习,学员打卡开题报告内容一、项目背景与目的随着社会的发展......
  • JSP美发信息综合服务与管理系统5hxk2(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着人们生活水平的提高,越来越多的人开始注重个人形象和美容美发。传统的手工管理方式已经无法满足现代美发店的需求,因此,开发美......
  • JSP芒果分销系统s94qu--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、题目芒果分销系统的设计与实现二、研究背景及意义随着信息技术的飞速发展,农业与信息技术的融合已成为推动农业现代化进程的关键力量。果农及......
  • Spark 源码解析(二) 根据 SparkRpc 自己动手实践一个跨节点通信
     目录一、框架流程:二、Maven搭建Scala导入POM依赖三、根据流程进行编写1、实例 Master2、创建 RpcEnv3、创建RpcEndpoint4、生成RpcEndpointRef5、RpcEndpointRef发送消息 6、防止还没收到消息程序就结束运行7、验证一下,看看结果四、完整代码一、框架......
  • 基于php购物商城在线购物网站电商系统蛋糕网站php+mysql毕业设计课程设计毕设指导计算
    一、功能介绍php在线购物商城电商网站详细技术:HTML+CSS+JS+PHP+MYSQL系统分为用户和管理员两种身份用户功能如下:1.登陆注册2.查看商品详情、蛋糕资讯3.加入购物车、结算订单4.评价5.修改密码6.搜索蛋糕7.退出登录管理员功能如下:1.登录退出2.蛋糕管理(添加、修改和......