2010-07-29 131 views
2

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

(编辑)如果你觉得上面的说法是模糊的:

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

再次感谢您的帮助

+1

对于一个有用的答案太模糊了。 – 2010-07-29 20:09:33

+2

邦戈鼓(http://slashdot.org/article.pl?sid=03/09/27/175242)或载体鸽子(http://en.wikipedia.org/wiki/IP_over_Avian_Carriers)如何? – 2010-07-29 20:19:51

+0

如果这些计算机至少有1990年的日期,那么它们是不是已经有网络连接,并且它们还没有连接到网络上?如果是这样,那么您的C++开发人员是否已经知道这个问题的答案?如果您是有问题的C++开发人员,那么您最好阅读一些关于编写TCP/IP套接字客户端和服务器的书籍。 – 2010-07-29 20:48:43

回答

2

如果他们的网络连接,你可以只使用插座。

+0

谢谢,套接字看起来很有前途。以下是他对http://en.wikipedia.org/wiki/Berkeley_sockets感兴趣的情况 – NotNamedDwayne 2010-07-29 20:27:37

0

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

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

[1] C++。

4

您可以使用一个简单的UDP协议 - 的优点在于,如果你了解关于RS232简单的报文协议的概念,你会发现很容易,知识转移到通过UDP发送数据包。

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

UDP和TCP都通过'套接字'访问。恐怕你会发现从C++中获得这种工作有相当多乏味的样板,但是有很多很多的例子。

1

这听起来像是一个相当不错的网络套接字使用。如果你的机器都在Windows上,你甚至可以使用命名管道。

2

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

您基本上会创建一个客户端和一个服务器应用程序。您可以决定客户端在看到服务器发送的某条消息时的操作。就这样。 Qt应该照顾其余的东西。

其他的答案表明TCP/IP,UDP,RS232,...所有这些事情都只是选项,当您使用QtNetwork模块。我认为,既然你问你的问题,你不知道这些之间的差异。所以最安全的选择是使用最高级别(免费)的库,因此建议查看Qt。

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

0

大多数现代计算机具有以太网功能,所以让自己廉价的集线器或交换机,并期待在网络API。通常有一些相当简单的套接字。这样做的一个优点是,如果您想在以后增加沟通能力,例如让您的视觉软件为您的机器人提供指导和指导,则您已经设置了基本知识。

或者,建立你的眼光程序,所以你可以就击中随机密钥停止。当您要使用它时,请将键盘放在机器人计算机的CD驱动器前,然后在机器人运行的开始和结束时弹出。

0

这可能是矫枉过正您的情况,但如果我是你的话我会使用HTTP协议可能实现它。视觉计算机将运行HTTP服务器,机器人计算机将使用POST请求传达状态更改。 Poco C++ Net library为您提供执行此操作所需的设施。

0

我会使用TCP/IP套接字进行通信。 TCP保证数据可以做到。所以,你需要做的就是解析数据。

0

RS232是一个简单的编程选项,但现代PC不倾向于使用RS232端口。您可能需要获取USB-RS232适配器或安装PCI卡。

的另一个问题RS232是你有一个附加导线担心它可以是一个nusiance。除非您投资一些笨重的RS232转发器或蓝牙连接器等,否则RS232电缆的长度可能会受到限制(5-15米)。

除此之外,您还可以为项目添加一个项目错误并花费您的时间进行部署和调试。

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

该网站充斥着对通过服务器和客户端之间的消息的例子:

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

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

0

我也可以看的东西如0MQ,以使连接更健壮。无论传输是什么,它都会传输和重新组合消息,并在临时丢失连接的情况下处理缓冲。

但底线是,我将使用TCP/IP,但根据机器人的性质,你可能要稍微更强大的连接系统,比TCP套接字。 UDP是很好的,因为它是无连接的 - 如果机器人暂时远离范围/视线等,则不必重新构建套接字和上下文。

相关问题