黃敬堯,楊爽,張超,趙慧杰,郭昊
(三峽大學(xué)電氣與新能源學(xué)院,湖北宜昌 443002)
水下自主機器人(AUV)已廣泛應(yīng)用于海洋考察、港口建設(shè)、海底設(shè)施維護(hù)、深水打撈、海軍防務(wù)等諸多領(lǐng)域,現(xiàn)已成為世界各國的研究熱點。由于AUV在水下航行條件惡劣,如何精確控制AUV 并解決其通訊問題就顯得尤為重要,這就迫切需要一種合適的操作軟件,控制AUV的航行并監(jiān)視AUV 航行的狀態(tài)信息。對水下機器人的控制采用分布式控制,即通過上位機PC 實現(xiàn)對下位機的命令發(fā)送來實現(xiàn)各種運動[1]。岸上的控制主機發(fā)送數(shù)據(jù)及命令,位于AUV 控制艙的中央控制單元接收到數(shù)據(jù)及命令后,執(zhí)行動作并將數(shù)據(jù)反饋到控制主機。
C#相對其它編程語言,具有精確、簡單、類型安全的優(yōu)點[2]。由于使用Windows API 編程非常繁瑣、冗長,本系統(tǒng)上位機軟件采用了C#語言在Visual Studio 2005.NET環(huán)境下編程完成[3]。本文基于C#語言在Visual Studio 2005.NET中的環(huán)境,依據(jù)面向?qū)ο缶幊痰乃枷?,開發(fā)了Windows 平臺下的操控界面,通過控制主機PC 對AUV進(jìn)行命令發(fā)送來實現(xiàn)各種運動及功能,具有良好的可視性和靈活的可控性。
該AUV 直徑324mm,總長度約3m,總重量約為250kg,采用模塊化設(shè)計,分為五部分,從前往后依次是:頭部(載荷艙),聲通艙,電池艙,控制艙,推進(jìn)艙。頭部裝有CTD(溫鹽深傳感器)、聲通換能器??刂婆搩?nèi)安裝有:中央控制器、多普勒計程儀、智 能 陀 螺 儀、GPS 系統(tǒng)、釋放機構(gòu)、深度傳感器和PDL 電臺。推進(jìn)艙內(nèi)安裝有:推進(jìn)電機、電機控制盒、航行姿態(tài)控制的水平舵和垂直舵。其中PDL 電臺用于AUV在水面時與岸上控制主機進(jìn)行通信,實現(xiàn)航行器運行狀態(tài)的實時監(jiān)控。總體模型如圖1中下方所示。
圖1 控制過程
AUV 控制主機控制中央控制單元模塊,從而控制電機、舵機、聲納艙及釋放機構(gòu)。電池組經(jīng)過電源分配器之后分別給電機與中央控制單元供電。AUV在水下航行時,DVL、慣導(dǎo)、深度計將數(shù)據(jù)反饋到中央控制單元,并將數(shù)據(jù)通過PDL 電臺傳輸?shù)紸UV 控制主機的顯示界面。具體電氣模塊如圖2 所示。
圖2 電氣模塊框圖
控制主機軟件數(shù)據(jù)通過無線PDL 電臺進(jìn)行傳輸,控制AUV的航行速度、方向、下潛,并進(jìn)行適當(dāng)?shù)臄?shù)據(jù)處理,完成AUV 狀態(tài)數(shù)據(jù)的實時存儲、顯示、圖像軌跡繪制等功能。從使用角度看包括兩大功能:(1)人機交換。操作人員可以通過控制主機輸入各類指令,包括手動模式、自主模式、預(yù)編程模式,設(shè)定值主要包括航向、GPS、舵角、轉(zhuǎn)速,此外還有一些系統(tǒng)設(shè)置,如系統(tǒng)時間、母船GPS 等。(2)顯示功能。控制主機把AUV的姿態(tài)及實時狀態(tài)顯示出來,包括報警信號、通訊狀態(tài)、動力電壓電流、推控電流、聲納電流功率、實際轉(zhuǎn)速、航速、GPS、深度、俯仰角、橫滾角及AUV的航行軌跡,讓操作人員直觀地了解AUV目前的狀況。本控制主機軟件是在Windows XP 系統(tǒng)下Visual Studio 2005.NET 編程環(huán)境中使用C#語言編程完成,并使用編程環(huán)境中的SerialPort 類實現(xiàn)無線通信功能。SerialPort 類為應(yīng)用程序提供了通過串口收發(fā)數(shù)據(jù)的簡便方法,具有功能強大、通信快速、實時性好等特點[4]。
從軟件的實現(xiàn)功能來看,控制主機的功能分為串口通訊處理功能和圖形顯示功能。串口通訊功能主要實現(xiàn)控制主機與AUV的通訊,把控制指令通過無線PDL 電臺傳給AUV,同時AUV 也將自己的狀態(tài)信息反饋給控制主機。圖形顯示功能主要實現(xiàn)動態(tài)AUV的實時數(shù)據(jù),生成AUV的航行軌跡,從而可以直觀地得到AUV的實時信息。
串行口是計算機與外圍數(shù)據(jù)源設(shè)備之間進(jìn)行數(shù)據(jù)交換的重要介質(zhì)[5]。串行口數(shù)據(jù)的通訊是系統(tǒng)設(shè)計中最重要的部分,本文中是采用Visual Studio2005中SerialPort 類設(shè)計方法進(jìn)行通信設(shè)置。
串口通信必須遵守一定的通信協(xié)議,才可實現(xiàn)該控制軟件與AUV的正常通信[6]。通信數(shù)據(jù)協(xié)議格式如表1 所示。
表1 通信數(shù)據(jù)協(xié)議格式
協(xié)議一共59個字節(jié),存放在readBuffer 數(shù)組中,當(dāng)控制主機收到數(shù)組時,將readBuffer 信息處理成相對應(yīng)的含義數(shù)據(jù),分別對應(yīng)GPS 經(jīng)度、緯度、航速、動力電流電壓等一系列參數(shù)。
進(jìn)行串口通信時,首先添加SerialPort 控件,并設(shè)置一些相關(guān)參數(shù),可以通過設(shè)置SerialPort 類的屬性來進(jìn)行。本文中串口屬性主要包括:PortName 串口名稱,BaudRate 波特率,DataBits 數(shù)據(jù)位,StopBits 停止位。
本設(shè)計中通過serialPortGPS 和serialPortPDL 接收數(shù)據(jù)引發(fā)事件,以serialPortGPS為例,在串口操作線程中用于讀取串口數(shù)據(jù)的主要代碼如下:
serialPortGPS.Read(readBuffer,0,readBuffer.Length)
串口中的數(shù)據(jù)要及時更新,然后把更新后的數(shù)據(jù)重新返回到控件中,但是在重新返回數(shù)據(jù)的時候會報錯,需要進(jìn)行異常處理,程序代碼如下:
主線程打開串口,進(jìn)行通訊的流程如圖3 所示。
圖3 通訊流程圖
控制主機的圖形顯示主要就是為了把AUV的航行軌跡直觀地顯示出來,讓操作人員能夠方便地看到AUV的航行路徑。根據(jù)AUV實時上傳的GPS 與INS的數(shù)據(jù),為確保將數(shù)據(jù)點更新到屏幕上,這就需要用到C#提供的GDI 繪制技術(shù)。
在C#中進(jìn)行繪圖,主要方法是定義一個窗體的Paint()事件函數(shù),在這個函數(shù)中實現(xiàn)繪圖,該函數(shù)在窗體需要重新繪制的時候被調(diào)用[7]。如圖5 所示的主界面,打開窗體時需要加載軌跡圖顯示區(qū)域,即實例化一個Graphics 繪圖類調(diào)用函數(shù)TranslateTransform()函數(shù),將原點位置設(shè)在軌跡圖顯示區(qū)域的中心,代碼如下:
繪制GPS 軌跡時,取原點經(jīng)度、緯度坐標(biāo)(x,y),AUV所在位置點的經(jīng)度、緯度坐標(biāo)為(x1,y1),要想得AUV的運動軌跡,可以根據(jù)以下公式
其中,L為地球一分的長度,即111120m。代碼實現(xiàn)過程如下:
根據(jù)GPS 實時上傳的數(shù)據(jù),最終可完成AUV 航行軌跡的繪制。
本軟件經(jīng)過長期運行,能有效控制AUV在水面的航行狀態(tài)和在水下的航行過程,達(dá)到了預(yù)期的設(shè)計效果。其主要運行界面如圖4 示,分為四個區(qū)域。
圖4 主界面
圖5 自主航行功能參數(shù)設(shè)置窗口
界面左上角為軌跡圖顯示區(qū),顯示水下航行器GPS軌跡(紅色)、INS軌跡圖(綠色),母船GPS 軌跡圖(藍(lán)色)。右下角區(qū)域為軌跡圖的局部放大圖。
界面左下角為AUV 狀態(tài)顯示區(qū)域,包括潛航體的航向角、俯仰角、橫滾角、離地高度、深度及潛航體GPS 經(jīng)緯度、INS 經(jīng)緯度、潛航體航行模式、母船GPS經(jīng)緯度等。
界面右上角分5個部分:信號顯示區(qū)域、電池狀態(tài)區(qū)域、電機狀態(tài)顯示、舵機狀態(tài)顯示、舵機控制區(qū)域。
自主航行模式主要是通過設(shè)定多個點的經(jīng)緯度、深度及轉(zhuǎn)速,使AUV 按照設(shè)定的軌跡進(jìn)行航行。自主航行模式功能參數(shù)設(shè)置窗口如圖5。
預(yù)編程航行模式是通過設(shè)定AUV 轉(zhuǎn)速、航向、深度及航行時間,使AUV 按照預(yù)定參數(shù)進(jìn)行航行。預(yù)編程航行參數(shù)設(shè)置窗口如圖6。
圖6 預(yù)編程參數(shù)設(shè)置窗口
AUV 試驗效果如圖7 所示。
圖7 AUV 湖試
經(jīng)過湖上測試,AUV 試驗效果良好,該控制軟件可以穩(wěn)定地操作并控制AUV的航行,順利地進(jìn)行下潛。軟件以良好的性能、友好的界面和簡單的操作方法滿足了對AUV的操作。
[1]翟宇毅,張瑞勇.基于VC++的超小型水下機器人上位機人機交互界面設(shè)計[J].自動化與儀器儀表,2011(5):66-68.
[2]郭琳,汪蘇.基于C#的開放式機器人控制系統(tǒng)軟件實現(xiàn)[J].機械工程師,2008(11):49-51.
[3]韓中華,趙貞麗,丁志文.基于C#串行類的PC 機與IC 卡讀寫器串行通信的實現(xiàn)[J].科技廣場,2007(3):79-81.
[4]馬斌,等.C#串行類在PC 機與IC 卡讀寫器串行通信中的作用[J].沈陽建筑大學(xué)學(xué)報(自然科學(xué)版),2008,24(3):508-511.
[5]姜拓,張劍平.基于C#的數(shù)據(jù)采集系統(tǒng)上位機軟件設(shè)計與實現(xiàn)[J].電子測試,2009(9):58-61.
[6]韋統(tǒng)安,董升亮,耿丙群,袁題訓(xùn).20kg 級自主水下機器人控制軟件設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2011(11):11-13.
[7]吳正順,陳孝威.C sharp 繪制三維圖形的方法的研究[J].貴州大學(xué)學(xué)報(自然科學(xué)版),2009(6):53-56.