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

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
DDS(Data Distribution Service)是一种用于数据传输和通信的中间件协议,它可以在分布式系统中实现高效的数据传输和通信。在Python中,可以使用OpenDDS库来实现DDS服务。 以下是Python实现DDS服务的基本步骤: 1. 下载和安装OpenDDS库,并配置环境变量。 2. 创建IDL文件,定义数据类型和接口。例如: ``` module MyModule { struct MyData { long id; string name; }; interface MyInterface { void sendData(in MyData data); }; }; ``` 3. 使用命令行工具生成Python代码。例如: ``` $ cd <path-to-idl-file> $ $DDS_ROOT/bin/idlpp -l python MyModule.idl ``` 4. 编写Python代码实现接口和数据类型。例如: ```python from mymodule_idl import MyData, MyInterface from OpenDDS import DCPS class MyInterface_i(DCPS.DataWriterRemote): def sendData(self, data): print("Received data: id={}, name={}".format(data.id, data.name)) participant = DCPS.DomainParticipantFactory.get_instance().create_participant(4, OpenDDS.DCPS.DEFAULT_DOMAIN_ID_DEFAULT, OpenDDS.DCPS.TheParticipantFactory.get_instance().get_qos()) topic_qos = OpenDDS.DCPS.TopicQos() participant.get_default_topic_qos(topic_qos) topic = participant.create_topic("MyTopic", "MyModule::MyData", topic_qos) publisher_qos = OpenDDS.DCPS.PublisherQos() participant.get_default_publisher_qos(publisher_qos) publisher = participant.create_publisher(publisher_qos) data_writer_qos = OpenDDS.DCPS.DataWriterQos() publisher.get_default_datawriter_qos(data_writer_qos) data_writer = publisher.create_datawriter(topic, data_writer_qos) my_interface = MyInterface_i() data_writer.set_listener(my_interface, OpenDDS.DCPS.DataWriterListener.NEW_INSTANCE) for i in range(1, 10): data = MyData() data.id = i data.name = "Data{}".format(i) data_writer.write(data, None) ``` 5. 运行Python代码,启动DDS服务。例如: ``` $ python myinterface.py ``` 这样就可以通过DDS协议在Python实现数据传输和通信了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

01_

感谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值