1

我有一个通过无线电与 ROS 节点通信的 DDS 系统(OMG DDS)。接收到的信息是一个具有速度、状态、经度、纬度等的结构。这很好用,我的 DDS 客户端可以毫无问题地打印通过无线电从节点传输的信息。现在,我有一个用 Qt 编写的 GUI 应用程序,它创建模型并将它们放在预定义的地图上。这些模型已经定义了集合信息函数,当触发它时会更新地图以提供其接收到的信息的平滑可视化。

现在问题来了,我不知道如何让 GUI 应用程序与我的 DDS 客户端通信。我宁愿不将这两者交织在一起,因为仅仅让 DDS-client 和 sender 工作并使用 ROS 编译,我已经遇到了很多麻烦。我虽然有一个单独的队列系统,它可以包含在 DDS 客户端和 GUI 应用程序中,但我不知道这是否可行。我也考虑过编写一个 SQL 数据库,然后推送新数据,并在我的 GUI 应用程序中检测到新数据时提取新数据。某种触发拉取函数的 on_data_available 函数。我听说最后一个是个坏主意,因为我只使用一组不断更新的数据(模型代表一个 USV),然后数据库被认为是矫枉过正,但我​​很想在这里获得输入.

如果这不是足够的信息,我很抱歉,由于不同的原因,我不能真正提供代码示例。如果有人有任何意见,请大声喊出来,很想听到他们的声音。如果我不够具体,我会尽可能地重写它。

4

1 回答 1

0

我不知道如何让 GUI 应用程序与我的 DDS 客户端通信

您的问题并非特定于 DDS 或您的 GUI 应用程序——您本质上要求一种简单方便的进程间通信 (IPC)机制。正如您在点击链接时所看到的那样,有很多不同的选项。

鉴于您已经在 DDS 中获得了数据以及相关的类型定义,我怀疑使用 DDS 执行此任务仍然是最简单的方法。您可以将其设置为通过共享内存或本地环回进行通信。DDS 将在后台进行所有发现和通信,包括(跨语言)反序列化。如果您选择不同的机制,您最终可能会自己做更多的工作。

作为替代方案,一些 DDS 实现(商业上)支持与 SQL 数据库的本机集成。这些将自省 DDS 数据定义并为您创建所有必需的表。来自 DDS 的更新会自动转发到数据库,反之亦然。您可以从该数据库中获取您的 GUI。

于 2015-07-09T22:37:10.350 回答