Fast-DDS库的安装教程


工欲善其事,必先利其器。首先要知道 Fast-DDS是什么?要知道 Fast-DDS是什么,又要先知道 DDS是什么?听起来似乎像是无限套娃。由于篇幅原因,本文仅给出 Fast-DDS的泛概念及用途,至于 DDS,感兴趣的读者请自行查阅了解。

简单来说,Fast-DDS是eProsima实现的一个开源的DDS库,目前主要用于机器人的ROS2以及一些工业领域设备间通信,由于本文是一篇Fast-DDS库的安装教程,不再对其作过多赘述,感兴趣的读者请自行查阅了解。

0 序言

以下是我的环境配置:
Operating System:Debian 9(Stretch)
cmake version:3.24.3
gcc/g++ version:6.3.0(后改为9.3.0
foonathan_memory_vendor version:0.7.1
Fast-CDR version:1.0.21
Fast-DDS(Fast-RTPS) version:2.4.0

Tip:关于怎么看最后这三个文件的版本,在第2.1小节到2.3小节中每次执行cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_SHARED_LIBS=ON这条命令的时候,都会出现它们的版本号,自己注意看一下。

1 安装依赖

sudo apt install cmake g++ python3-pip wget git
sudo apt install libasio-dev libtinyxml2-dev
sudo apt install libssl-dev

2 安装Fast-DDS

2.1 编译foonathan_memory_vendor

如图所示,通过执行命令pwd,输出当前目录的全路径名称。

在这里插入图片描述
一般情况下,我们会在/home/用户名这个目录下进行操作。
逐条执行下述命令:

git config --global url."https://gitclone.com/github.com/".insteadOf "https://github.com/"
mkdir ~/Fast-DDS
cd ~/Fast-DDS
git clone https://github.com/eProsima/foonathan_memory_vendor.git
mkdir foonathan_memory_vendor/build
cd foonathan_memory_vendor/build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_SHARED_LIBS=ON
sudo cmake --build . --target install

2.2 编译Fast-CDR

cd ~/Fast-DDS
git clone https://github.com/eProsima/Fast-CDR.git
mkdir Fast-CDR/build
cd Fast-CDR/build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/
sudo cmake --build . --target install

2.3 编译Fast-DDS

cd ~/Fast-DDS
git clone https://github.com/eProsima/Fast-DDS.git
mkdir Fast-DDS/build
cd Fast-DDS/build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/
sudo cmake --build . --target install

2.4 编译Fast-DDS-Gen

cd ~/Fast-DDS
git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git
cd Fast-DDS-Gen
sudo apt install openjdk-8-jdk
./gradlew assemble

2.5 添加环境变量

不要直接复制,搞清楚你的scripts的路径是什么?

export PATH=/home/你的用户名/Fast-DDS/Fast-DDS-Gen/scripts:$PATH

如图所示,是我的scripts所在的目录。

在这里插入图片描述
执行下述命令,查看环境变量:

vim ~/.bashrc

在这里插入图片描述
在这里插入图片描述
可以看到,环境变量已经成功添加。
此时,在命令行中输入fast,然后按两下Tab键,能够在可补全列表中显示出fastddsgen,如下图所示,可以进一步证明,环境变量添加成功。

在这里插入图片描述

2.6 验证

测试Fast-DDSHelloWorldExample

cd ~/Fast-DDS/Fast-DDS/examples/C++/HelloWorldExample
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/
make

新建一个终端,执行下述命令:

cd ~/Fast-DDS/Fast-DDS/examples/C++/HelloWorldExample/build
./HelloWorldExample publisher

新建另一个终端,执行下述命令:

cd ~/Fast-DDS/Fast-DDS/examples/C++/HelloWorldExample/build
./HelloWorldExample subscriber

输出结果如下:

在这里插入图片描述
在这里插入图片描述
至此,Fast-DDS库编译安装完成。

3 可能会遇到的问题

3.1 Fast-DDS编译到70%报错

/usr/include/c++/6/ext/new_allocator.h:120:4: error: use of deleted function ‘constexpr std::pair<

首先,文中所使用的第2.3小节中的Fast-DDS的版本号是2.3.0;如果你使用的是Fast-DDS 2.4.0的话,需要将gcc和g++的版本要求至少要升级到7.5.0以上,不然编译到70%的时候就会报错。
报错如下:
在这里插入图片描述
在这里插入图片描述

升级后需要把你的gcc和g++的调用路径改一下,修改方法如下。
切换gcc和g++的命令:

export CC=/usr/local/gcc-9.3.0/bin/gcc
export CXX=/usr/local/gcc-9.3.0/bin/g++

Tips:自己注意一下自己的gcc和g++的安装路径,改成自己的路径。

3.2 Permission denied(拒绝访问)

还有人可能会在第2.4小节编译Fast-DDS-Gen时遇到问题,就是在执行./gradlew assemble出现Permission denied的报错;这是因为你当前的访问身份是普通用户,你必须切换成超级管理员模式下才能执行上述命令,即执行su。如果实在不想切换的话,可以执行下述命令,给予其足够的权限:

chmod 777 ./gradlew assemble

3.3 其他问题

我们在执行第2.1小节到第2.4小节的命令时,不可能一遍就成功,总会编到某一小节报错了,那就需要重来。重来的时候就不需要在git clone下载那些Fast-DDS那些文件了,只需要清空build里面的东西再编译。以第2.1小节中编译foonathan_memory_vendor为例:

cd foonathan_memory_vendor/build
sudo rm -rf *
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_SHARED_LIBS=ON
sudo cmake --build . --target install

第2.2小节和第2.3小节也这样操作。
第2.4小节的话,就把build和share文件夹删除,即在Fast-DDS-Gen目录下,执行下述命令:

sudo rm -rf build
sudo rm -rf share

4 参考资料

《安装Fast-DDS库 官方文档》
https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_linux.html
《Ubuntu 18.04 安装fast-dds笔记》
https://blog.csdn.net/mkt123338702/article/details/125880446
《DDS开源库FastDDS分析 - 安装》
https://blog.csdn.net/w5678912345/article/details/125882684
《Fast RTPS(DDS) 安装指南》
https://blog.csdn.net/shao5166233/article/details/126599414
《Fast-RTPS调坑记录(linux源码安装)》
https://blog.csdn.net/tao_292/article/details/125317670
《【FastDDS学习笔记】HelloWorld示例程序编译和运行》
https://blog.csdn.net/u012739527/article/details/124705821

4 写在最后

由于本文写作仓促,难免有一些不当之处,请各位读者多多包涵,如有错误之处,还望各位批评指正,本人感激不尽。
———————————————————————————————————————————
文章修改于2022年11月21日

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Fast-DDS是一个高性能的、基于数据发布-订阅模型的通信协议。它提供了丰富的QoS(服务质量)策略以及灵活的路由机制,以满足不同场景下的通信需求。 其中,QoS策略是指在数据传输的过程中,可以通过一定的配置方式来控制数据传输的质量、可靠性、延时等因素。Fast-DDS中提供了多种QoS策略,包括消息传输的可靠性、数据的存储方式、订阅者优先级等。 在Fast-DDS中,消息传输的可靠性可以通过以下几种QoS策略来控制: 1. RELIABILITY,即可靠性:用于控制消息的可靠性,包括发布者和订阅者之间的ack确认机制,以及网络连接中的重传机制。 2. DURABILITY,即持久性:用于控制消息的持久化方式,包括将消息写入本地磁盘或将消息存储在内存中。 3. HISTORY,即历史消息:用于控制订阅者在订阅之前是否可以获取历史消息,以及历史消息保存的方式(内存中、磁盘中、或通过文件传输)。 除了上述QoS策略,Fast-DDS还提供了很多其他的QoS选项,如数据传输的优先级、最大传输延迟、数据分发的方式等等,以满足不同的通信场景需求。 总体而言,Fast-DDS的QoS策略提供了丰富的选项和灵活的配置方式,能够帮助开发人员实现高性能、可靠的数据传输。 ### 回答2: Fast-DDS是一种高性能的DDS实现,可以用于构建实时和分布式系统。Fast-DDS支持多种QoS策略,这些策略允许用户在系统性能和资源利用率之间做出权衡。以下是Fast-DDS的QoS策略的几个关键点: 1. 可靠性:Fast-DDS支持可靠和非可靠的通信,通过配置可靠性参数,可以控制数据重传和丢失时间等方面的行为。 2. 带宽控制:Fast-DDS支持带宽限制,通过配置带宽参数,可以限制系统的带宽使用,从而避免因过度使用带宽导致的卡顿和延迟。 3. 时间同步:Fast-DDS支持时间同步,通过配置时间同步参数,可以在系统中确立一个统一的时间基准,从而避免因时间差异而导致的不一致性。 4. 优先级:Fast-DDS支持消息优先级,通过配置优先级参数,可以确保重要消息的优先传输,从而提高系统的响应能力。 5. QoS Inheritance: Fast-DDS支持QoS继承,它允许用户在不同级别的实体之间继承QoS属性。例如,可将主题级别的QoS继承到订阅者级别,从而确保所有订阅者都使用同一的QoS策略。 综上所述,Fast-DDS的QoS策略提供了一些非常有用的功能,可以帮助用户在不同的反应性和资源利用率需求之间做出权衡,从而优化系统的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值