分享

开源Fast-DDS安装示例及DDS模型架构

 开心果NeedCar 2023-06-21 发布于上海

讨论本文的主题之前,先更正一个错误,在DDS概述及DCPS模型一文中提到:CP Autosar中,暂时不支持DDS。此处表述有误,CP Autosar R22-11版本中,已开始支持DDS

提示:本文使用Linux(Ubuntu20.4)操作系统

DDS和Autosar一样,是一套标准,任何组织或者个体,均可以去实现它。不同组织或者公司实现该标准时,会形成不同的风格和版本。比如:Fast-DDS就是一套开源的DDS标准实现,由eProsima维护。之前讨论的MICRO-XRCE-DDS也由eProsima发布。MICRO-XRCE-DDS需要代理(Agent),面向的对象是MCU这种资源紧缺的Device,如果使用域控或者中央大脑对应的平台,在资源和算力足够的情况下,可以使用Fast-DDS,不用代理。

1、Fast-DDS安装及注意事

本文讨论的开源Fast-DDS采用源码安装方式,安装参考链接:https://fast-dds.docs./en/latest/installation/sources/sources_linux.html

一)3.1. Fast DDS library installation

本文选择"3.1. Fast DDS library installation"小节的方式安装,按照提示,逐步安装。

  • 安装遇到的问题

Q1command vcs not found

A1:解决措施,修改PATH环境变量:PATH=$PATH:~/.local/bin

参考链接:https://www.cnblogs.com/tengzijian/p/15541952.html

(二)3.3. Fast DDS-Gen installation
安装Fast DDS-Gen的主要目的是根据用户自定义idl文件生成对应的源文件。编译Fast DDS-Gen之前,需要先安装Java JDKGradle。

  • Fast DDS-Gen使用

需要将编辑好的*.idl文件放置在~~/Fast-DDS/Fast-DDS-Gen/Scripts文件下,*.idl文件放置位置如下所示:

在此文件夹下打开终端,并输入如下命令

./fastddsgen -example CMake HelloWorld.idl

生成的源文件如下所示:

2、HelloWord示例

(一)启动Publisher
在示例进程中,使用命令行启动Publisher进程,如下所示:

(二)启动Subscriber
在示例进程中,使用命令行启动Subscriber进程,如下所示:

(三)订阅/发布的通信示意
Publisher与Subscriber之间的发布、订阅行为如下所示:

3、DDS模型架构

DDS模型架构可以分为四层:Application、DDS、RTPS、Transport。如下所示:

(一)Application

如果用户应用程序需要通过DDS协议与对等实体通信,可以直接调用封装的DDS API。发布数据时,可以调用DataWriter对象的Write()接口;接收数据时,可由SubscriberListener触发DataReader注册的on_data_on_readers()接口。
(二)DDS
DDS层可以部署多个DDS Domian,相同DDS Domian下的DomainParticipant通过Publish/Subscribe方式交互信息。关于DDS,后续文章会展开细节讨论,不在这过多赘述。
(三)RTPS
RTPS(Real-Time Publish-Subscribe),抽象传输层,为什么要抽象传输层呢?:DDS协议并未有明确使用什么方式传输数据,但是,数据的交互又脱离不开通信方式。所以,这就是RTPS出现的目的。
(四)Transport
可使用多种方式传输DDS数据,eg:UDP、TCP、SHM(Shared Memory)。不管UDP还是TCP,使用的总线类型均为Ethernet,使用CAN或者其他总线是否可行呢?:个人理解,可以。但是,任何方案的落地均脱离不了使用场景,如果使用场景是高速、大数据传输,选用CAN总线可不是一个明智之举。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多