2010-07-29 121 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是很好的,因爲它是無連接的 - 如果機器人暫時遠離範圍/視線等,則不必重新構建套接字和上下文。