fast-dds与ros2通讯、fast-rtps与ros2通讯

本文档详细介绍了如何在Linux ARM系统上使用FAST-DDS与ROS2进行通信。首先,介绍了安装ROS2的步骤,然后阐述了如何在ROS2中创建和编译消息接口。接着,重点讲解了如何利用fast-dds-gen工具生成FAST-DDS的通讯API,并配置CMakeLists以支持ARM64架构。最后,调整节点名称以符合ROS2的要求,并成功实现了跨平台的通信测试。

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

背景:在同一网段下,arm-linux系统跑fast-dds运行的程序、电脑端虚拟机上运行ros2监控节点
通信前提环境需要

  1. ubtun操作系统下安装ros2:这采用小鱼的一行代码安装方式
wget http://fishros.com/install -O fishros &&  bash fishros
  1. 由于与ROS2匹配的DDS是RTPS标准的,是DDS的标准中的一个子集(可以直接使用FAST-DDS,代码存在细微差别,需要修改),这直接用DDS子集库FAST-RTPS库,与FAST-DDS编译方式完全一样,最后查看发现与FAST-DDS最后生成安装的文件存在不同。FAST-RPTS的编译参考文章FAST-DDS交叉编译
  2. idl文件生成API工具编译,参考文章fast-dds-gen编译
    通讯实现步骤一:ROS需要

1.List item创建工作空间,创建自己的工作节点

mkdir dev_ws/src & cd /dev/src
ros2 pkg create --build-type ament_cmake helloworldtopic
cd helloworldtopic
gedit CMakeLists.txt

2.修改CMake添加
在这里插入图片描述

find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME} “msg/HelloWorld.msg” )

gedit package.xml

修改xml文件,添加
在这里插入图片描述

<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>

mkdir msg
gedit msg/HelloWorld.msg

3.创建消息结构
在这里插入图片描述

int32 index
string message

4.编译环境中的节点并安装到ros

cd ../..
colcon build --packages-select helloworldtopic
source ./install/setup.bash
ros2 interface show helloworldtopic/msg/HelloWorld

在这里插入图片描述
通讯实现步骤二:FAST-DDS需要
1.从创建的工作空间中取出idl文件,文件目录为:
/dev_ws/build/helloworldtopic/rosidl_adapter/helloworldtopic/msg
在这里插入图片描述
在这里插入图片描述
2.使用fast-dds-gen工具生成通讯c++API以及example

/home/forlinx/Templates/DDS/Fast-DDS-Gen/scripts/fastddsgen -typeros2 -example CMake HelloWorld.idl

生成如下文件:
在这里插入图片描述

  1. 修改CMakeLists.txt,添加FAST-RPTS、FAST-CDR等库的寻找路径
    在这里插入图片描述
    添加:路径为自己生成库的路径

#配置C++编译器
set(CMAKE_CXX_COMPILER /home/forlinx/Templates/project/public/Tool/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++)
#配置C编译器
set(CMAKE_C_COMPILER /home/forlinx/Templates/project/public/Tool/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc)

set(CMAKE_FIND_ROOT_PATH
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/Fast-CDR/build/build_arm64
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/Fast-RTPS/build/build_arm64
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/tinyxml2/build/build_arm64
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/foonathan_memory_vendor/build/build_arm64
# /home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/openssl/build_arm64
)

set(OPENSSL_ROOT_DIR
/home/forlinx/Templates/project/public/3rd_party/Fast-DDS-python/openssl/build_arm64)
4.修改topic节点名:ros2识别需要在节点名前加rt/
这只改了发布者。

gedit HelloWorldPublisher.cxx

在这里插入图片描述
5. 编译

mkdir build & cd build
cmake ..
make

在这里插入图片描述
6. 将执行文件拷贝到目标板执行
运行测试
1.保证板子与ubtun在同一网段
在这里插入图片描述
在这里插入图片描述

  1. 板子端运行发布者
 ./HelloWorld publisher

在这里插入图片描述

  1. ubtun通过ros2检测节点,接收打印消息
    在这里插入图片描述
    在这里插入图片描述
    4.至此通讯成功在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值