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