機器人實(shí)時(shí)遠程控制系統及其開(kāi)發(fā)庫的設計與實(shí)現
摘 要:以實(shí)時(shí)性、可靠性為前提,設計了一套機器人遠程控制系統。介紹了其中的遠程控制平臺和本地控制系統的結構及其關(guān)鍵技術(shù);機器人遠程控制系統開(kāi)發(fā)庫的設計與實(shí)現;展示了開(kāi)發(fā)實(shí)例。
關(guān)鍵詞:機器人遠程控制系統 遠程控制平臺 本地控制系統 自適應視頻傳輸方案 開(kāi)發(fā)庫
近年來(lái),隨著(zhù)無(wú)線(xiàn)網(wǎng)絡(luò )技術(shù)的發(fā)展和日益成熟,利用WLAN和LAN的混和組網(wǎng),使基于網(wǎng)絡(luò )的機器人遠程控制成為一個(gè)熱門(mén)的研究領(lǐng)域。
本文設計了一套移動(dòng)機器人遠程控制系統。該系統可用于如時(shí)延網(wǎng)絡(luò )環(huán)境下控制系統的穩定性理論、實(shí)時(shí)控制系統的網(wǎng)絡(luò )通信協(xié)議、基于事件驅動(dòng)方式的網(wǎng)絡(luò )系統控制策略、目標識別技術(shù)等方面的研究。
1 硬件環(huán)境
被控的機器人采用了美國Activmedia Robotics公司的P3-DX多功能智能移動(dòng)機器人。它配備了車(chē)載計算機(裝有無(wú)線(xiàn)網(wǎng)卡、視頻采集卡)、帶抓手的5自由度手臂、水平轉動(dòng)/傾斜攝像頭及4組共16個(gè)聲納。
在實(shí)驗室內搭建了無(wú)線(xiàn)網(wǎng)絡(luò )環(huán)境, 無(wú)線(xiàn)路由器通過(guò)其廣域連接端口連接到校園網(wǎng),并能通過(guò)校園網(wǎng)訪(fǎng)問(wèn)Internet,從而構成了一個(gè)廣域網(wǎng)系統。機器人通過(guò)其車(chē)載計算機上的無(wú)線(xiàn)網(wǎng)卡與實(shí)驗室內的無(wú)線(xiàn)局域網(wǎng)互聯(lián),從網(wǎng)絡(luò )的任何節點(diǎn)都可以遠程控制機器人。
2 機器人實(shí)時(shí)遠程控制系統的設計
本機器人遠程控制系統以實(shí)時(shí)性及可靠性為前提進(jìn)行設計。
2.1 基本結構
如圖1所示,整個(gè)遠程控制系統由遠程控制平臺、本地控制系統兩部分組成。整套軟件系統建立在Windows2000上。
圖1 系統結構圖
圖2 系統的數據流程圖
如圖2左半部分所示,整個(gè)遠程控制平臺分為控制區和狀態(tài)反饋區。在控制區,用戶(hù)通過(guò)圖形化控制接口觸發(fā)指令發(fā)送模塊中的相應指令,并按照命令包的協(xié)議進(jìn)行封包(根據所設計的通信協(xié)議,可以選擇是否進(jìn)行加密和壓縮),通過(guò)網(wǎng)絡(luò )發(fā)送給本地控制系統。
狀態(tài)反饋區負責接收從本地控制系統實(shí)時(shí)發(fā)送過(guò)來(lái)的機器人狀態(tài)反饋信息和視頻數據并顯示。
2.3 本地控制系統
如圖2右半部分所示,整個(gè)本地控制系統分為控制執行區和反饋發(fā)送區。
在控制執行區,當收到命令包并解包后,可以選擇進(jìn)行命令包的實(shí)時(shí)性檢查,然后通過(guò)指令轉發(fā)模塊將指令轉發(fā):如果是基本的控制指令則直接通過(guò)ARIA接口發(fā)送給機器人;如果是高級任務(wù)指令則轉發(fā)給高級任務(wù)模塊,調用高級任務(wù)模塊中對應的子模塊進(jìn)行控制,由它發(fā)送一系列的命令給機器人。
在反饋發(fā)送區,系統定時(shí)接收從串口發(fā)來(lái)的機器人狀態(tài)數據并打包發(fā)送給遠程控制平臺,同時(shí)采集現場(chǎng)的視頻數據,并進(jìn)行壓縮編碼,然后根據視頻數據包的協(xié)議打包發(fā)送到遠程控制平臺。此外狀態(tài)和視頻數據將作為高級任務(wù)模塊的輸入數據來(lái)源。圖2中的心跳包用于處理通信異常斷開(kāi)的情況。
3 關(guān)鍵技術(shù)
3.1 采用UDP協(xié)議
TCP協(xié)議提供了可靠的數據傳輸,但是其擁塞控制、數據校驗、重傳機制的網(wǎng)絡(luò )開(kāi)銷(xiāo)很大,不適合實(shí)時(shí)通信,所以選擇開(kāi)銷(xiāo)很小的UDP協(xié)議來(lái)傳輸數據。
UDP協(xié)議是無(wú)連接的數據傳輸協(xié)議并且無(wú)重傳機制,會(huì )發(fā)生丟包、收到重復包、亂序等情況。而對于數據精確性要求不高的狀態(tài)數據以及視頻數據,丟包的影響不大。因為會(huì )不斷收到新的包,丟失的個(gè)別包會(huì )有新的包來(lái)覆蓋,所以只需在遠程控制系統的通信部分自行處理亂序及重復包的問(wèn)題,而對于丟包的問(wèn)題一般不作處理。
但對于命令包這種需要精確收發(fā)的數據, 可在程序的開(kāi)發(fā)中加入丟包重發(fā)和超時(shí)丟棄的處理。
當然,如果開(kāi)發(fā)的是對于實(shí)時(shí)性要求不高的事件型控制命令的傳輸,不希望發(fā)生指令的丟失也可以直接采用TCP協(xié)議。TCP的重傳機制正好適合這種情況。
3.2 使用非阻塞套接字結合多線(xiàn)程進(jìn)行通信
整個(gè)系統的通信部分采用Winsock API進(jìn)行開(kāi)發(fā),摒棄了其他遠程控制系統中多采用的阻塞字加多線(xiàn)程的編程模式,而使用了非阻塞套接字并采用了異步事件選擇I/O模型。這是因為非阻塞套接字能更好地在非占先的Windows環(huán)境下工作,而阻塞套接字在性能上要差一些?;谡麄€(gè)系統的實(shí)時(shí)性要求,采用了非阻塞的套接字。
由于狀態(tài)數據和視頻數據的收發(fā)量大而且頻繁,所以仍需采用多線(xiàn)程技術(shù)將數據的收發(fā)放到子線(xiàn)程中,否則將影響主線(xiàn)程的運行。
3.3 本地控制系統中的高級任務(wù)模塊的作用
位于本地控制系統中的高級任務(wù)模塊使得本地控制系統具有自動(dòng)避障、目標識別、自主漫游等高級任務(wù)的決策能力。這一設計的實(shí)質(zhì)是將屬于遠程控制的復雜控制功能下放到本地控制系統實(shí)現。如圖2所示,只需從遠程控制平臺發(fā)出啟動(dòng)某高級任務(wù)指令給本地控制系統,本地控制系統的高級任務(wù)模塊調用相應的子模塊并以本地實(shí)時(shí)更新的狀態(tài)數據和視頻數據作為輸入數據進(jìn)行處理,實(shí)時(shí)發(fā)出一系列的指令給機器人,便可完成特定的任務(wù)。
該設計雖然增加了車(chē)載計算機的運算負荷,但是由于可以直接在本地實(shí)時(shí)收到狀態(tài)數據以及視頻數據,既避免了將這些數據發(fā)送到遠程控制平臺以及控制指令發(fā)回到本地控制系統所需的網(wǎng)絡(luò )時(shí)延,又降低了網(wǎng)絡(luò )的不可預測性造成的系統不可靠性,從而加快了系統的控制響應速度,保證了控制的實(shí)時(shí)性。同時(shí)也提高了遠程控制平臺操作的集成度、機器人的自主性和系統的可靠性。
3.4 心跳包的使用
圖2中的心跳包用于處理通信異常斷開(kāi)的情況,例如突然斷電、網(wǎng)絡(luò )中斷等。心跳包是一個(gè)非常小的數據包,包里只包含時(shí)間戳、包的序號等信息,并使用UDP協(xié)議傳輸。遠程控制平臺每隔一定的時(shí)間(如1分鐘)就向本地控制系統發(fā)送一個(gè)心跳包。當本地控制系統收到該包,只需簡(jiǎn)單地將該包發(fā)回來(lái)以表明它收到了這個(gè)包。
如果遠程控制平臺在超過(guò)一定的時(shí)間(如3分鐘)沒(méi)有收到已發(fā)送的心跳包的回包,就可以認為本地控制系統和遠程控制平臺已經(jīng)異常斷開(kāi),從而停止發(fā)送心跳包,并立即啟動(dòng)緊急處理模塊,執行如操作人員發(fā)出警報、重新建立網(wǎng)絡(luò )連接或者重新啟動(dòng)遠程控制平臺等應急功能。
如果本地控制系統在一定的時(shí)間(如3分鐘)內都沒(méi)有收到從遠程控制平臺發(fā)來(lái)的心跳包,就可以認為本地控制系統已經(jīng)與遠程控制平臺異常斷開(kāi),從而立即啟動(dòng)本地控制系統中的緊急處理模塊,由該模塊發(fā)出如停止機器人或啟動(dòng)自主控制程序的指令給機器人。同時(shí)如果網(wǎng)絡(luò )未斷,將恢復監聽(tīng)網(wǎng)絡(luò )上的連接請求,以等待建立新的連接。
通過(guò)使用心跳包使系統的應急處理能力得到提高,從而提升了整個(gè)系統的可靠性。
3.5 應用層協(xié)議的設計
根據實(shí)時(shí)性要求,包的大小應盡可能小,以減少帶寬的占用,所以整套應用層傳輸協(xié)議的設計應該力求簡(jiǎn)潔。以下的協(xié)議都是建立在UDP傳輸協(xié)議之上。
(1)命令包協(xié)議
?。^|時(shí)間戳|序列號|命令|參數類(lèi)型|參數|校驗和|包尾|
(2)狀態(tài)包協(xié)議
?。^|時(shí)間戳|序列號|狀態(tài)數據塊|校驗和|包尾|
(3)心跳包協(xié)議
?。^||時(shí)間戳|序列號|校驗和|包尾|
(4)視頻數據協(xié)議
?。^|時(shí)間戳|序列號|同一時(shí)間戳數據塊數量|數據塊序號|數據塊|校驗和|包尾|
在以上協(xié)議中:時(shí)間戳用于實(shí)時(shí)性檢查;序列號用于丟包的檢測和統計;校驗和用于檢查包的完整性。
以上所設計的協(xié)議具有可擴展性,可根據設計要求增減字段。例如當需要考慮信息傳輸的安全性,可加入加密字段;當不考慮延時(shí),可刪除時(shí)間戳字段等。
3.6 自適應實(shí)時(shí)視頻傳輸方案
圖3 自適應實(shí)時(shí)視頻傳輸方案
現有的遠程視頻監控系統多采用RTP/RTCP協(xié)議(實(shí)時(shí)傳輸協(xié)議),它是因特網(wǎng)上針對多媒體數據流的一種傳輸協(xié)議。RTP是一種封裝協(xié)議,用于對多媒體數據塊進(jìn)行封裝,然后用下層傳輸協(xié)議(如UDP)進(jìn)行傳輸。RTCP封裝的是發(fā)送端或者接收端的統計報表。發(fā)送多媒體數據的端將根據接收到的RTCP反饋信息調整視頻數據傳輸質(zhì)量。
但是針對本機器人遠程控制系統,該協(xié)議并不完全合適。由于該遠程控制系統是一對一的傳輸模式,只傳輸視頻數據而無(wú)其他多媒體數據流,所以具有特殊性。而RTP協(xié)議具有一般性,它的很多字段并不適合該系統。例如關(guān)于數據源的同步以及關(guān)于組播的部分,由于不斷發(fā)送RTCP包將占用有限的網(wǎng)絡(luò )帶寬,不如直接在遠程控制平臺進(jìn)行丟包統計并在視頻質(zhì)量明顯變化時(shí)發(fā)送調節視頻質(zhì)量的命令給本地控制系統。根據這一思路,本系統以RTP協(xié)議的基本思想為基礎,針對系統的特殊性開(kāi)發(fā)了一套自適應實(shí)時(shí)視頻傳輸方案。
如圖3所示,本地控制系統將采集的一幀視頻數據使用MPEG4或M-JPEG協(xié)議進(jìn)行壓縮編碼;然后按照一定的大小(一般比MTU稍微小點(diǎn),因為IP和UDP包頭要占用一定的字節數)對編碼后的視頻數據進(jìn)行分塊,并使用視頻數據協(xié)議進(jìn)行數據塊的封裝;最后使用UDP協(xié)議發(fā)送到遠程控制平臺。其中時(shí)間戳用于表明這些數據塊屬于同一視頻幀,數據塊序號用于表明該數據塊在此幀中的位置。
由于UDP協(xié)議的不可靠性會(huì )引發(fā)包的亂序、重復包以及丟包等情況,所以遠程控制平臺采用多級緩存池接收視頻數據。該緩存池是一個(gè)可以容納0.2s~0.4s視頻數據的多級緩存,每一級是一個(gè)緩存鏈表,用于存儲具有相同時(shí)間戳的所有數據塊。
該多級緩存池的基本算法是:
(1)當接收到的數據塊的時(shí)間戳在多級緩存中不存在時(shí):如果該時(shí)間戳比緩存中最舊的時(shí)間戳要新,則在多級緩存池中插入屬于該時(shí)間戳的緩存鏈表,在該鏈表中加入該數據塊,并刪除時(shí)間戳最舊的數據鏈表;如果該時(shí)間戳比緩存中最舊的時(shí)間戳還要舊,就丟棄該數據塊。
(2)當接收到的視頻數據塊的時(shí)間戳在多級緩存中存在時(shí):檢查該時(shí)間戳對應緩存鏈表,通過(guò)該數據塊序號判斷該數據塊是否存在該時(shí)間戳的緩存鏈表中。若不存在就加入該數據塊,否則丟棄。
(3)當接收到的數據塊使得同一時(shí)間戳的視頻數據完全收到,就將其解碼并顯示,然后釋放包括該時(shí)間戳在內的、所有小于該時(shí)間戳的緩存鏈表。
視頻的壓縮標準采用MJPEG或者M(jìn)PEG4。MJPEG屬于幀內編碼,傳輸中發(fā)生丟幀不會(huì )影響其他的幀;而MPEG4屬于幀間編碼,傳輸中發(fā)生丟幀,特別是關(guān)鍵幀的丟失將嚴重影響其他幀的完整。所以在實(shí)際的系統設計中,如果網(wǎng)絡(luò )的通信狀況很好,則選擇MPEG4,因為它的壓縮比高;如果網(wǎng)絡(luò )的通信狀況很差,則選擇MJPEG,雖然壓縮比相對較小,但是發(fā)生丟幀時(shí)不會(huì )影響其他幀。
在接收視頻數據的同時(shí),應根據時(shí)間戳和序列等進(jìn)行視頻傳輸狀況統計,主要是丟包及延時(shí)統計。根據統計信息,當視頻傳輸狀況發(fā)生了明顯變化時(shí),就發(fā)送調節視頻質(zhì)量的命令給本地控制系統:
(1)當傳輸的狀況變差(如丟包、延時(shí)嚴重等)時(shí)就給本地控制系統發(fā)送降低視頻質(zhì)量的命令,使其降低視頻采集的頻率或者提高壓縮比率。至于是降低視頻采集的頻率還是提高壓縮比率,將根據當前機器人的移動(dòng)速度來(lái)決定:當機器人移動(dòng)較快時(shí),并不需要非常高的畫(huà)面質(zhì)量,所以?xún)?yōu)先采用提高圖像壓縮比率的方法。當只提高壓縮比率效果不明顯時(shí),再同時(shí)采用降低視頻采集頻率的方法;當機器人移動(dòng)速度很慢時(shí)如抓取東西時(shí),需要更高的視頻清晰度,此時(shí)優(yōu)先采用降低視頻采集頻率的方法。當只降低視頻采集頻率效果不明顯時(shí),再同時(shí)采用提高壓縮比率的方法。
(2)同理,如果傳輸的狀況較好,則可以發(fā)送提高視頻質(zhì)量的命令給本地控制系統,根據移動(dòng)速度決定采取優(yōu)先提高視頻采集的頻率或者優(yōu)先降低壓縮比率的方法來(lái)提高視頻的質(zhì)量。
4 機器人遠程控制系統開(kāi)發(fā)庫
4.1 目的與用處
提供一套使開(kāi)發(fā)者擺脫編程細節的、快速開(kāi)發(fā)的、模塊化的、可擴展的機器人遠程控制開(kāi)發(fā)庫,可以方便研究人員進(jìn)行軟件的開(kāi)發(fā),降低其在軟件編程方面的重復勞動(dòng)。
4.2 設計原則
(1)采用面向對象的思想,以C++類(lèi)進(jìn)行設計,并將類(lèi)封裝到動(dòng)態(tài)鏈接庫中。
(2)開(kāi)發(fā)庫具有多選擇性,使開(kāi)發(fā)庫的使用者有多種技術(shù)可選,如提供多種視頻編碼庫。
(3)在類(lèi)中對多線(xiàn)程進(jìn)行封裝 ,并加入線(xiàn)程的同步,使類(lèi)具有線(xiàn)程安全性。
(4)函數中的算法要力求效率高、運算速度快,以減少因為占用過(guò)多的計算時(shí)間造成的網(wǎng)絡(luò )時(shí)延。
(5)類(lèi)中定義的接口應設計完整,不可隨便改動(dòng),以保證今后升級和擴展時(shí)接口的一致性。
(6)類(lèi)的代碼要多采用基本C/C++標準庫函數來(lái)開(kāi)發(fā),而盡量不要使用依靠平臺的如MFC庫,以方便移植到Linux平臺。
4.3 開(kāi)發(fā)庫CyLib介紹
圖4是依照以上設計原則設計的機器人遠程控制系統開(kāi)發(fā)庫CyLib的類(lèi)層次圖。該庫由4個(gè)動(dòng)態(tài)鏈接庫文件組成:CyCore.dll、CyTools.dll、CyRobot.dll、CyGUI.dll。其中基類(lèi)加陰影顯示,其他的為派生類(lèi)。
圖4 開(kāi)發(fā)庫的類(lèi)層次圖
圖5 遠程控制平臺
CyCore.dll封裝了應用層數據包協(xié)議、遠程控制命令、數據傳輸接口、延時(shí)及丟包模擬等。
CyRobot.dll包含了對機器人編程接口A(yíng)RIA的封裝、控制指令的執行、狀態(tài)數據的輪詢(xún)和發(fā)送、視頻的采集壓縮發(fā)送以及色彩識別、漫游等智能控制功能等。
CyTools.dll提供了一系列的工具類(lèi)用于輔助研究人員的程序開(kāi)發(fā)。其中包含線(xiàn)程進(jìn)程同步類(lèi)、時(shí)間類(lèi)、算術(shù)類(lèi)、日志功能、壓縮解壓縮、加密解密、視頻采集等。
CyGUI.dll提供了圖形化顯示類(lèi),如多功能按鈕、地圖生成、聲納圖形顯示等。
5 開(kāi)發(fā)實(shí)例
根據以上的系統結構設計并利用開(kāi)發(fā)庫CyLib,開(kāi)發(fā)了一套P3-DX機器人遠程控制系統。圖5展示了機器人遠程控制平臺的控制現場(chǎng)。該平臺實(shí)現了機器人本體、機械臂和攝像頭的控制、狀態(tài)數據的顯示、聲納羅盤(pán)數據圖形化顯示、視頻監控以及自動(dòng)漫游、色彩識別等智能控制功能。機器人本地控制系統的軟件開(kāi)發(fā)為車(chē)載計算機的一個(gè)Windows2000常駐服務(wù)程序。它實(shí)現了命令的解析和中轉、智能任務(wù)控制的執行、狀態(tài)及視頻數據的采集、打包、發(fā)送等功能。
本機器人遠程控制系統開(kāi)發(fā)庫目前還不夠完善,需要繼續改進(jìn)和擴展。最后介紹的開(kāi)發(fā)實(shí)例基本達到了設計的要求,但是部分高級任務(wù)如機械臂智能控制、自主控制等尚未完成,需要進(jìn)一步加以研究和開(kāi)發(fā)。
參考文獻
1 Alan FT Winfield.Wireless Video Tele-operation using Inter-net Protocols[R].Intelligent
Autonomous Systems (Engineering) Laboratory,University of the West of England,Bristol,1999
2 Bruemmer D J,Dudenhoeffer D D,McKay M D et al. Dynamic-Autonomy for Remote Robotic Sensor
Deployment[R].The Human-System Simulation Laboratory,Idaho National Engineering and
Environmental Laboratory,2002
3 徐志暉.基于無(wú)線(xiàn)網(wǎng)絡(luò )的遠程控制平臺[D].南京:南京航空航天大學(xué),2005
4 莊 嚴,王 偉,惲為民.基于網(wǎng)絡(luò )的機器人控制技術(shù)研究現狀與發(fā)展[J].機器人,2002;24(3)
5 劉 軼,范宜洋,張 晗.一種跨平臺的機器人網(wǎng)絡(luò )遠程控制系統[J].計算機工程,2004;30(9)
評論