FastDDS-1.初识研究

用到fastdds,研究

1.Git补充

1.1 查看当前所在的Git标签

使用 git describe 命令:
git describe 命令可以返回一个描述当前提交与最近的标签之间关系的字符串。例如:

git describe --tags
运行结果将会是类似于 v1.0.0 的标签名称,表示当前所在的标签

2. FastDDS

Fast DDS是DDS(数据分发服务)规范的C++实现,DDS是由对象管理组(OMG)定义的协议。
Fast DDS库提供应用程序编程接口(API)和通信协议,用于部署以数据为中心的发布-订阅(DCPS)模型目的是在实时系统之间建立高效可靠的信息分发。Fast DDS在资源处理方面具有可预测性、可扩展性、灵活性和高效性。为了满足这些要求,它使用了类型化接口,并依赖于一个多对多的分布式网络范例,该范例巧妙地允许将通信的发布方和订阅方分离。Fast DDS包括:

  • DDS API实现。
  • Fast DDS-Gen,一种用于桥接类型化接口和中间件实现的生成工具。
  • 底层RTPS有线协议实现。

除了以上内容,Fast DDS已被选为Robot Operating System 2(ROS 2)在每个长期(LTS)版本和大多数非LTS版本中支持的默认中间件。

2.1 RTPS

实时发布订阅协议(Real Time Publish Subscribe Protocol,RTPS)是一种协议,用于在单播和多播中通过UDP等不可靠传输进行best effort和reliable的发布-订阅通信。RTPS已被OMG(对象管理组)标准化为数据分发服务(DDS)实现的互操作性协议,该标准广泛用于航空航天和国防部门的实时应用。除了嵌入在不同DDS实现中的RTPS实现外,还有独立的轻量级RTPS实现。其中eProsima Fast RTPS在性能、特性和对最新版本RTPS标准(RTPS 2.2)的遵从性方面处于领先地位。

  • RTPS架构:RTPS协议基于四个不同的模块,控制不同DDS应用程序之间的信息交换。
    结构模块:定义通信端点并将它们映射到对应的DDS。
    消息模块:定义了这些端点可以交换哪些消息以及如何构建这些消息。
    行为模块:定义了一组合法交互,以及它们如何影响每个端点。
    发现模块:定义了一组允许自动发现的内置端点。

DDS,(Data Distribution Service for Real-Time Systems)

总结下特点:

  • DDS采用发布/订阅体系架构,强调以数据为中心。
  • DDS使应用在需要进行数据访问的时候提供一个虚拟的全局数据池概念,事实上并没有一个存储所有数据的全局设备。每个应用仅在本地存储它需要的数据,当整个网络内的任何应用需要他们时,提供给对应应用。所有的数据分发工作全部都由DDS代劳了。
  • 网络中的数据对象用主题做标识,分布式节点在全局数据空间中发布或订阅感兴趣的主题信息。各个节点在逻辑上无主从关系,点与点之间都是对等关系,通信方式可以是点对点,点对多,多对多,在Qos策略的控制下建立连接,自动发现和配置网络参数。

当然DDS之前一种协议,具体实现有好多版本,如:

  • RTI公司的DDS方案:美国海上战争中心(NSWC)高性能分布式计算系统(HiPer-D),美军都在用,应该很牛吧。
  • OpenDDS:OpenDDS是使用C++语言针对OMG数据分发服务(DDS)的一种开源实现。由OCI公司设计和维护,http://www.opendds.org 官网。尽管本身OpenDDS采用C++语言实现,但也提供JAVA和JMS的开发接口,这意味着JAVA程序开发也可以使用OpenDDS。
  • eProsima Fast RTPS:Fast RTPS是eProsima公司对RTPS标准的一个实现。那RTPS是什么东东?RTPS是DDS标准中的一个子集。英文名字是Real Time Publish Subscribe,是DDS标准中的通讯协议部分。

2.2 注意

FastRTPS 是FastDDS旧版,当前好像只在gitee上有这个代码:
gitee张强强/Fast-RTPS
canonical/Fast-RTPS

注意要用较版本的foonathan_memory_uvendor,否则可能后面编译不过去

注意三方库下面的子模块要下载下来(https://github.com/eProsima/Fast-RTPS/tree/1.8.x/thirdparty)
chriskohlhoff/asio

3.相关库编译

  • 从源代码在Linux环境中安装FastDDS的说明。将安装以下软件包:

foonathan_memory_uvendor,一个STL兼容的C++内存分配器库。
fastcdr,一个根据标准CDR序列化机制进行序列化的C++库。
fastrtps,Fast DDS库的核心库。

  • eProsima Fast DDS在Linux环境中从源代码安装时具有以下依赖性:
    (1)Asio andTinyXML2 libraries
    Asio是一个用于网络和低级I/O编程的跨平台C++库,它提供了一致的异步模型。
    TinyXML2是一个简单、小巧、高效的C++XML解析器。

sudo apt install libasio-devlibtinyxml2-dev

(2)OpenSSL
OpenSSL是一个用于TLS和SSL协议的强大工具包,也是一个通用密码库。使用相应Linux发行版的软件包管理器安装OpenSSL。

sudo apt install libssl-dev

(3)Libp11 andSoftHSM libraries
Libp11为OpenSSL提供PKCS#11支持。这是一个可选的依赖项,仅当eprosima Fast DDS与安全性和PKCS#11 URI一起使用时才需要。

sudo apt install libp11-devlibengine-pkcs11-openssl

为了检查OpenSSL是否能够访问PKCS#11引擎,请使用:
openssl engine pkcs11 -t

(4)GTest
GTest是C++的单元测试库。默认情况下,eProsima Fast DDS不编译测试。调用colcon或CMake时,可以使用适当的CMake配置选项激活它们。也可以将Gtest存储库添加到工作区目录中。
git clone https://github.com/google/googletest src/googletest-distribution


  • CMAKE_INSTALL_PREFIX为编译后,默认要安装的路径。
  • Fast DDS,以上命令行不能成功编译Fast DDS,因为需要配置其依赖的很多库路径(上述已经下载的库等)。因此需要启动CMake-GUI界面程序,图形界面配置这些依赖库路径。CMake-GUI界面程序启动后选择好Fast-DDS源码目录和Build目录后,先Configure,后Generate。Configure过程中,会弹出缺少相关依赖库提示,人工选择前面已经下载安装的依赖库路径,Configure成功后,就可以Generate生成完整依赖工程项目(vscode/codeblocks等),然后在开发工具中build生成、install安装相关动态库so文件、可执行文件、头文件等。也可以在CMake-GUI配置生成makefile文件后,在linux命令行下make、install.


DDS Gen是一个Java应用程序,它使用IDL(接口定义语言)文件中定义的数据类型生成Fast DDS源代码。生成的源代码可以用于任何Fast DDS应用程序中,以定义主题的数据类型,稍后将用于发布或订阅。Fast DDS通过两个类定义Topic中交换的数据类型:TypeSupport和TopicDataType。TopicDataType描述发布和订阅之间交换的数据类型,即与Topic对应的数据;而TypeSupport封装TopicDataType的一个实例,提供注册该类型以及与发布和订阅交互所需的功能。

要声明结构化数据,必须使用IDL格式。IDL是一种规范语言,由OMG(对象管理组)制定,它以独立于语言的方式描述接口,允许不同语言的软件组件之间进行通信。Fast DDS Gen工具读取IDL文件并解析OMG IDL规范的子集,以生成数据序列化的源代码。此子集包括通过IDL定义数据类型中包含的数据类型描述。其余的文件内容将被忽略。

Fast DDS Gen生成的源代码使用Fast CDR,这是一个C++11库,提供数据序列化和编码机制。因此,如RTPS标准中所述,当发送数据时,使用相应的公共数据表示(CDR)对数据进行序列化和编码。CDR传输语法是代理间传输的低级表示,从OMGIDL数据类型映射到字节流。

Fast DDS Gen的主要功能是在不了解串行化或反序列化机制的情况下促进DDS应用程序的实现。使用Fast DDS Gen,还可以与使用Fast DDS库的发布者和订阅者一起生成DDS应用程序的C++源代码(请参阅构建发布/订阅应用程序)。Fast DDS Gen还可以为数据类型生成Python绑定,以便在基于Python的Fast DDS应用程序中使用它们(请参见构建Python辅助库)。


3.1 编译安装Foonathan memory

要注意版本,版本不一致后面可能编译出问题

1 mkdir Fast-DDS
2 cd Fast-DDS
3 git clone https://github.com/eProsima/foonathan_memory_vendor.git
4 mkdir foonathan_memory_vendor/build
5 cd foonathan_memory_vendor/build
6 cmake .. -DCMAKE_INSTALL_PREFIX
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周陽讀書

周陽也想繼往聖之絕學呀~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值