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