1.1 ROS1 VS ROS2

img

  • ROS2 引入了DDS
  • ROS1 需要Master节点来管理通信

发布订阅模型:

img

ROS2 软件架构

img

1.2 DDS

Data Distribution Service,也就是数据分发服务,2004年由对象管理组织OMG发布和维护,是一套专门为实时系统设计的数据分发/订阅标准:https://fast-dds.docs.eprosima.com/en/latest/fastdds/library_overview/library_overview.html

img

DDS软件架构:

img

从上往下分为三个层级:DDS层、RTPS层、Transport层

可以看见FastDDS现在的架构有四层ApplicationDDS层、RTPSTransport

  • DDS层是对RTPS层的抽象,可以看见DDS层里有很多角色,如:PublisherSubscriberDataWriterDataReaderTopicDomainParticipant等,反而搞得很复杂
  • RTPS层相对而言比较清晰简单RTPSWriter用于发送数据,RTPSReader用于读取数据,RTPSParticipant用于区分不同进程
  • Transport层则为底层通信实现,可以看见它支持udptcpshm三种通信方式

img

  • FastDDS的早期版本其实不叫FastDDS,而是直接叫Fast-Rtps,意味着早期并没有实现DDS协议,并且不支持shm,只支持网络通信,CyberRt使用的就是以前这种只支持网络通信的版本作为不同主机之间的通讯协议,因此对于同主机之间不同进程的通信,CyberRt内部自己实现了基于共享内存的通信方式。

FastRTPS官网:https://fast-rtps.docs.eprosima.com/en/v1.9.4/introduction.html

img

1.3 CyberRT

源码地址:https://github.com/storypku/CyberRT

源码层级:

img

CyberRT软件架构:

img

数据传输: 在一个分布式计算系统中,根据两个节点间的位置关系需要使用不同的传输方式 - INTRA:如果是同进程的,因为在同一地址空间,直接传指针就完了。 - SHM(Shared memory):如果是同一机器上,但跨进程的,为了高效可以使用共享内存。 - RTPS:如果是跨设备的,那就老老实实通过网络传吧。 - HYBRID: 框架需要根据节点间关系选择合适的传输后端。

img

源码架构:

img

可以把CyberRT拆分为两个部分

  • 分布式通信
  • 协程计算框架