摘 要:介紹了應(yīng)用于水下無人潛航器的上位機(jī)控制軟件的設(shè)計與實現(xiàn)。該軟件是應(yīng)用于基于WINDOWS操作系統(tǒng)中的VS2005 .net環(huán)境下利用C#編寫的程序,利用軟件中擁有的串口通信控件(Serial Port)實現(xiàn)串口通信的功能,并對傳送來的內(nèi)容進(jìn)行分析,使得上位機(jī)能夠控制AUV同樣的AUV的狀態(tài)以及運(yùn)行軌跡將顯示到界面上、使岸上的操控人員能夠根據(jù)當(dāng)前潛航器的狀態(tài)達(dá)到實時、準(zhǔn)確的操控,試驗表明,該軟件達(dá)到了預(yù)期效果。
關(guān)鍵詞:C#;控制;軌跡顯示
中圖分類號:U674.941 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-7712 (2014) 24-0000-02
目前人類正面臨著人口、資源、環(huán)境三大難題。隨著各國經(jīng)濟(jì)的飛速發(fā)展和世界人口的不斷增多,陸地上的資源已經(jīng)無法滿足人類的需求,然而海洋卻蘊(yùn)含著大量的豐富資源[1],因此,對海洋資源的開發(fā)成為近幾年國際上激烈競爭的焦點之一。作為海洋開發(fā)的利器——無人潛航器,近幾年發(fā)展的更加迅速,因此,如何解決通訊問題達(dá)到對AUV的精確控制和狀態(tài)監(jiān)測就顯得尤為重要。
C#相對其他編程語言,是一種現(xiàn)代的、類型安全的、面向?qū)ο蟮木幊陶Z言[2],摒棄了利用C語言編寫界面的繁瑣和冗長,基于C#在Visual Studio 2005.NET環(huán)境中進(jìn)行界面的編寫,有著簡單、高效、準(zhǔn)確的優(yōu)點。
一、控制對象(AUV)概述
該控制對象采用模塊化設(shè)計,分為五個部分,分別是:頭部(載荷艙)、聲通艙、電池艙、控制艙、推進(jìn)艙。AUV控制主機(jī)控制中央控制單元模塊,從而控制電機(jī)、舵機(jī)、聲吶艙及釋放機(jī)構(gòu)。電池組經(jīng)過電源分配器給各大單元供電,在航行過程中,各單元將各自己的信息傳遞給中央控制單元,按照通信協(xié)議中的要求進(jìn)行組裝,經(jīng)過PDL電臺,將信息發(fā)送回上位機(jī),再由上位機(jī)進(jìn)行解析之后,得到AUV控制主機(jī)的顯示界面。具體的電器模塊下圖所示:
二、軟件設(shè)計
(一)通信協(xié)議
通信必須遵守一定的規(guī)則才可以使得軟件與AUV進(jìn)行行之有效的通信,而這樣的規(guī)則被稱之為通信協(xié)議,本AUV的通信協(xié)議設(shè)計成59個字節(jié)其格式如表1所示:
利用串口通信,可以直接選取串口控件System.IO.Ports.SerialPort并將其更名為SerialPortPDL通過對串口參數(shù)進(jìn)行配置使得該串口與通信協(xié)議以及硬件相匹配,達(dá)到能夠正常解碼的目的,在此處,我們需要對如下幾個參數(shù)進(jìn)行配置:波特率BaudRate=9600,數(shù)據(jù)位數(shù)DataBits=8,讀入緩存大小ReadBufferSize=4096,寫緩存大小WriteBufferSize=2048,停止位 StopBits=1。
本設(shè)計通過SerialPortGPS和SerialPortPDL兩個串口接受數(shù)據(jù)引發(fā)時間消息,現(xiàn)在已SerialPortPDL為例子,該串口使用同步的方法對數(shù)據(jù)進(jìn)行讀寫,調(diào)用串口DataReceive消息,對得到的串口消息進(jìn)行處理,同步讀取代碼主要指令如下:
while(serialPortPDL.ByteToRead>0){ byte DataNow=(byte)(serialPortPDL.ReadByte()); } //同步讀取字節(jié)。串口配置打開的過程中,可能出現(xiàn)錯誤的情況(比如串口號錯誤等等),在主窗口加載的界面的LOAD消息中可添加下述代碼
try{serialPortPDL.Open();}catch { Messagebox,Show(\"請檢查北斗串口!\"); }
串口打開之后,進(jìn)行的通訊流程如圖2所示:
(二)圖形界面(PictureBox)的顯示功能的實現(xiàn)
繪制圖形界面的主要原因就是為了將AUV的運(yùn)行軌跡直觀的表達(dá)出來,方便工作人員對AUV的航行路線進(jìn)行控制,在這里我們運(yùn)用到了vs2005的圖形界面接口(GDI)。
依據(jù)收到的GPS經(jīng)緯度信息,通過適當(dāng)?shù)闹底兓谡{(diào)用GDI類中的函數(shù)進(jìn)行繪制,我們便可以在PictureBox上得到AUV的運(yùn)行軌跡,具體方法如下:
1.加載空位圖
PictureBox實際上只是給予了一個GDI繪圖環(huán)境,就像一張畫板,我們?nèi)绻朐谏厦孢M(jìn)行圖像的繪制,就需要給他加上一張畫紙——即加載一張空位圖具體操作如下:
定義一張空位圖并將它定義成public類型:
Public Bitmap backImage=new Bitmap(800,600);
在設(shè)備上下文中加載該空位圖:
Public Graphics mainGraphics;
mainGraphics=Graphics.FromImage(backImage);
2.坐標(biāo)系變換
在繪制圖形的過程中,需要把坐標(biāo)系的原點定義在顯示圖形界面的中心,需用到下面的函數(shù):mainGraphics.TranslateTransform(500,400); //PictureBox的大小定義為(1000,800)像素
3.軌跡圖形的繪制
由于GPS信號傳上來的圖像是具體的經(jīng)緯度信號,因此我們必須按照像素要求進(jìn)行等比例的縮放,具體代碼如下:
newone = new PointF(500f + (float)((myAUV_Status.GPS_LONG - floatOrginLong) / 0.000028 / picMultiple), 400f + (float)(((myAUV_Status.GPS_LAT - floatOrginLat) / 0.000028 / picMultiple)));
此處myAUV_Status.GPS_LONG,myAUV_Status.GPS_LAT分別為GPS信息的經(jīng)緯度,floatOrginLong,floatOrginLat為設(shè)定原點的經(jīng)緯度,由于地球一分的長度對應(yīng)的為0.000028米,進(jìn)行適當(dāng)?shù)娜∩嶂螅憧梢缘贸鼋?jīng)緯度轉(zhuǎn)像素的式子為(float)((myAUV_Status.GPS_LONG - floatOrginLong) / 0.000028 / picMultiple),在將其組合為一個點,在按照點與點連線的方法在調(diào)用該控件的paint消息便可以畫出具體的AUV軌跡圖了。
4.運(yùn)行效果及其主要界面
本軟件經(jīng)過長期運(yùn)行,能有效控制AUV的水面航行狀態(tài),并且將信息完整的反饋的回來,達(dá)到了預(yù)期效果。
右上角為狀態(tài)字顯示區(qū),包括各種報警信息顯示,上電標(biāo)志等等,右邊中間為設(shè)備控制單元,負(fù)責(zé)設(shè)備的各單元的上電信息,左下角則為AUV軌跡圖形的繪制區(qū)域了,通過設(shè)定原點,坐標(biāo)軸倍數(shù),可以顯示范圍更廣的軌跡圖。
五、結(jié)束語
經(jīng)過湖上測試,AUV試驗效果良好,該控制軟件能夠穩(wěn)定的運(yùn)行并控制AUV在水面上的動作,軟件界面友好,簡潔方便,滿足了對AUV實際的操作。
參考文獻(xiàn):
[1]馬偉鋒,胡震.AUV的研究現(xiàn)狀與發(fā)展趨勢[J].火力與指揮控制,2008(06):10-11.
[2]郭琳,汪蘇.給予C#的開放式機(jī)器人防止系統(tǒng)軟件實現(xiàn)[J].機(jī)械工程師,2008(11):49-51.
[作者簡介]胡越(1990.03-),男,湖北宜昌人,學(xué)生,碩士,研究方向:水下機(jī)器人。