基于python的dds通信实现

DDS定义:Data Distribution Service 数据分发服务,是新一代分布式实时通信中间件协议,采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。

最强大的优势:支持跨平台,跨语言进行实时通信,这无疑让dds成为主流。

由于最近了解到这个东西,便基于python语言写了一个通信示例。下面我将介绍具体使用,源码压缩包可以后台私信,免费开源共享。

一.介绍

首先了解dds通信,需要俩个主体,发布者与订阅者,这也是强大之处,一个发布者可以被多个订阅者订阅(接收信息),发布者通过发布不同的主题信息,订阅需要的主题信息完成二者的通信。

二.具体调用

1.虚拟机环境(基于ros2的使用)

打开虚拟机,将minimal_publisher(发布者),minimal_subscriber(订阅者)压缩包解压

我的虚拟机中安装了vscode,因此后面操作会使用这个编译器,其他编译基本都是大同小异。

Dds通信流程:

1.建立ros2文件夹

2.建立src文件夹

3.将发布者和订阅者解压到src文件夹

4.在src文件夹页面打开俩个终端随便一个输入 colcon build 回车  等待会生成三个新的文件夹

5.在刚刚输入的终端下 输入

source install/setup.bash 回车

继续输入 ros2 run examples_rclpy_minimal_publisher publisher_member_function   这个就是发布者 回车后就会显示传输的数据了

6.在另一个终端输入 source install/setup.bash 回车

继续输入 ros2 run examples_rclpy_minimal_subscriber  回车 这是订阅者 ,回车后会显示收到的数据

若测试发布者发布不同指令时需在修改发布者代码,直接使用vscode 打开 minimal_publisher 文件夹,修改 publisher_member_function.py  中 msg.data 的列表内容,即测试发布不同信息指令的情况。

2.windows 环境

将minimal_publisher(发布者),minimal_subscriber(订阅者)压缩包解压

普通环境下,配置相关库函数即可。(pycharm编译器)

发布者:

打开压缩包中  examples_rclpy_minimal_publisher文件夹下的publisher_member_function.py文件,具体内容下面附图,已增加代码注释。

注:发布者名称,与主题名均可自定义修改,但修改后,订阅者中主题名需要同步更改,否则收不到信息

发布信息可以自定义,下面打印函数可自行选择是否需要,(推荐使用方便调试,但是修改信息时注意是字符数据还是数字等,需要更换通配符)

总结:这个发布者运行后,会计数一直打印传输的数据(也就是模拟一直发布信息),如果需要更改可以修改get_logger()方法。

订阅者

打开压缩包中 examples_rclpy_minimal_subscriber文件夹下的sbuscriberer_member_function.py文件,具体内容下面附图,已增加代码注释。

同发布者,订阅者名可自定义,主题名需要一致,下面get_logger()方法自行选择是否使用或者修改

三.自定义函数嵌入

简单方法,将自定义功能的整个工程文件加入到examples_rclpy_minimal_subscriber文件夹,

打码部分为自定义功能所需要的文件,直接加入就可以,可以增加一个测试文件检验自定义功能能否实现。

  • 如何与订阅者协同调用及使用收到的信息

前提条件,将自定义功能最好完整封成一个函数接口,调用方便。

在subscriber_member_function.py中  listener_callback方法下直接调用接口就OK  msg.data为接收到的信息。

如果没有进行封装,可以在minimal_subscriber = MinimalSubscriber()  实例化订阅者后,增加自定义功能的运行逻辑(不推荐,可以会遇到程序卡退情况,如果你的逻辑运行比较耗时的话)

总结:订阅者与发布者均在相关的定义类中进行修改默认数据就可(只是用来测试的话,如果实际情况下,可能需要在实例化对象时增加相关的赋值操作)

由于dds的强大通信能力,俨然成为了主流通信方式,大家可以了解使用以下,如果需要源码可以评论或者私信,我会分享,免费开源!如果可以的话,三连一下叭!!!

相关推荐

  1. Python基于socket函数TCP通信

    2024-03-19 17:30:04       41 阅读
  2. Python实现WebSocket通信

    2024-03-19 17:30:04       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-19 17:30:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-19 17:30:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-19 17:30:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-19 17:30:04       18 阅读

热门阅读

  1. C# 通信断线重连问题说明与示例

    2024-03-19 17:30:04       17 阅读
  2. Springboot AOP

    2024-03-19 17:30:04       21 阅读
  3. 在MATLAB中进行并行计算和GPU加速?

    2024-03-19 17:30:04       21 阅读
  4. fedora RTL8821CE 无线网卡驱动安装

    2024-03-19 17:30:04       19 阅读
  5. 人工智能入门学习笔记2:人工智能学习资料

    2024-03-19 17:30:04       22 阅读
  6. ffmpeg视频剪辑

    2024-03-19 17:30:04       14 阅读