3

我有一台运行 c++ 程序来控制机器人的计算机和另一台运行计算机视觉系统(也用 c++ 编写)的计算机。我希望这两个程序能够相互交谈。通信不必很复杂,我只需要机器人计算机能够告诉视觉计算机试验何时开始和结束(何时开始和停止数据收集序列)。你们中的任何人对如何解决这个问题有什么建议吗?电脑之间的rs232通讯?某种网络解决方案?烟火信号?欢迎大家提出意见。先感谢您

(编辑)如果您认为上述陈述含糊不清:

我需要将二进制(去/不去)信号从一台计算机传递到另一台计算机。不幸的是,我无法更具体地说明这会是什么样子,因为(显然)我不知道什么是可用的。两台计算机都在网络上,并且两台计算机都在运行 Windows。目标是将计算机视觉系统收集的数据与机器人执行的动作同步。通信确实需要足够快,以至于不会减慢机器人或计算机视觉程序的速度。一个“好的”解决方案将是 1)易于实施 2)快速。我对网络了解不多,我正在寻找一个开始寻找的地方。

再次感谢您的帮助

4

10 回答 10

4

您可能会使用简单的 UDP 协议 - 优点是,如果您了解 RS232 上简单数据包协议的概念,您会发现很容易将这些知识转移到通过 UDP 发送数据包。

如果您想要两台 PC 之间的可靠(如系统的其他部分会担心错误和重试)字节流,那么 TCP/IP 的使用并不比 UDP 复杂多少。

UDP 和 TCP 都通过“套接字”访问。恐怕你会发现,从 C++ 开始,有很多乏味的样板文件才能让它工作,但是周围有很多很多例子。

于 2010-07-29T20:08:46.337 回答
2

如果它们是网络连接的,您可以只使用套接字。

于 2010-07-29T20:07:43.920 回答
2

最好的选择是使用网络通信。解决这个问题的最简单方法应该是查看 Qt 中的网络示例。

您基本上将创建一个客户端和一个服务器应用程序。您决定客户端在看到来自服务器的特定消息时会做什么。就这样。Qt 应该负责其余的事情。

其他答案表明 TCP/IP、UDP、RS232、...当您使用 QtNetwork 模块时,所有这些都只是选项。我假设既然你问了你的问题,你就不知道它们之间的区别。所以最安全的选择是使用最高级别的(免费)库,因此建议研究 Qt。

另一种选择是使用 Boost.Asio。我更喜欢 Qt 解决方案,因为他们的 API 更好。

于 2010-07-29T20:11:22.433 回答
1

对于网络套接字来说,这听起来相当不错。如果您的两台机器都在 Windows 上,您甚至可以使用命名管道。

于 2010-07-29T20:08:47.983 回答
0

RS232 是一个易于编程的选项,但是现代 PC 往往没有 RS232 端口。您可能需要获取 USB-RS232 适配器或安装 PCI 卡。

RS232 的另一个问题是您需要担心额外的电线可能会造成麻烦。此外,除非您购买一些笨重的 RS232 中继器或蓝牙连接器等,否则 RS232 电缆的长度可能会受到限制(5-15m)。

最重要的是,您还在项目中添加了一项可能会出错并花费您部署和调试时间的项目。

IMO,一个优雅的工程解决方案是利用您拥有的硬件并使用 TCP/IP 套接字进行通信。

网络上充斥着在服务器和客户端之间传递消息的示例:

如果您使用的是 Linux: http ://www.linuxhowtos.org/C_C++/socket.htm

使用 Windows: http: //www.adp-gmbh.ch/win/misc/sockets.html

于 2010-09-01T15:00:51.673 回答
0

对于 Windows,您需要将 COM n端口作为文件打开,以通过串行端口 [1] 进行通信。我现在无法访问我的代码,我可以在回家时查看它。

RS232 很简单,我喜欢它。但是,它慢。您需要在设计中考虑到这一点。

[1] 对于 C++。

于 2010-07-29T20:08:34.880 回答
0

在您的情况下,这可能有点矫枉过正,但如果我站在您的立场上,我可能会使用 HTTP 协议来实现它。视觉计算机将运行 HTTP 服务器,而机器人计算机将使用 POST 请求传达状态变化。Poco C++ Net 库为您提供了执行此操作所需的工具。

于 2010-07-29T22:07:26.637 回答
0

我会使用 TCP/IP 套接字进行通信。TCP 保证数据会成功。因此,您需要做的就是解析数据。

于 2010-07-29T22:46:18.390 回答
0

我也可能会查看0MQ之类的东西,以使连接更加健壮。无论传输方式如何,它都会传输和重组消息,并在暂时失去连接的情况下处理缓冲。

但底线是我会使用 TCP/IP,但根据机器人的性质,您可能需要一个比 TCP 套接字更健壮的连接系统。UDP 很好,因为它是无连接的——如果机器人暂时超出范围/视线/等,您将不必重建套接字和上下文。

于 2010-09-01T15:19:22.707 回答
0

大多数现代计算机都具有以太网功能,因此请给自己买一个便宜的集线器或交换机并查看网络 API。通常有一些相当简单的套接字东西。这样做的一个好处是,如果您想在以后提高沟通能力,例如让您的视觉软件为您的机器人提供指令和指导,那么您已经建立了基础。

或者,设置您的视觉程序,以便您可以通过按随机键来启动和停止它。使用时,将键盘放在机器人电脑光驱前,在机器人运行开始和结束时弹出。

于 2010-07-29T20:27:22.587 回答