通信中间件 Fast DDS:编译、安装和测试
1.简介
DDS是 OMG 组织发布的一种中间件协议和 API 标准,它将系统的组件集成在一起,提供业务和任务关键型物联网(IoT) 应用程序所需的低延迟数据连接、极高的可靠性和可扩展架构。
DDS(Data Distribution Service,数据分发服务) 是一种以数据为中心的通信协议,用于分布式软件应用程序通信。
它描述了支持 数据提供者(Data Providers) 和 数据消费者(Data Consumers) 之间通信的通信应用程序编程接口 (API) 和通信语义。
要学习 DDS 就不能忽略它的模型:DCPS(以数据为中心的发布订阅模型)。
DCPS 有 3 个关键实体:
- publication entities: 定义消息生成对象及相关属性
- subscription entities:定义消息消费对象及相关属性
- configuration entities:定义传输相关的属性如 Topic 类型,通信的 QoS(服务质量)。
QoS 是一个非常重要的概念,DDS 使用 QoS 来定义 DDS 实体的行为特征。 QoS 由单独的 QoS 策略(源自 QoSPolicy 的类型的对象)组成。
FastDDS(原名 Fast RTPS)是 eProsima 公司开发的开源 DDS(Data Distribution Service)实现,基于 RTPS 协议,适用于实时通信场景。
2.Windows编译、安装和测试
2.1.编译环境准备
- 安装 Visual Studio 2019/2022(需勾选 “Desktop development with C++” 组件)。
- 安装 CMake(3.16+,添加到系统 PATH)。
- 安装 Git(添加到系统 PATH)。
- 依赖库(如 OpenSSL、asio)可通过 vcpkg 安装:
1 | # 安装vcpkg |
由于我的电脑通过cmd命令命令行目录是C:\Users\Administrator,所以vcpkg是安装在C:\Users\Administrator这里:
下载vcpkg源码:
安装 openssl asio tinyxml2:
2.2.编译安装
2.2.1.安装FastCDR
FastDDS 依赖 FastCDR(序列化库),需要获取源码,在cmd命令行直接操作:
1 | # 克隆FastCDR(必须先编译) |
安装完成后,在C:\fastdds_install目录有FastCDR的头文件,库文件等信息:
2.2.2.安装Foonathan Memory
FastDDS 依赖 Foonathan Memory(内存管理库),需要获取源码,在cmd命令行直接操作:
1 | # 克隆FastCDR(必须先编译) |
在执行cmake --build . --config Release --target install的时候报错:
于是在网上各种搜索问题原因,始终没有找到解决的办法,于是我到Foonathan Memory的网站去看了一下:
找到资料原来Foonathan Memory可以通过vcpkg安装,由于之前安装vcpkg,于是直接进入vcpkg目录,执行下面命令就行:
1 | ./vcpkg integrate install |
安装完之后,FastDDS的所以依赖就安装完毕,在vcpkg的安装目录下可以看到所有的依赖项:
2.2.3.安装FastDDS
跟安装FastCDR的步骤差不多,不过需要各种依赖库的路径,如下:
1 | git clone https://github.com/eProsima/Fast-DDS.git |
编译安装后,在C:\fastdds目录下有FastDDS的头文件,库文件等信息:
2.3.验证安装
编译完成后,可通过运行 FastDDS 的示例程序验证:
编译:
1 | mkdir build && cd build |
完成后在Relese目录下有测试程序hello_world.exe, 把hello_world.exe的一些依赖dll拷贝到这个目录下:
在命令行运行hello_world.exe,显示如下:
分别启动两个终端,运行:
1 | # 启动发布者(终端1) |
最终运行的效果(1对1):
1对多,一个发布者,多个订阅者:
若订阅者能收到发布者的消息,说明编译和安装成功。
3.Linux编译、安装和测试
3.1.编译环境准备
以麒麟系统为例讲解,FastDDS 依赖多个工具和库,需先安装编译环境和依赖项。
1 | # 更新系统包 |
3.2.编译安装
3.2.1.安装FastCDR
1 | git clone https://github.com/eProsima/Fast-CDR.git |
3.2.2.安装Foonathan Memory
1 | git clone https://github.com/eProsima/foonathan_memory_vendor.git |
3.2.3.安装FastDDS
1 | git clone https://github.com/eProsima/Fast-DDS.git |
编译到最后的时候,出错了:
从报错的提示说是无法找到make_strand,第一直觉应该是asio的库版本低了,FastDDS要求的asio版本是:
而我的麒麟系统是1.12.2,所以报错了。因此必须升级asio库,于是直接从地址:
下载了最新版本,直接安装:
1 | ./configure |
asio库相对来说更简单,由于这个库其实并不需要编译,是一个header-only的库,所以根据命令进行安装就可以了。
然后再用同样的方法安装FastDDS即可。安装完在/usr/local目录下有FastDDS的相关信息:
3.3.验证安装
编译完成后,可通过运行 FastDDS 的示例程序验证。
先编译测试程序:
1 | # 进入示例目录(以HelloWorld为例) |
分别启两个终端运行测试程序:
1 | # 启动发布者(终端1) |
若订阅者能收到发布者的消息,说明编译和安装成功。
4.常见问题
1.依赖缺失:CMake 报错 “Could NOT find XXX” 时,检查对应依赖是否安装,或通过-DCMAKE_PREFIX_PATH指定依赖路径。
2.版本不兼容:确保 FastDDS 与 FastCDR 版本匹配(参考官方版本矩阵)。
3.权限问题:安装时若提示 “Permission denied”,添加sudo或修改安装路径(如 -DCMAKE_INSTALL_PREFIX=$HOME/fastdds)。
通过以上步骤,可在 Linux、Windows 或 macOS 系统上完成 FastDDS 的编译与安装,为后续开发 DDS 应用奠定基础。


























