摘 要:為了實現無人直升機地面監控站的三維可視化、三維監控和導航功能,提出一種使用World Wind Java技術嵌入無人直升機地面監控站的方法。首先對無人直升機地面監控站的總框架設計和各個功能模塊進行了說明,然后對World Wind Java二次開發技術進行了詳細說明,重點分析了如何利用World Wind Java開發套件實現無人直升機地面監控站的三維數據管理、圖層訪問及控制、航跡顯示和規劃。最后用實例證明該地面監控站應用程序的可行性,以及它具有的良好的可靠性、可移植性和可擴展性。
關鍵詞:無人直升機;地面監控站;World Wind Java技術;三維可視化
中圖分類號:TP311.52文獻標識碼:A
文章編號:1004-373X(2010)02-051-04
Ground Control Station with Technology of World Wind Java for Unmanned Helicopter
CHEN Bin,PEI Hailong
(College of Automation Science and Engineering,South China University of Technology,Guangzhou,510640,China)
Abstract:To realize the functions of 3D visualization,3D supervision and navigation for a unmanned helicopter,ground control station embedded the technology of World Wind Java for unmanned helicopter is presented.Firstly,the overall architecture of ground control station for unmanned helicopter and each functional modules is introduced.Then,the secondary development technique of World Wind Java is explained in detail.How to use the World Wind Java development kit to achieve the 3D data management,layers accessing and control,flight_path display and planning are emphatically analyzed.Finally,a case of the ground control station is presented to verify feasibility of the application,and it has good reliability,transplantation and expansibility.
Keywords:unmanned helicopter;ground control station;technology of World Wind Java;3D visualization
0 引 言
近幾年無人直升機的快速發展,使其在民用和國防等諸多領域均得到了廣泛的應用。地面監控站是地面執行人員的系統核心,是無人直升機的指揮控制臺,在整個無人直升機的系統中起著至關重要的作用。提高地面監控站的信息化和三維可視化技術,使得無人直升機與地面執行人員友好的交互,是現今無人直升機地面監控站的一個設計目標。
三維可視化技術是顯示描述和理解真實世界特征的一種技術[1],也是一種數據表征的形式,目前已廣泛應用于地質、地理、國防軍事、生物科技等科學技術領域。三維可視化技術的強大交互能力在無人直升機的地面監控站發揮著重大的作用。借助可視化方面的優勢,實現了無人直升機的監控導航、自主起降、航跡規劃及顯示等功能,使其將各種飛行數據實時、快速、直觀地呈現給地面執行人員,保證無人直升機完成各項任務。
1 無人直升機地面監控站總框架
無人直升機地面監控站的總框架圖如圖1所示。
圖1 地面監控站框架圖
無人直升機的地面監控站基于便攜式PC機上,由于實時性要求較高,因此對便攜式PC的性能要求也相對較高。在框架圖中,地面監控站的主要責任是通過無線路由設備接收從無人直升機傳回地面的飛行數據和相關參數,通過解析協議進行解析后,將數據存入飛行數據庫,同時還通過儀表,圖表的形式將飛行數據直觀地表現出來,再通過World Wind嵌入到應用程序中,三維地顯示飛行數據,實時動態地顯示無人直升機的位置。當地面執行人員需要進行自主起降和航跡規劃等操作時,可以在World Wind三維視圖上進行起降點位置設置和路徑規劃,整個視圖界面友好,設置快捷,交互性強。
2 World Wind技術嵌入地面監控站
2.1 World Wind Java 軟件開發包[2]
World Wind Java是由美國國家航空與航天管理局開發中心開發的一個開源軟件開發套件,已廣泛用于三維地形仿真、地質地理研究、人口統計、全球氣候研究、三維真實場景仿真等[3],如圖2所示。
圖2 World Wind Java在各個科學領域的應用視圖
借助World Wind Java技術,使用三維地球來進行無人直升機的導航和場景顯示,是對World Wind進行的二次開發和應用,給無人直升機地面監控站應用程序提供三維地形地貌顯示,通過本地數據庫的高程數據和衛星圖片來渲染,將無人直升機飛行場景在視圖上真實地還原出來。
World Wind Java開發套件采用Java語言編寫,結合OpenGL(Open Graphics Library)進行底層三維圖形控制[4],可通過互聯網連接遠程服務器進行高程數據以及衛星圖片的下載,同樣提供離線后從本地數據庫提取三維數據的功能,以便能在互聯網絡無法連接時正常使用。
2.2 地面監控站應用程序設計
地面監控站有實時性高,可移植性好,可靠性強的要求,使用Java語言編寫地面監控站應用程序,進行面向對象設計,軟件結構上采用模塊化組件和多線程[5],既能滿足實時性要求,又便于維護升級,同時Java語言擁有跨平臺的能力,可以方便地在多個平臺上移植地面監控站的應用程序。地面監控站的應用程序設計框圖如圖3所示。
采用圖形化界面設計,提供一個可以與用戶交互的接口。用戶可通過鍵盤和鼠標進行系統事件和消息的驅動,完成交互過程。整個應用程序包括五大模塊。數據通信模塊負責與無人直升機之間的數據傳輸;遠程控制模塊負責地面控制參數校驗與發送;數據庫模塊負責無人直升機的飛行數據的存儲及其管理;數據儀表模塊負責顯示無人直升機的飛行姿態、位置、控制量等數據;World Wind顯示與導航模塊主要負責三維地形地貌顯示、無人直升機軌跡顯示和航跡規劃、三維飛行數據觀察等,它們在整個地面監控站中發揮著至關重要的角色。
圖3 地面監控站應用程序框圖
2.3 World Wind Java二次開發關鍵技術應用
World Wind的二次開發是在WWJ SDK(Soft Development Kit)開發套件的基礎上,它的整個軟件開發框架如圖4所示。使用WWJ SDK將三維地球應用程序嵌入無人直升機地面監控站中,為無人直升機提供實時動態的三維地形地貌觀測、無人直升機動態飛行軌跡和無人直升機航跡規劃等功能。
圖4 World Wind Java應用程序框架圖
2.3.1 強大的數據管理功能
World Wind Java開發套件有很強的數據管理功能,并且兼容多種地理空間數據格式,可以擁有在線和離線訪問功能,適合用戶在各種條件下方便使用。World Wind兼容的空間數據格式有.gtiff,.shp,.dem,.tab,.DWG,.DDS等。其中,比較常用的有.dem,.bil高程數據和.DDS柵格數據[6]。
在該地面監控站應用程序中,使用DDS柵格數據和bil高程數據相結合的方式,DDS柵格數據主要負責地面衛星圖片的紋理渲染,具有在線訪問地理數據服務器功能,可隨時下載最新的空間地理數據資源。
2.3.2 強大的圖層控制與訪問功能
在地面監控站應用程序中,World Wind Java SDK通過一個重量級的AWT組件WorldWindowGLCanvas來顯示World Wind 模型(三維地球和各個圖層)。該組件是獨立式的,能為應用程序提供三維地球和圖層的渲染,它包含了基本的圖層,如基礎圖像層(Basic Tiled Image Layer)、羅盤層(Compass Layer)、比例尺層(Scalebar Layer)、世界地圖層(World Map Layer)和著色層(Renderable Layer),同時還可以根據自己的需求增加圖層,例如要進行GPS跟蹤定位時,可以加入航跡標記層(Track Mark Layer);要加入網絡地圖服務器(Web Map Server)時,可以增加WMS層來對網絡地圖服務器的海量數據進行訪問和渲染[7]。相關代碼如下:
private WorldWindowGLCanvas wwd;//創建一個新的窗口渲染畫布
private StatusBar statusBar;//創建狀態欄
public AppPanel(Dimension canvasSize,boolean includeStatusBar)
{
super(new BorderLayout());
//初始化畫布
this.wwd = new WorldWindowGLCanvas();
this.wwd.setPreferredSize(canvasSize);
//創建一個三維模型
Model m =
(Model)WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
this.wwd.setModel(m);
//為窗口設置監聽器
this.wwd.addSelectListener(newClickAndGoSelectListener(this.getWwd(),WorldMapLayer.class));
//將畫布和狀態欄加入到應用程序窗體中
this.add(this.wwd,BorderLayout.CENTER);
if (includeStatusBar)
{
this.statusBar = new StatusBar();
this.add(statusBar,BorderLayout.PAGE_END);
this.statusBar.setEventSource(wwd);
}
}
為窗口設置好監聽器后,可以使用鼠標和鍵盤控制三維地球的縮放、旋轉、漫游等。對于自定義層的添加可以使用如下代碼來實現。
public static void insertBeforeCompass(WorldWindow wwd,Layer layer)
{
// 在Compass圖層之前將新的圖層加入到圖層列表中
int compassPosition = 0;
LayerList layers = wwd.getModel().getLayers();
for (Layer l:layers) {
if (l instanceof CompassLayer)
compassPosition = layers.indexOf(l);
}
layers.add(compassPosition,layer); }
層的表示可以通過層名和索引,在這里通過這兩種方式插入新的圖層,同時也可以通過層名和索引來訪問控制圖層。
2.3.3 航跡顯示和規劃功能
地面監控站的實時動態航跡顯示是一個重要的功能。WorldWind Java SDK有兩個封裝好的類TrackMarkerLayer和TrackPipesLayer對小型無人直升機的實時位置進行標記,這兩個類的不同之處就是前者可以使用自定義的標記物(圓點、方形等),后者使用實體線條來標記航跡。航跡跟蹤層與其他層一樣,相互之間都是獨立的,可以獨立顯示。實時航跡的實現可由小型無人直升機地面站實時接收機載系統的飛行方位信息,將這些方位信息存儲在一個列表中,每個方位加載所對應標記物在軌跡跟蹤層顯示出來,最后通過Update函數來實現軌跡的實時更新,相關代碼如下:
ArrayList
Marker marker = new BasicMarker(Position.fromDegrees(lat,lon,0),//將經緯度方位信息存儲標記里
attrs[(int) (Math.abs(lat) + Math.abs(lon)) % attrs.length]);
marker.setPosition(Position.fromDegrees(lat,lon,height));//設置標記物的位置(經度,維度,高度)
markers.add(marker);
final MarkerLayer layer = new MarkerLayer();//建立航跡跟蹤層
layer.setOverrideMarkerElevation(true);
layer.setKeepSeparated(1);
layer.setElevation(elevation);//設置層的高度
layer.setMarkers(markers);
insertBeforePlacenames(this.getWwd(),layer);
this.getLayerPanel().update(this.getWwd());//對航跡跟蹤層進行更新
航跡規劃是地面監控站最為關鍵的一部分,無人直升機航跡規劃是根據任務目標規劃滿足約束條件的飛行軌跡,規劃的目的是在適當的時間內計算出最優的飛行軌跡[8]。主要用于小型無人直升機的飛行任務,包括飛行航線、高度熟讀任務執行區域等。由于在建立三維地球模型中就有狀態欄信息,因此可在三維地圖上直接通過鼠標移動得到所在點的經緯度信息,這樣即可大大提高系統的可操作性。航跡點的規劃可以分為以下幾個功能:畫航點航線、修改航線、結束畫航線。在畫航跡點過程中,每畫一個點就可以從圖層中獲得經緯度信息,根據需要添加高度信息,同時顯示兩點之間的距離;修改航線主要是對于誤操作規劃的航跡點進行刪除、移動等操作;結束畫航線后,將航線規劃得到的方位信息保存起來發送到小型無人直升機的機載系統。相關的代碼如下:
private ArrayList
private final RenderableLayer layer;
private final Polyline line;
pubic class FlighPathBuilder(WorldWindow wwd,RenderableLayer lineLayer,Polyline polyline)
{
if (polyline != 1)
{
line = polyline;
}
else
{
this.line = new Polyline();//建立航跡曲線
this.line.setFollowTerrain(true);//航跡曲線跟隨地表形狀
}
//鼠標監聽器,鼠標動作時的響應函數
this.wwd.getInputHandler().addMouseListener(new MouseAdapter()
{
//鼠標點擊響應
public void mouseClicked()
//鼠標釋放響應
public void mouseRelesed()
//顯示航跡點距離響應
public void showDistance()
//刪除航跡點距離響應
public void deletePosition()
}//位置信息監聽器
this.wwd.addPositionListener(new PositionListener()
}
3 實驗結果與分析
無人直升機地面監控站應用程序使用標準Java語言編寫,編譯源代碼生成可執行文件,運行平臺為dell D630便攜式筆記本,操作系統為Fedora 8。經過長期的測試和修改,地面監控站具有較強可靠性,所有功能正常使用,同時還將應用程序移植到Windows平臺上進行測試,移植過程簡單方便,只要安裝好Java虛擬機,把相關可執行文件拷貝到目標主機即可。圖5,圖6為實際測試中的應用程序截面圖。
圖5 無人直升機地面監控站航跡規劃與導航圖
4 結 語
使用World Wind 技術的無人直升機地面監控站在實時監控及導航方面有很強的三維可視化優勢,能夠保證無人直升機各項任務的完成。地面監控站在航跡的實時顯示、航機規劃、組合定位及導航的過程中,具有直觀性,精確性和人性化。同時地面監控站的應用程序采用面向對象模塊化設計和多線程設計,符合系統的各項設計指標,可靠性、實時性和可移植性都得到了保證,具有很高的工程應用價值。
圖6 無人直升機地面監控站數字儀表圖
地面監控站應用程序在實際測試中各個方面表現良好,但是還有一些細節需要改進,如界面方面的美化,儀表的專業化,進一步加強地面監控站的友好性等。
參考文獻
[1]徐青.地形三維可視化技術[M].北京:測繪出版社,2000.
[2]Patrick Hogan.World Wind Java SDK [EB/OL].http://worldwind.arc.nasa.gov/Java/index.html.
[3]Rick Brownrigg,Tom Gaskins.Putting 3_D Earth into Your Applications and Web Pages[EB/OL].http://worldwind.arc.nasa.gov/Java/Javaone_2008_ts5523_v4.ppt.
[4]Dave Shreiner,Mason Woo,Jackie Neider.OpenGL編程指南[M].5版.北京:機械工業出版社,2006.
[5]\\Bill Lewis,Daniel J Berg.深入學習:Java多線程編程[M].關欣,史宇海,譯.北京:電子工業出版社,2000.
[6]史文中,吳立新,李清泉.三維空間信息系統模型與算法[M].北京:電子工業出版社,2007.
[7]Andolph Kim.World Wind Central.[EB/OL].http://forum.worldwindcentral.com.
[8]Doherty P,Haslum P,Heintz F,et al.A Distributed Architecture for Autonomous Unmanned Aerial Vehicle Experimentation[A].Proc.of the 7th International Symposium on Distributed Autonomous Robotic Systems\\.2004:221_230.
作者簡介 陳 鑌 男,1984年出生,碩士研究生。主要研究方向為無人直升機嵌入式軟件開發、三維可視化建模與應用。
裴海龍 男,1965年出生,副院長,教授,博士生導師。主要從事嵌入式系統、智能機器人系統、自適應自組織控制等方面的研究和教學工作。