向小梅,聶林波
(1. 91388 部隊,廣東湛江 524022; 2.南海艦隊海洋水文氣象中心,廣東湛江 524001)
UUV(水下無人航行器)主要通信手段為水聲通信。UUV 多數時間在水面以下,無法進行無線電通信,一旦UUV浮出水面,就可以利用衛星進行無線電通信。我國自主研發的北斗衛星導航系統可以提供定位和短報文通信功能。UUV 的遙控指揮可以借助北斗導航系統實現。這樣的優點是能在更遠海域進行UUV 的定位和控制,同時降低了系統設計和維護成本,系統更加穩定可靠。
北斗衛星導航系統是我國獨立研制的集測量技術、定位技術、數字通信和擴頻技術為一體的全天候區域性有源三維衛星導航、定位、通信系統[1-4]。它是除美國的GPS 俄羅斯的GLONASS 之后第三個成熟的衛星導航系統。該系統于2000年初步建成,2003年實現了全網運營,主要用于國家經濟建設,為我國的交通運輸、氣象、石油、海洋、森林防火、災害預報、通信、公安以及其他特殊行業提供高效的導航定位及通信服務。北斗衛星系統由四顆北斗衛星(兩顆備用)、地面控制中心和北斗用戶終端三部分組成,具有快速定位、雙向短報文通信和精密授時服務,其覆蓋范圍是北緯5° ~55°,東經70° ~140°,上大下小,最寬處在北緯35°左右,覆蓋我國的全部國土,以及印度洋和太平洋相當廣闊的一部分。在定位方面,該系統能快速定位用戶地理位置,為用戶及主管部門提供導航;水平定位精度100 m,差分定位精度小于20 m;定位響應時間:1 類用戶5 s,2 類用戶2 s;3 類用戶3 s,簡短定位更新時間小于1 s,一次性定位成功率95%。在通信方面,北斗系統專門開發出軍用通信頻段,以支持廣大軍隊用戶使用,最多一次可傳輸120 個漢字,可以實現用戶與用戶、用戶與地面控制中心之間通信[5-8]。
UUV 處于水面工作狀態時接收北斗導航衛星傳輸的數據,UUV 的遙控指令處理模塊按照遙控協議對數據進行處理,提取指令信息,將指令發給UUV 航行控制模塊,UUV 航行控制模塊按照指令執行動作,實現UUV 的運動控制;UUV航行控制模塊將自身狀態信息反饋給狀態報告模塊,狀態信息按照遙控協議編碼后經北斗通信模塊發送給主控端。主控端接收UUV 經北斗導航衛星傳輸的數據,按照遙控協議處理數據,提取UUV 狀態信息,UUV 控制決策模塊根據UUV 的信息制定下一步控制指令。整個系統的控制流程如圖1 所示。

圖1 基于北斗導航系統的UUV 遙控系統控制流程
系統軟件由主控端和被控端兩部分組成。主控端發送控制指令給被控端,接收被控端傳回的應答信息,根據返回的信息發送后續指令; 被控端接收主控端的控制指令,根據指令執行相應的動作,向主控端發送自身狀態信息,向主控端報告指令執行情況。主控端能實時顯示UUV 的狀態信息、位置信息、指令執行情況。主控端利用電子海圖實現圖形化顯示和指揮。當UUV 在水面工作時,北斗通信模塊啟動,將UUV 傳感器采集環境數據和UUV 自身工作狀況按照遙控協議預先設定的格式經北斗導航衛星傳輸到主控端。主控端將UUV 的當前位置、狀態和軌跡等信息以圖形化的方式現在電子海圖上。主控端根據UUV 的狀態信息自動或由人工判別并下發后續控制指令,控制UUV 的動作、姿態、運動方向和移動距離等。主控端顯示軟件基于電子海圖平臺。電子海圖用來實時顯示UUV 狀態信息,記錄UUV 的航行軌跡。主控端可以控制多批UUV,向每個UUV 發出不同指令,控制UUV 的運動。主控端也可以對UUV 進行編組,實現同一組UUV 一致動作。
UUV 遙控系統可由一個主控端和多個被控端通過北斗導航衛星系統互連而成。要使整個遙控系統有條不紊地工作,就要求每個終端必須遵守一些事先約定好的有關數據格式及時序等的規則。這些為實現遙控而建立的規則、約定就是遙控協議。遙控協議由3 個要素[9]組成: 語法、語義和時序。語法即控制指令和狀態信息的結構或格式;語義即需要發出何種控制指令,完成何種動作以及做出何種響應; 時序即遙控過程實現順序的詳細說明。
一套功能完善的遙控協議能確保系統可靠地實現對UUV 的控制功能。遙控協議需要解決的問題:一是對指令集進行規范說明,確保指令的完備性滿足UUV 控制需要。指令集大致分為動作指令、狀態反饋指令、定位指令、時間統一指令。二是需要對指令和信息的格式進行規范說明,確保雙方能正確理解指令和信息。三是需要包含時間統一機制和指令延遲處理機制,需要解決信息傳輸時間延遲對UUV 控制的精度影響和信息受干擾丟失對UUV 控制的影響等問題。
根據遙控系統的功能需求,遙控軟件主要用到GIS 技術、串口通信技術和多線程技術。
系統基于GIS 平臺,能實現地圖顯示、計算和分析等功能。本系統采用TopMap ActiveX 作為GIS 平臺。TopMap ActiveX 是組件式地理信息系統開發平臺,產品包括TopMap ActiveX 主控件、全圖瀏覽定位的鳥瞰圖控件、屬性列表編輯控件、地圖圖層列表及管理控件等,適用于單機及局域網、客戶端/服務器模式的地理信息系統應用開發。在面向對象的可視化編程語言(如VB、VB.NET、C#、VC 等)中插入TopMap ActiveX 組件,就可實現地理信息系統功能[10]。
安裝完TopMap ActiveX 后,即可在Visual Studio2010 創建的項目中引入TopMap ActiveX 組件。在Visual Studio2010的開發界面里選擇工具箱/組件,在空白處右鍵,選擇“選擇項…”。選擇COM 組件下的TopMap ActiveX GIS Control Module V6。在工具箱的組件下就會出現TopMap ActiveX GIS Control Module V6。鼠標選中TopMap ActiveX GIS Control Module V6,在窗體中按下左鍵拖動鼠標繪制大小合適的矩形,松開左鍵,就在窗體中添加了TopMap 地圖組件。
加載地圖用下面的代碼實現:
TGMAPX1.MapLoad("d: mapsMap06.TGF");
顯示地圖:
TGMAPX1.DrawMapFull();
設置某個圖層為動態圖層后,由于動態圖層提供了繪制圖層(DrawMapDynamic)的方法,而不需要重新繪制整個地圖,所以加快了地動態圖層刷新圖的繪制速度。對某個圖層進行了實體添加操作時,在添加實體的同時會在地圖上看到添加的實體,而這時顯示范圍是不會發生變化的,在這種情況下,就可以采用刷新動態圖層的繪制方法。除添加實體外,實體移動、實體閃爍等等都可以采用動態圖層方法。地圖視野范圍發生改變,如放大,縮小等整個地圖視野發生改變,在這種情況下不可以采用動態圖層刷新。
TGMAPX1. LayerSet (0,TGMAPXLib. emLayerFlag. ETGLayerIsDynamic,True);
TGMAPX1.DrawMapDynamic();
用TGOFeatureSymbol 繪制UUV 目標(點實體對象)。
TGOFeatureSymbol pFeatureSymbol = new TGOFeatureSymbolClass();
TGORecordSet RecordSet=new TGORecordSetClass();
//設置點實體樣式
pFeatureSymbol.SymStyle.ForeColor.R=125;
pFeatureSymbol.SymStyle.ForeColor.G=240;
pFeatureSymbol.SymStyle.ForeColor.B=255;
pFeatureSymbol.SymStyle.Lib=0;
pFeatureSymbol.SymStyle.index=4;
pFeatureSymbol.Symbol.x=lon;
pFeatureSymbol.Symbol.y=lat;
RecordSet.AddNew();
RecordSet.feature=pFeatureSymbol;
RecordSet.Close();
TMAPX1.DrawMapFull();
用TGOFeaturePolyline 繪制UUV 航線軌跡。
TGOFeaturePolyline pFeaturePolyline = new TGOFeature-PolylineClass ();
TGOPoints pts =new TGOPointsClass();
TGOPoint pt=new TGOPointClass ();
pt.x =lon1;
pt.y = lat1;
pts.Add(-1,pt);
pt.x =lon2;
pt.y = lat2;
pts.Add(-1,pt);
//把點序列添加到線
pFeaturePolyline.polyline.parts.Add(-1,pts);
RecordSet.AddNew();
RecordSet.feature=pFeaturePolyline;
RecordSet.Close();
TMAPX1.DrawMapFull();
在該系統中采用TopMap ActiveX 組件實現各種GIS 功能包括UUV 定位、航跡顯示、距離計算、速度推算、位置推算等功能。
計算機通過串口與北斗終端連接。指令和數據均通過串口來傳輸。Visual Studio2010 中的命名空間System. IO.Prots 提供了SerialPort 類來實現對串口的訪問。SerialPort 類支持同步I/O 和事件驅動I/O。
使用該類需要先引用:using System.IO.Ports;
創建串口對象:mserialPort = new SerialPort();
設置串口屬性值:
mserialPort.PortName =“com1”;
mserialPort.BaudRate = 9 600;
mserialPort.Parity = Parity.None;
mserialPort.DataBits = 8;
mserialPort.StopBits =StopBits.One;
mserialPort.Handshake = Handshake.None;
設置串口讀寫超時值:
mserialPort.ReadTimeout = 500;
mserialPort.WriteTimeout = 500;
打開串口:mserialPort.Open();
獲取當前計算機的串口名稱數組:
mserialPort.GetPortNames();
讀寫串口:mserialPort.read(),mserialPort.write()
系統要具有多任務、多線程和實時監控功能。C#能很好實現多任務和多線程編程。C#能實現操作系統級別的實現數據監測功能,提供了較高的實時性。
在C#中system.threading 命名空間提供了進行多線程編程的類和接口。常用的實現多線程方法有thread、threadpool和timer。另外C#中的backgroundworker 組件提供了最簡單的一種多線程解決方法[11]。
Thread 的用法如下所示:

priority 指定一個線程相對于另一個線程的相對優先級。ThreadState 定義線程組所有可能的執行狀態。一旦線程被創建,它就至少處于其中一個狀態中,直到終止。
threadpool 方法相對thread 較簡單,它適應于一些需要多個線程而又較短任務,它的缺點是對創建的線程不能加以控制,也不能設置其優先級。threadpool.queueuserworkitem(new WaitCallback(ThreadProc))將方法排入隊列等待線程池線程變得可用時執行。
timer 以指定的時間間隔執行方法。使用TimerCallback委托指定Timer 執行的方法。計時器委托在構造計時器時指定,并且不能更改。此方法不在創建計時器的線程上執行,而是在系統提供的threapool 線程上執行。構造計時器時可以指定在第一次執行方法之前等待的時間以及此后的執行期間等待的時間。Change 方法用于更改這些值或禁用計時器。
C#中的backgroundworker 組件提供了最簡單的一種多線程解決方法[11]。該組件在應用程序的界面線程的后臺執行耗時的操作。上傳和下載、訪問數據庫、讀寫磁盤文件等需要很長執行時間的操作可能導致用戶界面在操作運行時無法響應。BackgroundWorker 組件可以解決這些問題。使用BackgroundWorker 組件,先定義要在后臺執行的輔助方法,然后調用RunWorkerAsync 方法。在輔助方法以異步方式運行的同時,界面線程繼續正常運行。該方法運行完畢,BackgroundWorker 激發RunWorkerCompleted 事件向調用線程發出警報。
BackgroundWorker 類的DoWork 事件處理程序采用一個DoWorkEventArgs 參數,該參數具有Argument 屬性。此屬性接收來自RunWorkerAsync 的參數,并可以傳遞至DoWork 事件處理程序中調用的輔助方法。
C#中的FileSystemWatcher 組件提供對文件的實時監控[11]。使用FileSystemWatcher 監視指定目錄中的更改。可監視指定目錄中的文件或子目錄的更改。可以創建一個組件來監視本地計算機、網絡驅動器或遠程計算機上的文件。Filter 屬性設置為空字符串("")或使用通配符(“* .* ”)可以監視所有文件中的更改,將Filte 屬性設置為某個文件名即可監視該文件。將Filter 屬性設置為“* .txt”即可監視特定類型文件中的更改。監視文件或目錄的Attributes、Last-Write日期和時間或Size 方面的更改可通過將NotifyFilter 屬性設置為NotifyFilters 枚舉中的某個或某一組值來實現。Windows 操作系統在FileSystemWatcher 創建的緩沖區中通知組件文件發生更改。如果短時間內有很多更改,則緩沖區可能會溢出。這將導致組件失去對目錄更改的跟蹤。為防止緩沖區溢出,可使用FileSystemWatcher. NotifyFilter 和File-SystemWatcher.IncludeSubdirectories 屬性篩選掉不想要的更改通知。也可以通過FileSystemWatcher. InternalBufferSize 屬性增加內部緩沖區的大小。但緩沖區來自無法換出到磁盤的非頁面內存,增加緩沖區大小的成本較大,所以將緩沖區保持大小適中,以便不會丟失任何文件更改事件。
在該系統的設計中采用backgroundworker 組件實現對UUV 的指令發送、位置推算等操作,采用FileSystemWatcher組件實現UUV 回傳數據的監測和處理操作,采用thread 類實現多批UUV 目標的定位和通信。
基于“北斗”導航系統的UUV 遙控系統為UUV 管理控制功能國產化提供了一個新的發展方向。由于UUV 遙控系統依托北斗導航系統實現控制指令和感知信息的傳遞和協同,既可迅速確定UUV 位置信息,又可遠程傳遞各種控制指令和UUV 探測的信息以及UUV 自身狀態數據,極大地增強了地面指揮中心對UUV 的遙控能力并拓展了UUV 的活動范圍。
[1]徐常凱,郭瑞勇,郭軍.基于北斗衛星的軍事物流通信系統研究[J].物流技術,2009,28(9):147-149.
[2]江彩英,黃永玉,謝丹,等.北斗衛星應急通信傳輸試點建設[J].氣象科技,2013,41(5):857-860.
[3]龐佑軍.基于北斗衛星導航的搜救系統原理與構型[J].航空電子技術,2013(4):7-8.
[4]唐金元,于潞,王思臣.北斗衛星導航定位系統應用現狀分析[J].全球定位系統,2008(2):26-27.
[5]于天澤.北斗衛星導航定位技術在我國鐵路應用探討[J].中國鐵路,2013(4):4-5.
[6]吳才聰,蘇懷洪,褚天行,等.基于北斗的移動應急監控與指揮技術[J].數字通信世界,2011(12):60-61.
[7]李經.基于AIS 的艦艇編隊避碰技術研究[J].艦船電子工程,2010(8):69-70.
[8]于光峰.船載AIS 信息采集與解碼技術研究[J].電子技術與軟件工程,2013(21):91-92.
[9]Andrew S.Tanenbaum.Computer networks[M].北京:清華大學出版社,2001:17-20.
[10]北京慧圖信息科技有限公司.TopMap ActiveX 開發幫助[EB/OL].http://www.topmap.com.cn,2011.
[11]Microsoft.Microsoft Help Library[EB/OL],http://www.microsoft.com/zh-cn/download/developer-tools.aspx,2010.