譚花娣
(常州信息職業(yè)技術(shù)學(xué)院,江蘇 常州 213164)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)技術(shù)已逐漸滲透到各個(gè)領(lǐng)域,基于網(wǎng)絡(luò)的機(jī)器人控制就是利用網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程的機(jī)器人控制?;ヂ?lián)網(wǎng)的飛速發(fā)展進(jìn)一步促進(jìn)了網(wǎng)絡(luò)技術(shù)在機(jī)器人控制領(lǐng)域的應(yīng)用?;诰W(wǎng)絡(luò)的機(jī)器人控制技術(shù)也從初期的遙控操作機(jī)器人的應(yīng)用逐漸擴(kuò)展到自主機(jī)器人和分布式機(jī)器人系統(tǒng)等研究領(lǐng)域。通過因特網(wǎng)對(duì)機(jī)器人實(shí)施實(shí)時(shí)控制是一項(xiàng)具有挑戰(zhàn)性的工作,這一技術(shù)的應(yīng)用將進(jìn)一步豐富機(jī)器人遠(yuǎn)程控制手段,具有良好的發(fā)展趨勢(shì)和廣闊的應(yīng)用前景。
在研究和分析通信協(xié)議、無線網(wǎng)絡(luò)技術(shù)和Socket通信的基礎(chǔ)上,完成了機(jī)器人無線網(wǎng)絡(luò)視頻傳輸系統(tǒng)設(shè)計(jì),如圖1所示:
圖1 無線網(wǎng)絡(luò)視頻傳輸系統(tǒng)圖
圖1中機(jī)器人上安裝攝像機(jī),完成圖像采集、A/D轉(zhuǎn)換和視頻壓縮功能。將攝像機(jī)與無線模塊連接,通過無線模塊實(shí)現(xiàn)無線視頻傳輸。在用戶端計(jì)算機(jī)上安裝無線網(wǎng)卡,通過無線網(wǎng)卡接收和處理無線視頻信號(hào)。無線網(wǎng)絡(luò)采用IEEE802.11g標(biāo)準(zhǔn),工作頻率為2.4GHz,傳輸速率可達(dá)到54Mbps,采用TCP/IP通信協(xié)議,視頻壓縮標(biāo)準(zhǔn)采用MJPEG。由于機(jī)器人和計(jì)算機(jī)之間采用一對(duì)一傳輸,所以無線網(wǎng)絡(luò)組網(wǎng)采用對(duì)等模式。
在無線網(wǎng)絡(luò)視頻傳輸系統(tǒng)中,如圖2所示,攝像機(jī)將采集到的模擬視頻信號(hào)通過A/D轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字視頻信號(hào),然后交給視頻編碼器將視頻壓縮成MJPEG格式。壓縮后的視頻數(shù)據(jù)流交給無線發(fā)射模塊,無線發(fā)射模塊將數(shù)據(jù)轉(zhuǎn)換成無線信號(hào)。無線信號(hào)通過無線網(wǎng)絡(luò)傳輸給計(jì)算機(jī)的無線網(wǎng)卡,計(jì)算機(jī)無線網(wǎng)卡接收并處理無線視頻信號(hào)提交給計(jì)算機(jī)展現(xiàn)給用戶視頻圖像。
圖2 無線視頻傳輸系統(tǒng)流程圖
在實(shí)驗(yàn)系統(tǒng)中,利用Visual C++6.0編程環(huán)境,利用Socket網(wǎng)絡(luò)通信接口實(shí)現(xiàn)了該實(shí)驗(yàn)程序。通過視頻采集卡采集圖像,用Socket建立實(shí)驗(yàn)系統(tǒng)客戶端(控制端)和服務(wù)器端(機(jī)器人)的連接,并實(shí)現(xiàn)視頻數(shù)據(jù)的傳輸。其視頻傳輸結(jié)構(gòu)圖如圖3所示。
圖3 視頻傳輸結(jié)構(gòu)圖
服務(wù)器端實(shí)現(xiàn)主要包括三部分:硬件初始化、Socket的Server端初始化以及數(shù)據(jù)的發(fā)送。具體實(shí)現(xiàn)過程如下:
(1)當(dāng)服務(wù)器系統(tǒng)啟動(dòng)后,建立Socket通信,偵聽網(wǎng)絡(luò)狀態(tài)。
(2)如檢測(cè)到客戶端發(fā)來的連接,即建立連接。
(3)如接收到傳送請(qǐng)求,即開啟傳送線程把數(shù)據(jù)傳給客戶端,并開啟另一線程來處理圖像數(shù)據(jù)。
(4)操作人員點(diǎn)擊傳送按鍵之后,系統(tǒng)開始正式工作,獲得視頻數(shù)據(jù),這標(biāo)志著數(shù)據(jù)傳輸正式開始。
在數(shù)據(jù)傳送過程中多采用多線程技術(shù),可實(shí)現(xiàn)偵聽網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)采集、預(yù)覽、請(qǐng)求后數(shù)據(jù)壓縮傳送等。采用多線程技術(shù),可使預(yù)覽、編碼、傳輸能同時(shí)進(jìn)行(通過分時(shí)),從而有效地提高了數(shù)據(jù)傳輸?shù)男省?/p>
Socket工作過程如下:首先啟動(dòng)服務(wù)器,通過調(diào)用Socket(),建立一個(gè)Socket,然后調(diào)用bind()將該Socket和本地網(wǎng)絡(luò)地址綁定在一起,再調(diào)用listen()使Socket做好偵聽的準(zhǔn)備,并規(guī)定它的請(qǐng)求隊(duì)列的長度,之后就調(diào)用accept()來接收連接??蛻粼诮ocket后就可調(diào)用connect()和服務(wù)器建立連接。連接一旦建立,客戶機(jī)和服務(wù)器之間就可以通過調(diào)用send()和receiver()來發(fā)送和接收數(shù)據(jù)。最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close()關(guān)閉Socket。具體過程如下:
(1)Winsock環(huán)境的初始化
在使用Winsock MFC類之前,必須為應(yīng)用程序初始化Winsock環(huán)境,這只需調(diào)用實(shí)例初始化函數(shù)AfxSocketInit即可,它把WSADATA結(jié)構(gòu)作為可選參數(shù)。如果把此結(jié)構(gòu)提供給函數(shù),就會(huì)得到當(dāng)前計(jì)算機(jī)在用的Winsock版本信息。如果把此函數(shù)包含在實(shí)例初始化函數(shù)中,Winsock環(huán)境將得到正確的初始化,并被應(yīng)用程序關(guān)閉。
(2)創(chuàng)建偵聽套接字
在初始化Winsock之后,接著創(chuàng)建在通信中使用的套接字,其方法是調(diào)用socket()函數(shù)。下面對(duì)socket()函數(shù)的三個(gè)參數(shù)作以介紹:
a)地址描述:必須設(shè)為AF_INET,表明正在使用IP地址家族。
b)指定套接字的類型:采用SOCK_STREAM,指定應(yīng)用程序創(chuàng)建一個(gè)流式套接字,使用TCP協(xié)議;采用SOCK_DGRAM,則創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字,使用UDP協(xié)議。
c)指定套接字所用的協(xié)議:如果是流式套接字,則使用IPPROTO_TCP,如果是數(shù)據(jù)報(bào)套接字,則使用IPPROTO_UDP。
(3)地址綁定
將套接字綁定到一個(gè)已知地址。
&saddr是一個(gè)Winsock地址結(jié)構(gòu),它的作用相當(dāng)于一個(gè)普通的緩沖區(qū),結(jié)構(gòu)通常會(huì)隨所用的網(wǎng)絡(luò)協(xié)議不同而不同。
(4)偵聽連接
將套接字置入監(jiān)聽模式,bind()的作用只是將一個(gè)套接字和一個(gè)指定的地址關(guān)聯(lián)在一起,但指定套接字進(jìn)入連接的函數(shù)是listen()函數(shù)。
listen()函數(shù)中第一個(gè)參數(shù)是進(jìn)行偵聽的套接字,服務(wù)器可以從它上面接收客戶發(fā)來的請(qǐng)求;第二個(gè)參數(shù)指定了正在等待連接的最大隊(duì)列長度,進(jìn)入服務(wù)器的連接請(qǐng)求將在隊(duì)列中等待服務(wù)器accept(),這個(gè)參數(shù)非常重要,因?yàn)橥耆赡芡瑫r(shí)出現(xiàn)多個(gè)連接請(qǐng)求。
(5)接受連接
當(dāng)服務(wù)器的套接字設(shè)置為偵聽狀態(tài)時(shí),它就可以接收客戶機(jī)的連接請(qǐng)求,在收到請(qǐng)求后,實(shí)際的連接可以由accept()函數(shù)來完成。
其中m_hSocket是調(diào)用listen()函數(shù)的偵聽套接字,&addr,&len是用來返回所連接的客戶機(jī)套接字的地址。如果客戶機(jī)的連接請(qǐng)求被成功接受,accept()函數(shù)提取掛在偵聽套接字m_hSocket上的連接隊(duì)列中的第一個(gè)連接,創(chuàng)建一個(gè)和m_hSocket有相同屬性的新數(shù)據(jù)套接字accs,并返回一個(gè)指向accs的句柄。accs用來處理客戶機(jī)和服務(wù)器之間的連接和數(shù)據(jù)傳輸工作,原來的偵聽套接字m_hSocket將繼續(xù)偵聽新的連接請(qǐng)求,并通過accept()函數(shù)的調(diào)用來連接新的客戶機(jī)。
(6)發(fā)送數(shù)據(jù)
通過socket連接發(fā)送和接收消息并不復(fù)雜,對(duì)于服務(wù)器和客戶機(jī)來說,發(fā)送和接收消息的方法是相同的??梢杂胹ocket發(fā)送任何類型的數(shù)據(jù),函數(shù)需要一個(gè)指向通用緩沖區(qū)的指針。發(fā)送時(shí),緩沖區(qū)存放待發(fā)送的數(shù)據(jù),接收時(shí),接收的數(shù)據(jù)拷貝到緩沖區(qū)。通過socket連接發(fā)送消息,可以使用send()函數(shù),返回實(shí)際上發(fā)送出的字節(jié)數(shù)。該函數(shù)第一個(gè)參數(shù)是本地socket號(hào)m_hsocket,第二個(gè)參數(shù)pData是一個(gè)指向存放發(fā)送數(shù)據(jù)的緩沖區(qū)的指針,第三個(gè)參數(shù)nCount是發(fā)送緩沖區(qū)的大小,第四個(gè)參數(shù)是傳輸控制標(biāo)志。
(7)關(guān)閉連接
服務(wù)器端應(yīng)用程序在完成與客戶端程序的所有通信之后,就可以調(diào)用close socket()函數(shù)關(guān)閉這次連接。
(8)服務(wù)器端系統(tǒng)實(shí)現(xiàn)
打開服務(wù)端程序?qū)⒊霈F(xiàn)如下圖4所示界面,在程序運(yùn)行后,點(diǎn)擊開始按鈕,機(jī)器人端就開始偵聽是否有控制端接入。在界面左邊部分和右上部分是實(shí)驗(yàn)系統(tǒng)自身攝像頭所采集視頻信息的實(shí)時(shí)顯示,右下部分是攝像頭格式調(diào)整、視頻源選擇和當(dāng)前接入的控制端IP地址顯示。
圖4 服務(wù)器端實(shí)現(xiàn)
客戶端功能主要是接收和解壓圖像數(shù)據(jù),客戶端接收到的圖像數(shù)據(jù),先經(jīng)過一定的緩沖,然后才能進(jìn)行解碼顯示和圖像處理,具體過程如下:
(1)Winsock環(huán)境的初始化
客戶端的Winsock環(huán)境的初始化和服務(wù)器端一樣,同樣只需調(diào)用實(shí)例初始化函數(shù)AfxSocketInit即可。
(2)創(chuàng)建請(qǐng)求連接套接字
調(diào)用socket()函數(shù)來創(chuàng)建請(qǐng)求連接套接字,客戶端同樣是使用UDP協(xié)議,數(shù)據(jù)報(bào)套接字。
(3)請(qǐng)求連接
為了讓服務(wù)器接受一個(gè)連接請(qǐng)求,客戶機(jī)必須首先發(fā)送一個(gè)連接請(qǐng)求,通過調(diào)用connect()來和服務(wù)器建立連接。
其中m_cSocket是請(qǐng)求連接的套接字;&saddr用來指定用戶想連接的服務(wù)器端的套接字地址結(jié)構(gòu)的指針。傳遞給connect()函數(shù)的地址SOCKADDR機(jī)構(gòu)和傳遞給服務(wù)器bind()函數(shù)的SOCKADDR結(jié)構(gòu)是一樣的。
(4)接收數(shù)據(jù)
客戶機(jī)套接字和服務(wù)器套接字之間建立了連接之后,就可以進(jìn)行數(shù)據(jù)傳輸了,調(diào)用recv()函數(shù)可以接收數(shù)據(jù),此函數(shù)的參數(shù)與send()函數(shù)參數(shù)意義相似,但recv()函數(shù)的第二個(gè)參數(shù)pBuf指向用于存儲(chǔ)接收數(shù)據(jù)的緩沖區(qū)。對(duì)于套接字來說,數(shù)據(jù)是按輸入的隊(duì)列接收過來的,recv()函數(shù)將返回讀入數(shù)據(jù)的字節(jié)數(shù),這個(gè)字節(jié)組就是輸入隊(duì)列中的字節(jié)數(shù),其大小與send()函數(shù)的nret中指定的一樣。如果連接正常關(guān)閉,recv()函數(shù)將返回0;否則,返回SOCKET_ERROR。
(5)關(guān)閉連接
客戶端端應(yīng)用程序在完成與服務(wù)器程序的所有通信之后,就可以調(diào)用closesocket()函數(shù)關(guān)閉這次連接。
(6)客戶端系統(tǒng)實(shí)現(xiàn)
本文設(shè)計(jì)的客戶端界面如下圖5所示,左邊部分和右上部分為視頻顯示部分,右下部分為控制部分,主要有機(jī)器人端IP地址輸入窗口、速度調(diào)整窗口以及遙操作控制圖標(biāo)窗口。
圖5 客戶端界面
基于無線網(wǎng)絡(luò)和客戶機(jī)/服務(wù)器模型的視頻傳輸系統(tǒng)的實(shí)現(xiàn),并且在AS-R機(jī)器人上得到很好的應(yīng)用,實(shí)驗(yàn)結(jié)果表明,在無線局域網(wǎng)環(huán)境下,室內(nèi)100m的范圍,傳送320x240的視頻信息速度可以達(dá)到10幀/s以上。在本文中提出的SOCKET/WINSOCK通信機(jī)制,對(duì)于基于網(wǎng)絡(luò)技術(shù)的機(jī)器人遙操作平臺(tái)的實(shí)現(xiàn),脫離了原本的那種專人專機(jī)進(jìn)行遠(yuǎn)程控制的狀況,提出了初步的設(shè)想。
[1]湯宇松,劉景泰,盧桂章.利用遠(yuǎn)程網(wǎng)絡(luò)技術(shù)的機(jī)器人遙操作系統(tǒng)分析[J].機(jī)器人,2000,22(1):62—72.
[2]Taylor k,Dalton B,Trevelyan J.Web-based telerobotics[J].Robotica,1999,17:49-57.
[3]劉威,宋愛國等.基于互聯(lián)網(wǎng)的遙操作機(jī)器人系統(tǒng)明.機(jī)器人技術(shù)與應(yīng)用,2001,2:30-32.
[4]耿海霞,陳啟軍,王月娟.基于web的遠(yuǎn)程控制機(jī)器人研究機(jī)器人.2002,5:43-44.
[5]莊嚴(yán),王偉,陣為民.基于網(wǎng)絡(luò)的機(jī)器人控制技術(shù)的研究現(xiàn)狀與發(fā)展.機(jī)器 2002,2:20-22.