我想出了一个在我的 Raspberry Pi 4 和 Windows 主机之间建立连接的想法。我利用 MQTT 协议成功地做到了,但对数据分发服务概念 (DDS) 产生了兴趣。我的 Pi 需要将捕获的图像(发布)作为字节数组发送到 Windows 机器(订阅者)。为了原型设计和测试目的,如何轻松地做到这一点?我在同一台机器上执行此操作没有问题,但无法围绕同一 LAN 网络上的节点之间的连接,我确信 DDS 支持 TCP 和 UDP。是否只有一个配置文件,我必须为两个应用程序放置第二台机器的 IP 地址,仅此而已?我想为 Python 使用 RTI 连接器,它可以单独用于两个通信的设备吗?对不起,蹩脚的问题,但我只想尽快测试 DDS 实用程序。任何人都可以指出一些有助于解决我的案件的来源吗?我看过一些文章,但没有一个对我来说很清楚。
2 回答
如果您的数据类型是一个固定大小的数组,那么您应该使用 octet[] 的 IDL 基本数据类型。如果它是可变大小的,那么你需要使用序列,要么
struct MyImageType {
octet imageFrame[1048576];
};
或者
struct MyImageType {
sequence<octet, 1048576> imageFrame;
};
在 IDL 文件中使用上述内容然后使用 rtiddsgen 将比在文件中键入等效的 XML 定义更容易。
您正在寻找的大部分答案都可以在 community.rti.com 上找到。
但从根本上说,您应该能够轻松地在您的 Raspberry Pi 和 Windows 机器之间运行 DDS...并且 helloworld 应该无需配置即可运行(Connext DDS 默认使用多播进行发现)...只要您禁用了Linux 上的防火墙(假设您在 Raspberry Pi 上运行 Linux)和 Windows(如果网络类型配置为私有,则通常不需要)。
如果您想使用 Python 作为编程语言,您可以使用新的 Python API for RTI Connext DDS,
或者正如您提到的,RTI Connector for Python(尽管由于 RTI 发布了 Python API,这将被弃用)。
Python API for Connext 和 RTI 连接器(带有文档)的发行版中都提供了示例。
您需要对 DDS 有所了解才能修改示例以使用您自己的数据类型。基本上,这意味着在 IDL 中定义您的数据类型,然后使用 rtiddsgen 从 IDL 生成数据类型的 XML 定义……或者您可以直接在 XML 中创建数据类型定义。
[我尝试在 github/rti.com/community.rti.com 上添加一堆文档、示例等链接,但它被标记为垃圾邮件]