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