占宏 王劍城
關(guān)鍵詞:機(jī)器人;Web技術(shù);遠(yuǎn)程控制;V-REP仿真;虛擬仿真平臺(tái)
近年來(lái),機(jī)器人技術(shù)已逐步應(yīng)用于工業(yè)制造、醫(yī)療服務(wù)、物流分揀等多個(gè)領(lǐng)域,不僅節(jié)省了人力大大提高了工作效率,同時(shí)也給人們的生活帶來(lái)了極大的便利。對(duì)于一些環(huán)境復(fù)雜、條件惡劣或者存在一定危險(xiǎn)的作業(yè)場(chǎng)所,通常需要通過(guò)遠(yuǎn)程控制的方式來(lái)操作機(jī)器人完成相應(yīng)的任務(wù)。Internet和網(wǎng)絡(luò)通訊技術(shù)的快速發(fā)展有力促進(jìn)了Web技術(shù)在機(jī)器人控制領(lǐng)域的應(yīng)用,基于Web的機(jī)器人遠(yuǎn)程控制方式有著界畫直觀、操作簡(jiǎn)單的優(yōu)點(diǎn),易于被人們接受,因此具有重要的研究意義和廣闊的應(yīng)用前景。
將Web應(yīng)用、V-REP仿真機(jī)器人以及機(jī)器人控制技術(shù)相結(jié)合,開發(fā)了機(jī)器人遠(yuǎn)程控制虛擬仿真平臺(tái)。該平臺(tái)中操作者通過(guò)Web瀏覽器發(fā)送相關(guān)的請(qǐng)求和控制命令,由Web服務(wù)器對(duì)其進(jìn)行相應(yīng)處理,同時(shí)建立與機(jī)器人控制服務(wù)器和圖像服務(wù)器的通訊連接,以完成對(duì)V-REP中仿真機(jī)器人的控制,并由仿真Kinect獲取相應(yīng)的圖像信息傳輸至Web瀏覽器,從而實(shí)現(xiàn)基于Web的機(jī)器人遠(yuǎn)程交互控制。此平臺(tái)的實(shí)現(xiàn)為機(jī)器人控制相關(guān)的實(shí)踐教學(xué)提供了虛擬仿真環(huán)境,同時(shí)對(duì)于地質(zhì)科考、救援等機(jī)器人遠(yuǎn)程作業(yè)應(yīng)用有一定意義。
1平臺(tái)整體框架設(shè)計(jì)
平臺(tái)整體框架設(shè)計(jì)如圖1所示,主要分為Web瀏覽器層(客戶端)、服務(wù)器層、仿真環(huán)境層(機(jī)器人端)三個(gè)層次,各層之間既相互獨(dú)立又相互聯(lián)系,共同實(shí)現(xiàn)控制平臺(tái)的功能。
Web瀏覽器層即為客戶端,支持Java瀏覽器的手機(jī)端和PC端均可使用,用戶賬號(hào)信息均存儲(chǔ)于MySQL數(shù)據(jù)庫(kù)中,通過(guò)注冊(cè)并登錄相應(yīng)賬號(hào)后即可進(jìn)入控制界面。仿真環(huán)境采用V-REP軟件中搭建的機(jī)器人模型并去除其內(nèi)嵌腳本作為虛擬的被控機(jī)器人端,由外部的遠(yuǎn)程服務(wù)器完成相關(guān)的控制任務(wù)。服務(wù)器層包括Web服務(wù)器、機(jī)器人控制服務(wù)器和圖像服務(wù)器三部分,其中Web服務(wù)器與Web瀏覽器之間通過(guò)HTTP進(jìn)行通訊,與機(jī)器人控制服務(wù)器和圖像服務(wù)器之間利用socket編寫的TCP協(xié)議建立通訊。當(dāng)Web服務(wù)器收到來(lái)自Web瀏覽器請(qǐng)求后,將根據(jù)請(qǐng)求的類型及URI_來(lái)獲取并運(yùn)行相應(yīng)的服務(wù)器資源。機(jī)器人服務(wù)器和圖像服務(wù)器均采用Python編寫,利用多線程實(shí)現(xiàn)兩個(gè)不同的服務(wù)器進(jìn)程,同時(shí)與V-REP仿真軟件使用同一端口號(hào)連接,利用V-REP遠(yuǎn)程API進(jìn)行聯(lián)調(diào),從而實(shí)現(xiàn)用戶通過(guò)Web瀏覽器界面對(duì)VREP中仿真機(jī)器人的遠(yuǎn)程控制和實(shí)時(shí)監(jiān)控。
2主要功能模塊設(shè)計(jì)
該平臺(tái)的主要功能模塊包括Web應(yīng)用設(shè)計(jì)、機(jī)器人控制模塊設(shè)計(jì)、圖像獲取及傳輸設(shè)計(jì),本節(jié)將對(duì)以上模塊設(shè)計(jì)進(jìn)行詳細(xì)說(shuō)明。
2.1Web應(yīng)用設(shè)計(jì)
Web應(yīng)用設(shè)計(jì)分為Web網(wǎng)頁(yè)與Web服務(wù)器設(shè)計(jì)兩部分。其中,Web網(wǎng)頁(yè)開發(fā)基于MVC設(shè)計(jì)模式,采用JSP作為頁(yè)面顯示設(shè)計(jì)組件,總共設(shè)計(jì)了登錄頁(yè)面login. jsp、遠(yuǎn)程控制界面control.j sp、錯(cuò)誤頁(yè)面wrong. jsp三個(gè)JSP頁(yè)面。Web服務(wù)器設(shè)計(jì)也采用了基于MVC設(shè)計(jì)模式,利用JavaServlet進(jìn)行控制邏輯設(shè)計(jì),包括上述前兩個(gè)頁(yè)面的控制Servlet以及其他工具類的設(shè)計(jì)。
2.1.1登錄頁(yè)面設(shè)計(jì)
登錄界面背景利用前端技術(shù)CSS中的body中type設(shè)置背景圖片,HTMI_表單中包括類型為“text”的用戶名和密碼兩個(gè)文本框,提交按鈕和取消按鈕。登錄頁(yè)面根據(jù)表單的action值,采用HTTP中post請(qǐng)求將用戶輸入的信息發(fā)送至Web服務(wù)器中相應(yīng)的Servlet進(jìn)行處理,以實(shí)現(xiàn)用戶注冊(cè)和登錄功能。當(dāng)用戶在登錄頁(yè)面中輸入登錄信息并點(diǎn)擊登錄后,如果輸入的用戶名或者密碼為空將請(qǐng)求重新定向到wrong. jsp頁(yè)面,提示“用戶名或密碼為空請(qǐng)重新輸入”。當(dāng)輸入均不為空時(shí),建立與MySQI_數(shù)據(jù)庫(kù)的連接并檢索所輸入用戶是否存在,如果存在且密碼正確則登錄成功并跳轉(zhuǎn)到控制頁(yè)面,密碼錯(cuò)誤則要求重新登錄;如果輸入用戶不存在,則為該用戶注冊(cè)賬號(hào)并存儲(chǔ)于數(shù)據(jù)庫(kù)中;如果用戶存在但密碼錯(cuò)誤,則要求重新登錄。登錄界面Servlet中數(shù)據(jù)庫(kù)的相關(guān)操作通過(guò)導(dǎo)人所編寫的工具類DBUtils. java來(lái)實(shí)現(xiàn)。
2.1.2控制頁(yè)面設(shè)計(jì)
控制頁(yè)面包括機(jī)械臂關(guān)節(jié)輸入控制、機(jī)器人動(dòng)作控制、機(jī)器人左右臂抓取控制以及圖像傳輸四個(gè)模塊。關(guān)節(jié)輸入控制模塊中提供一表單輸入7個(gè)關(guān)節(jié)角度so-s6,該數(shù)據(jù)以POST請(qǐng)求方式發(fā)送至Web服務(wù)器中的控制頁(yè)面Servlet。機(jī)器人動(dòng)作控制模塊包括舞蹈、左臂抓取、右臂抓取和還原四個(gè)動(dòng)作按鈕,抓手控制模塊包括16個(gè)控制按鈕,當(dāng)按下按鈕時(shí)利用Java Script中的location. href將控制指令以HTTP的Get請(qǐng)求的方式傳輸?shù)较鄳?yīng)的控制Servlet。Kinect攝像頭拍照模塊中的拍照按鈕將控制指令發(fā)到相應(yīng)的Servlet后進(jìn)行處理,進(jìn)行控制指令的傳輸和圖像數(shù)據(jù)的接收,之后頁(yè)面會(huì)通過(guò)會(huì)話作用域獲取Web服務(wù)器中接收的圖像存放地址,利用request. getSession().getAttribute(“”)函數(shù)獲得地址信息,使用img屬性將圖像展示于頁(yè)面之上,這樣用戶通過(guò)網(wǎng)頁(yè)即可實(shí)現(xiàn)對(duì)機(jī)器人的監(jiān)控查看。當(dāng)控制頁(yè)面的請(qǐng)求地址與存放于Web服務(wù)器中控制頁(yè)面Servlet的URL名稱一致時(shí),其就能將數(shù)據(jù)發(fā)送到相應(yīng)的Servlet。控制頁(yè)面Servlet繼承HttpServlet類,其中定義了doPost和doGet兩種處理請(qǐng)求的方法,其設(shè)計(jì)流程如圖2所示。控制頁(yè)面用戶輸入數(shù)據(jù)的請(qǐng)求類型是Post,這些數(shù)據(jù)將在doPost()中處理??刂祈?yè)面中表單輸人為Post請(qǐng)求進(jìn)入控制頁(yè)面Servlet后,數(shù)據(jù)將在doPost()中處理,其利用請(qǐng)求作用域?qū)ο蠓椒╮equest. getParameter()獲取用戶輸入的數(shù)據(jù),并通過(guò)Integer. parselnt()方法將用戶輸入的字符串變量轉(zhuǎn)換為整型變量存放于doPost()的局部變量中,以上數(shù)據(jù)將傳輸?shù)綑C(jī)器人控制服務(wù)器中以實(shí)現(xiàn)對(duì)仿真機(jī)器人具體的控制??刂祈?yè)面中按鈕均采用Get請(qǐng)求,請(qǐng)求均在doGet()中處理。用戶點(diǎn)擊按鈕后,通過(guò)request. getParameter()獲取按鈕指令值,從而判斷請(qǐng)求控制圖像服務(wù)器還是機(jī)器人控制服務(wù)器,以進(jìn)一步建立與相應(yīng)服務(wù)器的通訊連接。
2.2機(jī)器人控制模塊設(shè)計(jì)
2.2.1機(jī)器人控制設(shè)計(jì)
控制頁(yè)面所有控制動(dòng)作均可由Python語(yǔ)言編寫的機(jī)器人控制服務(wù)器來(lái)實(shí)現(xiàn)對(duì)V-REP中機(jī)器人的控制。V-REP具有多種遠(yuǎn)程客戶端應(yīng)用編程接口,且每種接口都含有其所有API。將官方提供的三個(gè)聯(lián)調(diào)文件放在控制平臺(tái)工程目錄下,并使用遠(yuǎn)程API vrep. simxStart()設(shè)置相應(yīng)的連接端口號(hào)即可與V-REP建立連接,接著使用遠(yuǎn)程APIvrep. simGetObjectHandle()獲得機(jī)器人各個(gè)控制對(duì)象句柄。利用上述句柄以及機(jī)器人控制服務(wù)器中設(shè)計(jì)的具體控制函數(shù),即可實(shí)現(xiàn)對(duì)仿真環(huán)境中機(jī)器人的控制。
對(duì)于機(jī)器人左臂關(guān)節(jié)輸入控制模塊的函數(shù),輸人為7個(gè)關(guān)節(jié)角度,利用各個(gè)關(guān)節(jié)的句柄和simxSetjointTargetPosition()實(shí)現(xiàn)對(duì)關(guān)節(jié)位置的設(shè)置,leftrotateAIIAngle()和rightrotateAIIAngle()函數(shù)分別完成機(jī)器人左右臂關(guān)節(jié)同時(shí)運(yùn)動(dòng)。機(jī)器人抓手及左右臂關(guān)節(jié)角控制模塊中,各個(gè)關(guān)節(jié)角度的增加和減少控制函數(shù)由所設(shè)計(jì)的leftdecrease()、leftincrease()、rightdecrease()、rightincrease()以及simxSetjointTargetPosition()函數(shù)來(lái)實(shí)現(xiàn)。左右抓手的張開與閉合控制通過(guò)遠(yuǎn)程API來(lái)調(diào)用VREP中的嵌入式腳本vrep. simxCaIIScriptFunction()來(lái)實(shí)現(xiàn)。在該腳本中分別定義了Open函數(shù)和Close函數(shù),同時(shí)利用sim. setIntegerSignal()設(shè)置抓手的信號(hào)值來(lái)實(shí)現(xiàn)抓手的閉合與張開。機(jī)器人動(dòng)作控制模塊中的舞蹈動(dòng)作利用leftrotateAI-IAngle()、rightrotateAIIAngle()和延時(shí)函數(shù)sleep(),將左右臂動(dòng)作連貫起來(lái)形成舞蹈效果。機(jī)械臂抓取動(dòng)作是在抓手實(shí)現(xiàn)張開和閉合的基礎(chǔ)上,配合機(jī)械臂運(yùn)動(dòng)控制來(lái)實(shí)現(xiàn)。
2.2.2機(jī)器人控制服務(wù)器通訊設(shè)計(jì)
機(jī)器人控制服務(wù)器作為客戶端通過(guò)調(diào)用VREP遠(yuǎn)程API,即可與V-REP進(jìn)行通訊連接實(shí)現(xiàn)對(duì)機(jī)器人的控制;作為服務(wù)端,還需與Web服務(wù)器進(jìn)行通訊以獲取相應(yīng)頁(yè)面輸入的數(shù)據(jù)信息。為確保傳輸數(shù)據(jù)穩(wěn)定可靠,機(jī)器人控制服務(wù)器與Web服務(wù)器之間采用TCP通訊協(xié)議并使用socket套接字來(lái)實(shí)現(xiàn)。在機(jī)器人控制服務(wù)器端使用Socket創(chuàng)建socket套接字,使用該socket的blind()方法綁定主機(jī)地址及通信端口號(hào),利用listen()進(jìn)行TCP監(jiān)聽,accept()被動(dòng)接收客戶端連接,連接成功后使用recv()接收TCP數(shù)據(jù)。當(dāng)接收到Web服務(wù)器數(shù)據(jù)后,首先對(duì)該數(shù)據(jù)進(jìn)行判斷,當(dāng)接收數(shù)據(jù)為各關(guān)節(jié)角度指令時(shí),則由recv()來(lái)接收數(shù)據(jù),最后放人leftrotateAIIAngle()函數(shù)中。當(dāng)接收數(shù)據(jù)為其他控制指令時(shí),利用if語(yǔ)句判斷相應(yīng)控制命令并調(diào)用所編寫的控制函數(shù)即可完成對(duì)V-REP中機(jī)器人的控制。
2.3圖像獲取及傳輸設(shè)計(jì)
在V-REP仿真環(huán)境中,采用Kinect傳感器模擬雙目攝像頭并放置于機(jī)器人前方以實(shí)現(xiàn)對(duì)機(jī)器人進(jìn)行監(jiān)控拍照。在獲取Kinect的句柄后,利用vrep. simxGetVisionSensorlmage()即可獲取RGB圖像,將其分為R、G、B三部分,并采用reshape方法設(shè)置圖片尺寸,接著利用merge()將上述三部分進(jìn)行整合,最后將圖片進(jìn)行翻轉(zhuǎn)得到所需要的壓縮RGP圖像,由imwrite()函數(shù)將其存人指定路徑。
獲取Kinect圖像后,可采用TCP協(xié)議將圖像傳輸?shù)絎eb服務(wù)器中。TCP協(xié)議同樣使用socket套接字實(shí)現(xiàn),圖像數(shù)據(jù)采用編碼的Base64類型數(shù)據(jù)進(jìn)行傳輸并在Web服務(wù)器中解碼以重現(xiàn)圖像。獲取的圖像通過(guò)編寫的send()函數(shù)來(lái)發(fā)送圖片文件,利用imencode()函數(shù)將圖片編碼成流數(shù)據(jù),并由Base類中的b64encode方法轉(zhuǎn)換成Base64類型的字節(jié)流數(shù)據(jù),最后由socket的send()將數(shù)據(jù)發(fā)送至Web服務(wù)器。
3平臺(tái)展示
3.1控制頁(yè)面
打開瀏覽器,當(dāng)完成新用戶注冊(cè)并成功登錄后,系統(tǒng)即進(jìn)入控制頁(yè)面,控制頁(yè)面如圖3所示。該頁(yè)面包括機(jī)械臂關(guān)節(jié)輸入控制、機(jī)器人動(dòng)作控制、機(jī)器人左右臂抓取控制以及圖像傳輸四個(gè)模塊,操作者通過(guò)輸入數(shù)據(jù)并點(diǎn)擊相應(yīng)的按鈕即可實(shí)現(xiàn)對(duì)V-REP中機(jī)器人的控制和實(shí)時(shí)監(jiān)控。
3.2遠(yuǎn)程控制實(shí)驗(yàn)
在V-REP仿真環(huán)境中搭建如下場(chǎng)景,Baxter機(jī)器人前面擺放一張方桌,桌面放置一小木塊,前方放置一臺(tái)Kinect攝像頭,以模擬真實(shí)實(shí)驗(yàn)室的環(huán)境。當(dāng)機(jī)器人控制服務(wù)器和圖像服務(wù)器與VREP連接成功后,通過(guò)控制頁(yè)面可以對(duì)仿真環(huán)境中的機(jī)器人進(jìn)行控制。如圖4所示,在機(jī)器臂關(guān)節(jié)控制模塊中輸入各個(gè)關(guān)節(jié)的到達(dá)角度,點(diǎn)擊“左臂boot”按鈕,機(jī)器人左臂會(huì)根據(jù)輸入的關(guān)節(jié)角運(yùn)動(dòng)到指定的關(guān)節(jié)位置。在抓手控制模塊中,包含左臂3個(gè)關(guān)節(jié)和右臂3個(gè)關(guān)節(jié)增減按鈕以及左右抓手打開和閉合16個(gè)控制按鈕。當(dāng)調(diào)整關(guān)節(jié)的角度使得機(jī)器人左臂到達(dá)小方塊上方時(shí),點(diǎn)擊open按鈕抓手打開,點(diǎn)擊close按鈕,抓手緩慢閉合直至抓住小方塊,其中抓手打開和閉合速度可以通過(guò)VREP相應(yīng)嵌入式腳本進(jìn)行設(shè)置,其實(shí)際控制效果如圖5所示。
4結(jié)論
設(shè)計(jì)并開發(fā)了基于Web與V-REP的機(jī)器人遠(yuǎn)程控制虛擬仿真平臺(tái),該平臺(tái)采用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)JSP進(jìn)行用戶界面的開發(fā),使用Servlet技術(shù)搭建Web服務(wù)器,Python編程搭建機(jī)器人控制服務(wù)器和圖像服務(wù)器。操作者可通過(guò)Web網(wǎng)頁(yè)發(fā)送請(qǐng)求和控制指令,由Web服務(wù)器對(duì)其進(jìn)行處理并建立與機(jī)器人控制服務(wù)器和圖像服務(wù)器的通訊連接,控制服務(wù)器接收指令后將對(duì)其進(jìn)行解析并調(diào)用V-REP遠(yuǎn)程API控制仿真機(jī)器人,同時(shí)由仿真Kinect獲取相應(yīng)的圖像信息傳輸至Web瀏覽器,從而實(shí)現(xiàn)基于Web的機(jī)器人遠(yuǎn)程交互控制。實(shí)驗(yàn)測(cè)試結(jié)果表明平臺(tái)各組件之間通信穩(wěn)定、控制準(zhǔn)確。該虛擬仿真平臺(tái)具有可重構(gòu)性、可擴(kuò)展性、易操作等特點(diǎn),對(duì)于機(jī)器人控制相關(guān)實(shí)踐教學(xué)有重要意義。