【FastDDS 学习笔记】Fast-DDS-Gen安装记录

本文档介绍了在Ubuntu22系统上安装FastDDS-Gen的完整过程,包括安装前的Java和Gradle准备,解决gitclone分支找不到问题,以及编译、安装和验证环境变量设置的步骤。通过添加'--recursive'参数成功解决gitclone问题,并展示了fastddsgen命令的正确使用,生成了对应的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
参赛话题:自动驾驶技术学习记录
话题描述:自动驾驶是当前最火热的技术之一,吸引了无数的开发者与学习者融入其中。然而,自动驾驶技术是系统硬件平台与人工智能、物联网、大数据、云计算等新一代信息技术深度融合的产物,具有知识新、内容杂、难度深、缺少系统教程等特点,让许多开发者眼花缭乱。
本话题通过记录分享自动驾驶相关技术,为大家提供相互学习与交流的平台。话题分享与讨论的技术点包括不限于:自动驾驶算法、自动驾驶系统基础架构、智能驾驶交互技术、虚拟仿真、自动化测试、无人系统与车辆平台、自动驾驶计算平台与传感器等。

目录

第一章:【FastDDS 学习笔记】Ubuntu22上安装fastDDS环境
第二章:【FastDDS 学习笔记】HelloWorld示例程序编译和运行
第三章:【FastDDS 学习笔记】Fast-DDS-Gen安装记录

前言

前两天在Ubuntu22系统上,安装Fast-DDS-Gen失败,今天再来研究下原因。

不知道Fast-DDS是什么的宝宝们,可以看一下第一章了解下。

安装前准备

因为Fast-DDS-Gen是基于Java的,所以这里首先要安装下JavaGradle.

Gradle是一个开源自动编译工具。

这里自行百度安装,就不再叙述了。

编译和安装Fast-DDS-Gen

主要命令如下:

git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git
cd Fast-DDS-Gen
gradle assemble

前两天遇到的问题就是一直会提示找不到ad28baf822a40f1aa595b613a6866c91c6051bdd分支,那天我专门去GitHub上看了下,确实没找到。

今天看了下官网的文档传送门,发现需要添加一个--recursive命令。

--recursive命令的作用递归,不仅会git clone当前项⽬中的代码,也会clone项⽬中⼦项⽬的代码。

执行后的效果:
在这里插入图片描述

可以看到代码正常被下载了。

之后就是编译即可。

执行效果:

在这里插入图片描述

添加环境变量

编译完成后,还需要最后一步就可以使用了,就是添加环境变量:

export PATH=~/Fast-DDS/Fast-DDS-Gen/scripts:$PATH

这里的路径是我本地的路径,大家需要修改成自己的。

如果是长久添加,执行命令:

···sh
echo ‘export PATH=~/Fast-DDS/Fast-DDS-Gen/scripts:$PATH’ >> ~/.bashrc
···

验证

这里就可以来验证下,是否安装成功。

我们将HelloWorld实例中的idl文件复制出来到一个空的文件夹中,然后执行命令:

fastddsgen HelloWorld.idl

执行效果如下:

在这里插入图片描述

可以看出生成了相应的代码。_

今天的分享就到这里。

CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f

在这里插入图片描述

<think>好的,用户遇到了在使用fast-dds-gen生成示例代码时出现fastrtps和fastdds混用的问题。我需要先理解这两个库的关系。Fast DDSFast RTPS的升级版,可能用户的项目中同时存在旧版和新版的引用,导致冲突。 首先,用户提到的fast-dds-gen是生成代码的工具,根据引用[1]和[2],生成工具需要正确配置环境变量和版本。可能需要检查生成工具的版本是否与Fast DDS的版本匹配,如果工具过旧,可能还在生成Fast RTPS的代码。 然后,查看用户提供的引用资料,引用[3]提到安装时需要设置PATH环境变量,确保生成脚本正确调用。如果环境变量没有更新,可能导致调用了旧版的生成脚本,从而混用代码。 另外,引用[4]提到服务发现的协议兼容性,可能新旧版本的协议有差异,导致生成代码时出现混用。需要确保生成时使用的IDL文件适配Fast DDS,而不是Fast RTPS。 可能的解决方案包括:升级fast-dds-gen到最新版本,确保生成器支持Fast DDS;检查生成命令的参数,是否有指定正确的前缀或命名空间;清理旧版残留文件,避免链接错误。此外,用户可能需要调整CMakeLists.txt中的依赖项,统一使用Fast DDS库,替换掉Fast RTPS的引用。</think>### 解决方案:解决`fast-dds-gen`生成代码时`fastrtps`与`fastdds`混用问题 #### 问题背景 `Fast DDS`(原名`Fast RTPS`)是DDS协议的C++实现库,其代码生成工具`fast-dds-gen`默认生成的代码可能包含旧版命名(如`fastrtps`命名空间或头文件),与新版的`fastdds`命名冲突,导致编译错误或功能异常[^4]。 --- #### 步骤1:检查工具版本兼容性 - **原因**:旧版`fast-dds-gen`可能默认生成`fastrtps`相关代码,需升级至支持`Fast DDS`的新版本。 - **操作**: 1. 更新`fast-dds-gen`至最新版本: ```bash cd Fast-DDS-Gen git pull origin main ./gradlew clean assemble ``` 2. 验证工具版本是否与`Fast DDS`库匹配(建议`Fast DDS >= 2.0.0`,`fast-dds-gen >= 1.0.0`)[^1][^3]。 --- #### 步骤2:指定生成代码的命名空间 - **原因**:生成代码时需显式指定使用`Fast DDS`的命名空间,避免默认的`fastrtps`残留。 - **操作**: 1. 在生成命令中添加`-typeros2`参数强制生成`Fast DDS`代码: ```bash fast-dds-gen -example CMake -typeros2 your_idl_file.idl ``` 2. 检查生成代码中的头文件引用是否为`#include <fastdds/...>`,而非`#include <fastrtps/...>`。 --- #### 步骤3:清理旧版依赖残留 - **原因**:系统中可能残留旧版`Fast RTPS`的安装文件,导致编译时混用。 - **操作**: 1. 卸载旧版库(如通过`apt`安装): ```bash sudo apt remove ros-${ROS_DISTRO}-fastrtps ``` 2. 在`CMakeLists.txt`中显式链接`Fast DDS`库: ```cmake find_package(fastrtps CONFIG REQUIRED) # 替换为find_package(fastdds CONFIG REQUIRED) ``` --- #### 步骤4:验证生成代码一致性 - **操作**: 1. 检查生成的C++代码中命名空间是否为`eprosima::fastdds`,而非`eprosima::fastrtps`。 2. 确保编译时使用的头文件路径指向`Fast DDS`安装目录(如`/usr/local/include/fastdds`)。 --- #### 示例:修正后的编译命令 ```bash # 生成代码 fast-dds-gen -typeros2 -example CMake HelloWorld.idl # 编译时指定Fast DDS路径 cd HelloWorld/build cmake -DCMAKE_PREFIX_PATH=/path/to/fastdds/install .. make ``` --- #### 相关问题 1. 如何将旧版`Fast RTPS`项目迁移到`Fast DDS`? 2. `fast-dds-gen`生成代码时如何自定义命名空间? 3. `Fast DDS`与`Fast RTPS`在协议兼容性上有哪些差异?[^4] [^1]: Fast-DDS-Gen代码生成工具指南 [^2]: fast-dds-gen下载编译步骤 : Fast-DDS-Gen安装与环境变量配置 : Fast DDS服务发现协议与兼容性说明
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_李小白

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值