摘 要:為解決機器人遙操作的通信問題,本文設計了一種可以實現遠程客戶機與本地服務器相互收發信息的網絡通信平臺。該平臺基于TCP/IP協議,運用Windows Sockets套接字在VC++6.0環境下編寫。與以往TCP通信的命令行輸出不同,該網絡通信平臺實現了界面輸出。實驗結果表明,該網絡通信平臺能夠準確方便地實現服務器和客戶端之間實時收發文件和互相通信,滿足機器人遙操作的通訊任務。
關鍵詞:TCP通信;遠程客戶機;套接字;遙操作
[b][align=center]The Design of Robot Network Communication Platform
Pan Bin,Jiang Zhijian,Zhang Lei,Wang Chengcheng[/align][/b]
Abstract: To solve the communication problem of robot teleoperation , a new kind of network communication platform which realizes receiving and sending messages mutually between the remote client and local server is presented in this paper.The platform is discussed using Windows Sockets based on TCP/IP protocol on the condition of VC++6.0.It achieved the interface output different from former TCP correspondence‘s command-line output.The results of the experiment show that the platform realized sending and receiving the messages and documents in real-time between local server and remote client.So the platform can meet the communication needs for robot teleoperation better.
Key words: TCP communication;Remote Client;Socket;Teleoperation
目前,機器人遙操作系統已成為機器人研究的一個熱點。在機器人遙操作的過程中,本地服務器與遠程客戶機之間的網絡通信問題是遙操作的關鍵環節。針對機器人遙操作的通信問題,本文設計了一種在Windows XP環境下,運用Socket實現的基于TCP/IP協議的網絡通信平臺。
1 Socket編程原理
1.1 Socket簡介
Socket(套接字)最初是加州大學伯克利分校為UNIX操作系統開發的網絡通信接口。后來Intel, Microsoft, Sun等網絡廠商將其移植到Windows中,形成了Windows Sockets規范,它定義了一套Windows環境下網絡編程的接口。利用Windows Socket開發的網絡通信程序的層次結構如圖1示。
[align=center]

圖1 Sockets編程的結構[/align]
根據傳輸數據類型的不同,Sockets可分為流式套接字(SOCK_STREAM)和數據報式套接字(SOCK_DGRAM)兩類。流式套接字提供面向連接、可靠的數據傳輸服務,數據無差錯、無重復的發送,且按發送順序接受。流式套接字實際上是基于TCP協議實現的。數據報式套接字提供無連接服務。數據報以獨立包形式發送,不提供無錯保證,數據可能丟失或重復,并且接受順序混亂。數據報套接字實際上是基于UDP協議實現的。
按照套接字在客戶機/服務器(Client/ Server)模式中的功能可將其分為兩類:
監聽套接字:該套接字位于服務器端,它的主要功能就是對特定的端口進行不斷的監聽,當檢測到有連接請求時,接受申請,并構造一個新的客戶端套接字,與連接申請方的客戶端套接字建立連接,從而為雙方的通信做好準備。
客戶端套接字:該套接字是用來進行網絡通信的實體。它位于客戶機和服務器上,服務器必須維持它為之服務的客戶一樣數量的這種套接字,形成一個以服務器為中心的星型結構。
1.2 TCP網絡通信平臺設計步驟
基于Internet的機器人遙操作技術是現代網絡技術和機器人控制技術的結合,Internet使用網際分組交換協議TCP/IP作為通信規范,它包括TCP, UDP和ICMP等協議。其中TCP協議是面向連接的協議,要求在數據交換以前必須與通信方建立一條連接、它具有分段和重組功能,能夠確保數據可靠、有序地傳輸。
TCP通信整個過程可以分成三個階段:連接建立、數據傳輸和拆除連接。
(1)連接建立階段:首先服務器中的監聽套接字對斷口進行偵聽,客戶端的套接字向服務器端的特定斷口提出連接申請。
(2)通信階段:這是整個過程的核心部分,任務就是負責數據的收發。
(3)拆除連接階段:在傳完數據之后,關閉套接字,釋放所分配的資源。
使用Soeket編寫TCP通信程序的主要步驟如下:
1) 構造 Soeket對象 ;
2) 使用該對象構造基本的Socket句柄。由于遙操作的數據通信要求可靠,準確,故采用TCP協議,套接字使用流式套接字;
3) 建立客戶機CSocket,調用Connect()建立與服務器套接字的連接.服務器調用Listen()監聽請求連接情況,并在收到客戶端請求后調用Accept()接收客戶端連接.
4) 構造CSocketFile對象,并使用CSocket對象與之關聯.
5) 構造CArchive對象 ,用于接受和發送數據。使用CArchive對象來進行客戶端與服務器端之間的Socket通信
6) 通信結束,關閉套接字,退出程序。
2 TCP網絡通信平臺程序的實現
本程序是為機器人遙操作的通信所搭建的一個網絡通信平臺,該平臺實現了本地服務器與遠程客戶機之間的數據網絡通信,系統結構圖如圖2所示。
[align=center]

圖2 遙操作系統結構圖[/align]
本文的程序設計是基于TCP/IP協議的,使用客戶機/服務器模式。本程序設計調試的網絡環境為采用Windows XP中的 TCP/IP協議配置的局域網,服務器的的IP地址是“192.168.0.104”,通信端口可任意設置,本文設為4231。
2.1 通信平臺程序的實現流程
服務器是控制機器人的主控制臺,通過服務器可以控制機器人的爬行、檢測以及轉向等。本文中服務器端程序,主要是建立一個能夠讓客戶端連接的端口,并通過監聽,與需要連接的客戶端建立連接,并與其進行數據信息通信,將機器人傳感器獲取的機器人的狀態信息發送給客戶端來實現遠程信號處理,并接收來自的客戶端的控制信息以實現對機器人的操控。
客戶機端是對機器人進行遠程控制的計算機,它通過請求與服務器建立連接之后,將控制信息傳送給服務器端,服務器端根據控制信息實現對機器人控制。而且,客戶機端還能夠接受服務器傳送過來的機器人狀態信息,以便對機器人獲取的信息進行處理。本文的客戶機端程序通過Connect()與服務器建立連接,來達到相互通信的目的。
網絡通信平臺實現的流程圖如圖3所示。服務器端程序是通信平臺的核心部分,本文的服務器端程序不僅可以實現與一個遠程客戶機端的單對單通信,而且可以與多個客戶機端同時進行通信。客戶機端程序相對于服務器端程序比較簡單,沒有了服務器端程序的監聽程序和接受連接程序,但是比服務器端增加了連接程序。連接程序和監聽程序是區別于服務器端程序和客戶機端程序的標志。
[align=center]

圖3 通信平臺流程圖[/align]
(1) 監聽程序
Listen()(監聽程序)是服務器程序區別于客戶機端程序最主要的標志,服務器端通過監聽程序來監聽有沒有客戶機端請求連接。當有客戶機提出連接請求,通過監聽程序將連接請求發至服務器來建立兩者之間的連接,服務器與客戶機才能實現通信。監聽程序還是區別使用了流式套接字或數據報式套接字的標志。監聽程序的存在為網絡通信提供了可靠、無差錯的連接。
(2)連接程序
Connect()(連接程序)是客戶端中所獨有的程序,是向服務器端發送連接請求所編寫的。連接程序在收到客戶機端需要連接服務器的請求之后,就會發送所需要連接的服務器IP地址和服務器端口。發送之后會等待連接消息的反饋消息,來確認客戶機端是否連接成功。
(3) 接受連接程序
Accept()(接收連接程序)是客戶機端對應于客戶機端連接程序而編寫的,該程序可以實現對連接程序的反饋。當程序接收到客戶機端程序發來的連接請求時,會對客戶機反饋回連接是否成功的消息,而且該程序可以獲取要求連接的客戶機端的IP地址和端口,以便服務器端可以記錄客戶機端的連接狀態信息。
(4)發送消息程序
Send()(發送消息程序)可以實現控制信息實時地從遠程操作者一方發向服務器,而機器人的狀態信息又通過各種傳感器(如視覺傳感器、力覺傳感器等)獲取后,由服務器反饋給遠程客戶端。
(5)接收消息程序
Receive()(接收消息程序)可以實現客戶機或者服務器端接收來自對方發送的數據消息。該程序在服務器和客戶機中都是一致的,配合發送消息程序實現了客戶機和服務器之間的數據消息通信。
2.2 實驗結果
本文的網絡通信平臺運行之后的界面輸出圖像如圖4所示。
圖4(a)顯示的是服務器端運行之后的界面。服務器端是該程序的核心端,所有客戶端的數據都將傳輸到服務器端,客戶端之間通信需要通過服務器端進行中轉。而本文所設計的程序中的服務器端不僅可以實現以廣播的形式向所有連接到該服務器的客戶端發送信息,還可以以單對單通信的方式向單個的客戶端進行通信。在圖4(a)中就顯示了服務器端分別利用這兩種方式進行了通信。點擊界面中的發送按鈕就采取廣播式發送信息,而點擊界面中的1和2兩個按鈕則是對特定客戶端發送數據。
本文設計的程序可以支持多個不同的
[align=center]

(a)

(b)

(c)[/align]
圖4 通信平臺運行界面
客戶端和服務器進行連接并通信。圖4(b)顯示的是IP為“192.168.0.106”的客戶端和服務器建立連接之后的通信,而圖4(c)則是IP為“192.168.0.110”的客戶端和服務器通信的界面。
3 實驗性能分析
1.時延和數據的丟失問題
機器人遙操作要求數據傳輸要具備可靠性和次序性,TCP協議提供了可靠而有序的傳輸,基于這一特性,可以在傳輸過程中使用超時重傳、分段、重組等檢錯糾錯策略,通過這些檢錯糾錯策略可以保證在數據傳輸過程中的可靠性和有序性,可以有效的防止數據的丟失。
機器人遠端遙操作控制的采用并不意味著實時控制作用被上移到網絡,實時控制依然由現場的控制單元來完成,而網絡遙操作更關注的是對現場信息的監視和管理以及對機器人的非實時控制,所以TCP通信在傳輸過程中存在的時延問題也就顯得影響不大。
2.數據共享問題及其解決方案
由于本文中程序是多任務多線程的,當多個客戶端同時連接到服務器時,多任務、多線程就極易造成數據共享問題。數據共享問題可以解釋如下:假定有多個函數(或者ISR、任務)共享一個變量,如果在某一時刻存在對該變量的數值的操作,并且在對其施加操作的的過程中,僅有部分操作完成,還有一部分沒有完成,若在此時產生一個中斷,如果此時還有另一個函數也在共享該變量,且前面的操作已經完成,該變量的數值可能與預期的不同。因此,當一個函數與另一個函數共享某變量時,所調用的ISR或者另一個函數都有可能改變此變量,是變量的數值發生變化,在返回時此變量的新數值將從堆棧轉載到四個寄存器中,未完成的操作將按照寄存器中的新數值執行,程序就會發生錯誤。
在本文中,利用了以下措施消除了程序中由共享數據問題所導致的錯誤。
1) 對于從中斷返回的變量,在聲明中使用了volatile。此聲明可以警告編譯器,這些變量是可更改的。
2)在中斷之前將完全執行的部分中對原子指令使用可再生函數,此部分叫臨界段。
3) 將共享的變量放入循環隊列中。需要使用該變量數值的函數總是從隊列的前端將其刪除。而另一些寫入該變量的數值的函數總是從隊列的末端進行操作。
4)在臨界段開始執行之前通過使用信號量來關閉中斷,在其完成之時打開中斷。
4 結論
本文設計了一種基于TCP協議的網絡通信平臺,通過該平臺可以實現遠程客戶機與本地服務器之間的信息通信,而且保證了數據傳輸的可靠性和次序性,對機器人的遙操作提供了可靠的網絡通信條件。
網絡通信平臺的建立,擴大了對機器人操作的遠程化距離,而且該平臺具有架構容易,低成本,維護便利等優點,對機器人遙操作領域的技術進步將會起到幫助作用。
參考文獻
[1] Brady K,Tzyh—Jong. Intemet—based remote teleoperation[A].In International Conference on Robotics and Automation[C].Leuven Belgium,1998,65.
[2] 陳寧,王慶鵬,談大龍.基于 Internet的機器人遙操作實驗平臺的設計與實現[J].機器人.2000,22(7):211-214.
[3] 郭建光,符秀輝.網絡機器人遙操作實驗研究[J].儀器儀表學報.2005,25(8):477-478.
[4] 扶忠踐.基于 MFC的網絡通信程序設計[J].湖南:長沙電力學院學報.1999,14(4):325-327.