路振民,邵瓊玲,宋方
摘 ?要: 基于嵌入式Linux,使用UM220和TE6410開發(fā)板,完成了北斗二代接收機的應用開發(fā)。通過嵌入式Linux和Qt/E的移植,實現(xiàn)了Qt的GUI界面顯示,利用Linux多線程的特點,完整實現(xiàn)了NMEA 數(shù)據(jù)的接收、處理、顯示以及可視星的星座圖顯示,對北斗二代系統(tǒng)終端的開發(fā)有一定的借鑒意義。
關鍵詞: 北斗二代系統(tǒng); 嵌入式Linux; 應用開發(fā); 數(shù)據(jù)接收
中圖分類號: TN927+.2?34; TP311.1; V19 ? ? ? ? ? ?文獻標識碼: A ? ? ? ? ? 文章編號: 1004?373X(2014)23?0155?04
Application development of BD2 receiver based on embedded Linux
LU Zhen?min1, SHAO Qiong?ling2, SONG Fang3
(1. Company of Postgraduate Management, the Academy of Equipment, Beijing 101416, China;
2. Department of Space Equipment, the Academy of Equipment, Beijing 101416, China; 3. Detachment 54, Unit 73678 of PLA, Xiamen 361009, China)
Abstract: In this paper, the application development of BD?2 receiver base on embedded Linux was performed on UM220 module and TE6410 board. By transplantation of the embedded Linux and Qt/E, the Qt GUI interface display was realized. NMEA data receiving, processing, display and constellation show of the visible satellite were completely implemented by means of the Linux multithreaded characteristics. It has certain reference significance for the development of BD?2 terminal.
Keywords: BD2 receiver; embedded Linux; application development; data acceptance
0 ?引 ?言
隨著北斗二代系統(tǒng)在國內(nèi)及周邊區(qū)域無源定位的實現(xiàn)[1],北斗二代終端的設計及應用也逐漸成為研究熱點。
Linux可在GNU公共許可權限下免費獲得,并且符合POSIX標準[2]。采用開源的嵌入式Linux作為嵌入式操作系統(tǒng),可以有效避免關于版權的糾紛,節(jié)省了大量的開發(fā)費用[3]。同時,嵌入式Linux還可以根據(jù)應用需求進行內(nèi)核裁剪,可應用于多種硬件平臺。
因此,本文提出基于開源的嵌入式Linux系統(tǒng),實現(xiàn)了北斗無源定位數(shù)據(jù)的接收、提取,同時采用QT/E進行軟件界面設計,實現(xiàn)數(shù)據(jù)的顯示,滿足了北斗接收機應用的基本需求。通過該方法,有效地降低了北斗接收機的開發(fā)成本,同時對北斗接收機的開發(fā)具備一定的借鑒意義。
1 ?硬件平臺介紹
本文所采用的硬件開發(fā)平臺為UM220導航模塊和TE6410開發(fā)板。
其中UM220為BD/GPS雙系統(tǒng)導航模塊,可同時接收BD2 B1、GPS L1兩個頻點的信號,進行接收、解調、解算,生成定位相關信息,并從串口輸出NMEA(National Marine Electronics Association)數(shù)據(jù)。
TE6410開發(fā)板采用基于ARM11的S3C6410作為主控制器,通過串口的控制完成數(shù)據(jù)的讀取,在運行嵌入式Linux的基礎上,實現(xiàn)了數(shù)據(jù)的提取和顯示。
本文采用的硬件平臺工作原理圖如圖1所示。
<;E:\2014年23期\2014年23期\Image\42t1.tif>;
圖1 硬件平臺組成框圖
2 ?開發(fā)環(huán)境搭建
2.1 ?嵌入式Linux介紹
嵌入式Linux是運行在嵌入式設備上的Linux,是根據(jù)硬件設備進行定制的一種小型操作系統(tǒng)[2],由內(nèi)核(kernel)及部分系統(tǒng)模塊組成。
嵌入式Linux主要有跨平臺、可裁剪、移植性好、開源、支持多任務多進程等優(yōu)點,是用途最廣,裝備最多的嵌入式操作系統(tǒng)[4]。
2.2 ?嵌入式Linux移植
本文所述的軟件開發(fā)環(huán)境是指運行在虛擬機上的Ubuntu 12,并已安裝好gcc, g++,arc?linux?gcc, arc?linux?g++編譯器和應用程序QT4.8。
Linux目前最新的版本是3.15,考慮到穩(wěn)定及兼容性,本文采用Linux版本為2.6。下載并解壓內(nèi)核源碼后,在Ubuntu終端中進入源碼目錄,輸入命令“make menuconfig ARCH=arm”,之后系統(tǒng)進入內(nèi)核配置界面endprint
進入System Type選項的子菜單ARM system type,選擇Samsung S3C64XX。保存退出,這里選擇S3C64XX系列的默認內(nèi)核配置。
輸入命令“make zImage”,進行內(nèi)核編譯。編譯完成后,在目錄“arch/arm/boot”中可找到編譯好的內(nèi)核映像zImage。
Linux系統(tǒng)啟動的一般過程包括引導內(nèi)核、啟動內(nèi)核和啟動初始化程序等[5],因此運行一個完整的嵌入式操作系統(tǒng)除內(nèi)核外,還需要bootloader和文件系統(tǒng)的支持。
這里選擇的bootloader和文件系統(tǒng)分別是Uboot1.6和Yaffs2。因bootloader和文件系統(tǒng)的編譯不是本文重點,這里不再贅述
2.3 ?Qt/E簡介
Qt作為跨平臺的圖形界面開發(fā)平臺,可以直接建立在簡單的幀緩沖驅動上,并且有良好的可配置,可裁剪特性,因此也經(jīng)常用在嵌入式系統(tǒng)上[6]。
Qt/Embedded Linux(即Qt/E或Qtopia)是為嵌入式Linux優(yōu)化過的Qt版本。Qt/E提供了與Qt的桌面系統(tǒng)相同的API(應用程序接口),因此任何標準的Qt應用程序都可以被重新編譯到Qt/E上進行運行[4]。
Qt/E圖形引擎的基礎是圖形緩沖幀,它是一種采用mmap系統(tǒng)調用的驅動程序接口,在這個接口的支持下,系統(tǒng)屏幕才能顯示內(nèi)容[7]。
2.4 ?Qt/E移植
在運行Qt/E的API進行應用程序編寫和調試之前,還有兩項很重要的工作要做:
首先,必須編譯和安裝Qt/E的開發(fā)包,以Qt4.4.3為例,下載源碼并解壓后,開啟終端并進入源碼目錄下的configure子目錄,依次運行“make”和“make install”命令。
編譯完成后,子目錄“builddir/image”下的所有文件就是Qt4.4.3的運行文件,本質上這是Qt/E的一個文件系統(tǒng)。將其復制到開發(fā)板文件系統(tǒng)的opt目錄下。
同時,也生成了移植Qt程序所需要的交叉編譯工具,即 “builddir/sdk/qtopiacore/target/bin”下的qmake程序。
在應用程序編寫完成后,使用qmake工具創(chuàng)建Makefile,然后輸入指令“gedit Makefile”,在CFLAGS和CXXFLAGS的等號后面添加“?fno?rtti”參數(shù),該參數(shù)表示禁用運行時類型信息,可降低程序的資源占用,有效提高程序運行效率。
修改完Makefile后,輸出命令“make”即可完成程序編譯。
3 ?應用程序開發(fā)
作為北斗二代接收機的一款應用,首先必須實現(xiàn)NMEA數(shù)據(jù)的獲取,然后對數(shù)據(jù)進行處理,提取有用的數(shù)據(jù),并使用Qt的API函數(shù),實現(xiàn)定位數(shù)據(jù)的顯示、衛(wèi)星星座圖顯示以及地圖上定位點的顯示。
3.1 ?串口設備的控制
Qt本身提供了用于串口控制的頭文件“termios.h”,該頭文件聲明了一個結構體用于串口的控制,同時宏定義了一些控制變量。
由于UM220默認串口輸出波特率為9 600 b/s,數(shù)據(jù)位8位,停止位1,無校驗位[8],硬件連接串口使用串口1,因此可在宏定義中進行如下定義:
#define BAURATE B9600
#define RS_DEVICE "/dev/ttySAC1"
使用頭文件中的結構體必須先定義:
Struct termios Tioset;
在各項定義準備好之后,就可以打開串口了,下面語句以讀寫的方式打開串口1,打開成功返回0,失敗返回-1:
fd=open(RS_DEVICE,0_RDWR);
串口成功打開后,則按照UM220的默認值進行設置,如下:
Tioset.c_cflag=BAURATE|CS8|CL0CSAL|CREAD;
Tioset.c_iflag|=IGNPAR; ?//忽略奇偶
以上設置完成后,還可以用同樣方式設置串口讀寫字符的速度和單次讀寫字符數(shù)量等。
關閉串口使用close(fd)函數(shù)。
3.2 ?NMEA數(shù)據(jù)的接收
串口打開完畢后,就可以準備讀寫數(shù)據(jù)了,寫入數(shù)據(jù)比較簡單,使用write()函數(shù)寫入到緩存即可,下面語句就從串口輸出了字符串“RS 232 Data”。
write(fd,″RS 232 Data″,10);
讀數(shù)據(jù)函數(shù)為read(),可從緩存讀出指定長度的字符,返回值為實際讀取長度,如下:
res=read(fd,buf,1024);
考慮到讀取定位數(shù)據(jù)是一個連續(xù)的過程,因此可將串口的控制及數(shù)據(jù)的接收以多線程的方式運行。
開啟線程,需引用頭文件QThread,該頭文件包含線程類QThread的聲明,以單繼承的方式生成一個新類,這樣,新類就繼承了QThread的所有方法。
線程的開啟可使用start()函數(shù),可在線程的實際執(zhí)行函數(shù)內(nèi)包含串口控制及數(shù)據(jù)讀寫,這樣就可通過控制線程的各項參數(shù)來間接完成以上功能。
圖2顯示了讀取到的部分數(shù)據(jù)。
<;E:\2014年23期\2014年23期\Image\42t2.tif>;
圖2 串口數(shù)據(jù)讀取
3.3 ?定位的數(shù)據(jù)的顯示
當數(shù)據(jù)讀取成功后,需要根據(jù)NMEA格式進行處理。NMEA格式采用Unicore協(xié)議,該協(xié)議中,輸入的語句統(tǒng)稱為消息,每條消息均為全ASCII字符組成的字符串。所有消息都以“$”開始,后緊跟消息名,之后有一定數(shù)量的參數(shù)或數(shù)據(jù),消息名與數(shù)據(jù)之間均以逗號進行分隔[6]。endprint
NEMA格式對每一種數(shù)據(jù)類型都有嚴格的定義,其中位置數(shù)據(jù)格式如下:
$BDGLL,Lat,N,Lon,E,time,valid,Mode*cs
例子:$BDGLL,4002.2178,N,11618.1057,E,123400.00,A,A*5B
各部分參數(shù)含義[9]見表1。
表1 定位數(shù)據(jù)格式部分參數(shù)含義
[參數(shù)名\&;描述\&;參數(shù)名\&;描述\&;BDGLL\&;BD2系統(tǒng)單獨
定位的地理位置\&;time\&;UTC 時間,格式為hhmmss.sss\&;Lat\&;緯度\&;Valid\&;位置有效標識\&;N\&;北緯或南緯指示\&;Mode\&;定位模式\&;Lon\&;經(jīng)度\&;A*cs\&;校驗和\&;E\&;東經(jīng)或西經(jīng)指示\&;\&;\&;]
定位精度因子信息的數(shù)據(jù)格式如下:
$BDGSA,Smode,F(xiàn)s,sv1,sv2,sv3,sv4,sv5,sv6,sv7,sv8,sv9,sv10,sv11,sv12,PDOP,HDOP,VDOP*cs
例子:$BDGSA,A,167,124…5.572,2.788,4.824*36
各部分參數(shù)定義[6]見表2。
表2 GSA數(shù)據(jù)格式部分參數(shù)定義
[參數(shù)名\&;描述\&;參數(shù)名\&;描述\&;BDGSA\&;GNSS精度因子與有效衛(wèi)星信息\&;PDOP\&;位置精度因子\&;Smode\&;定位模式指定狀態(tài)\&;HDOP\&;水平精度因子\&;Sv1~Sv12\&;參與定位的衛(wèi)星號\&;VDOP\&;垂向精度因子\&;]
根據(jù)以上格式,對接收到的數(shù)據(jù)進行字符串處理,提取有用信息,即可進行顯示,如圖3所示。
<;E:\2014年23期\2014年23期\Image\42t3.tif>;
圖3 定位數(shù)據(jù)顯示
3.4 ?星座圖的顯示
Qt的視圖體系包括一個由QGraphicsScenec充當?shù)膱鼍凹坝梢恍㏎GaraphicItem的子類充當場景中的項。QGraphicView是一個控件,可顯示場景。GraphicView系統(tǒng)主要由QGraphicScene,QGraphicItem,QGraphicView組成[10]。他們之間的關系是場景是基礎,項用來管理視圖,并通過添加到場景中來完成顯示。
對NEMA中的GSV語句進行字符串分割,即可得到可視星信息,主要包括衛(wèi)星的編號、仰角和方位角。
星座圖的顯示,首先要進行坐標轉換,即將衛(wèi)星的仰角和方位角,通過簡單的幾何公式轉換為星座圖的坐標。
然后,定義類MySat,同樣以繼承的方式使用頭文件“QGraphicsItem.h”中定義的類及方法,結合QPainter函數(shù),可以很方便地將可視星以圖形化的方式表現(xiàn)出來。
Class MySat:public QGraphicsItem
之后,分別使用Qpainter類的drawPixmap()函數(shù)和drawText()函數(shù)在進行畫圖。
Pos_ball=axis_transform(FYJ,BPJ);
Painter.drawPixmap(pos_ball,pix);
最后在控件QGraphicView里顯示場景,并使用場景的addItem()方法來實現(xiàn)MySat類的畫圖功能。代碼如下:
MySat *mysat=new MySat;
Scene?>;addItem(mysat);
Ui?>;graphicview.>;setScene(scene);
這樣,就實現(xiàn)了星座圖在控件里的顯示,顯示效果如圖4所示。
<;E:\2014年23期\2014年23期\Image\42t4.tif>;
圖4 衛(wèi)星星座圖顯示
4 ?結 ?語
本文實現(xiàn)了從S3C6410開發(fā)板的串口讀取NEMA數(shù)據(jù),并進一步完成了定位數(shù)據(jù)提取和衛(wèi)星星座圖顯示。經(jīng)測試,程序運行穩(wěn)定,定位精度優(yōu)于10 m,驗證了北斗二代接收機在Linux終端上開發(fā)的可行性,對北斗終端應用的發(fā)展有一定的借鑒意義。
參考文獻
[1] 中國衛(wèi)星導航系統(tǒng)管理辦公室.北斗衛(wèi)星導航系統(tǒng)發(fā)展報告(2.1版)[M].北京:中國衛(wèi)星導航系統(tǒng)管理辦公室,2012.
[2] 吳林城,胡慶新,李冬.基于Qt/Embedded的圖形用戶界面開發(fā)[J].儀器儀表學報,2009,30(6):371?374.
[3] 邵海東,周鵬,胡南軍,等.基于Linux的嵌入式系統(tǒng)設計與實現(xiàn)[J].計算機工程,2002(6):262?264.
[4] 何永琪.嵌入式Linux系統(tǒng)實用開發(fā)[M].北京:電子工業(yè)出版社,2010.
[5] 楊水清,張劍,施云飛.精通ARM嵌入式Linux系統(tǒng)開發(fā)[M].北京:電子工業(yè)出版社,2012.
[6] BLANCHETTE J, SUMMERFIELD M.C++ GUI Qt4編程[M]. 2版.閆鋒欣,曾泉人,張志強,譯.北京:電子工業(yè)出版社,2012.
[7] 吳子平.基于Qt/E的嵌入式GUI技術研究與實現(xiàn)[D].荊州:長江大學,2012.
[8] 和芯星通有限公司.UM220用戶手冊[EB/OL].[2013?06?03].http://www.unicorecomm.com/down?64.aspx.
[9] 和芯星通有限公司.UM220北斗/GPS雙系統(tǒng)導航授時模塊數(shù)據(jù)接口協(xié)議[EB/OL].[2013?11?06].http://www.unicorecomm.com/down?64.aspx.
[10] 廖熹,易克非.基于嵌入式Linux系統(tǒng)下的Qt測試軟件開發(fā)[J].兵工自動化,2013(8):98?100.endprint
NEMA格式對每一種數(shù)據(jù)類型都有嚴格的定義,其中位置數(shù)據(jù)格式如下:
$BDGLL,Lat,N,Lon,E,time,valid,Mode*cs
例子:$BDGLL,4002.2178,N,11618.1057,E,123400.00,A,A*5B
各部分參數(shù)含義[9]見表1。
表1 定位數(shù)據(jù)格式部分參數(shù)含義
[參數(shù)名\&;描述\&;參數(shù)名\&;描述\&;BDGLL\&;BD2系統(tǒng)單獨
定位的地理位置\&;time\&;UTC 時間,格式為hhmmss.sss\&;Lat\&;緯度\&;Valid\&;位置有效標識\&;N\&;北緯或南緯指示\&;Mode\&;定位模式\&;Lon\&;經(jīng)度\&;A*cs\&;校驗和\&;E\&;東經(jīng)或西經(jīng)指示\&;\&;\&;]
定位精度因子信息的數(shù)據(jù)格式如下:
$BDGSA,Smode,F(xiàn)s,sv1,sv2,sv3,sv4,sv5,sv6,sv7,sv8,sv9,sv10,sv11,sv12,PDOP,HDOP,VDOP*cs
例子:$BDGSA,A,167,124…5.572,2.788,4.824*36
各部分參數(shù)定義[6]見表2。
表2 GSA數(shù)據(jù)格式部分參數(shù)定義
[參數(shù)名\&;描述\&;參數(shù)名\&;描述\&;BDGSA\&;GNSS精度因子與有效衛(wèi)星信息\&;PDOP\&;位置精度因子\&;Smode\&;定位模式指定狀態(tài)\&;HDOP\&;水平精度因子\&;Sv1~Sv12\&;參與定位的衛(wèi)星號\&;VDOP\&;垂向精度因子\&;]
根據(jù)以上格式,對接收到的數(shù)據(jù)進行字符串處理,提取有用信息,即可進行顯示,如圖3所示。
<;E:\2014年23期\2014年23期\Image\42t3.tif>;
圖3 定位數(shù)據(jù)顯示
3.4 ?星座圖的顯示
Qt的視圖體系包括一個由QGraphicsScenec充當?shù)膱鼍凹坝梢恍㏎GaraphicItem的子類充當場景中的項。QGraphicView是一個控件,可顯示場景。GraphicView系統(tǒng)主要由QGraphicScene,QGraphicItem,QGraphicView組成[10]。他們之間的關系是場景是基礎,項用來管理視圖,并通過添加到場景中來完成顯示。
對NEMA中的GSV語句進行字符串分割,即可得到可視星信息,主要包括衛(wèi)星的編號、仰角和方位角。
星座圖的顯示,首先要進行坐標轉換,即將衛(wèi)星的仰角和方位角,通過簡單的幾何公式轉換為星座圖的坐標。
然后,定義類MySat,同樣以繼承的方式使用頭文件“QGraphicsItem.h”中定義的類及方法,結合QPainter函數(shù),可以很方便地將可視星以圖形化的方式表現(xiàn)出來。
Class MySat:public QGraphicsItem
之后,分別使用Qpainter類的drawPixmap()函數(shù)和drawText()函數(shù)在進行畫圖。
Pos_ball=axis_transform(FYJ,BPJ);
Painter.drawPixmap(pos_ball,pix);
最后在控件QGraphicView里顯示場景,并使用場景的addItem()方法來實現(xiàn)MySat類的畫圖功能。代碼如下:
MySat *mysat=new MySat;
Scene?>;addItem(mysat);
Ui?>;graphicview.>;setScene(scene);
這樣,就實現(xiàn)了星座圖在控件里的顯示,顯示效果如圖4所示。
<;E:\2014年23期\2014年23期\Image\42t4.tif>;
圖4 衛(wèi)星星座圖顯示
4 ?結 ?語
本文實現(xiàn)了從S3C6410開發(fā)板的串口讀取NEMA數(shù)據(jù),并進一步完成了定位數(shù)據(jù)提取和衛(wèi)星星座圖顯示。經(jīng)測試,程序運行穩(wěn)定,定位精度優(yōu)于10 m,驗證了北斗二代接收機在Linux終端上開發(fā)的可行性,對北斗終端應用的發(fā)展有一定的借鑒意義。
參考文獻
[1] 中國衛(wèi)星導航系統(tǒng)管理辦公室.北斗衛(wèi)星導航系統(tǒng)發(fā)展報告(2.1版)[M].北京:中國衛(wèi)星導航系統(tǒng)管理辦公室,2012.
[2] 吳林城,胡慶新,李冬.基于Qt/Embedded的圖形用戶界面開發(fā)[J].儀器儀表學報,2009,30(6):371?374.
[3] 邵海東,周鵬,胡南軍,等.基于Linux的嵌入式系統(tǒng)設計與實現(xiàn)[J].計算機工程,2002(6):262?264.
[4] 何永琪.嵌入式Linux系統(tǒng)實用開發(fā)[M].北京:電子工業(yè)出版社,2010.
[5] 楊水清,張劍,施云飛.精通ARM嵌入式Linux系統(tǒng)開發(fā)[M].北京:電子工業(yè)出版社,2012.
[6] BLANCHETTE J, SUMMERFIELD M.C++ GUI Qt4編程[M]. 2版.閆鋒欣,曾泉人,張志強,譯.北京:電子工業(yè)出版社,2012.
[7] 吳子平.基于Qt/E的嵌入式GUI技術研究與實現(xiàn)[D].荊州:長江大學,2012.
[8] 和芯星通有限公司.UM220用戶手冊[EB/OL].[2013?06?03].http://www.unicorecomm.com/down?64.aspx.
[9] 和芯星通有限公司.UM220北斗/GPS雙系統(tǒng)導航授時模塊數(shù)據(jù)接口協(xié)議[EB/OL].[2013?11?06].http://www.unicorecomm.com/down?64.aspx.
[10] 廖熹,易克非.基于嵌入式Linux系統(tǒng)下的Qt測試軟件開發(fā)[J].兵工自動化,2013(8):98?100.endprint
NEMA格式對每一種數(shù)據(jù)類型都有嚴格的定義,其中位置數(shù)據(jù)格式如下:
$BDGLL,Lat,N,Lon,E,time,valid,Mode*cs
例子:$BDGLL,4002.2178,N,11618.1057,E,123400.00,A,A*5B
各部分參數(shù)含義[9]見表1。
表1 定位數(shù)據(jù)格式部分參數(shù)含義
[參數(shù)名\&;描述\&;參數(shù)名\&;描述\&;BDGLL\&;BD2系統(tǒng)單獨
定位的地理位置\&;time\&;UTC 時間,格式為hhmmss.sss\&;Lat\&;緯度\&;Valid\&;位置有效標識\&;N\&;北緯或南緯指示\&;Mode\&;定位模式\&;Lon\&;經(jīng)度\&;A*cs\&;校驗和\&;E\&;東經(jīng)或西經(jīng)指示\&;\&;\&;]
定位精度因子信息的數(shù)據(jù)格式如下:
$BDGSA,Smode,F(xiàn)s,sv1,sv2,sv3,sv4,sv5,sv6,sv7,sv8,sv9,sv10,sv11,sv12,PDOP,HDOP,VDOP*cs
例子:$BDGSA,A,167,124…5.572,2.788,4.824*36
各部分參數(shù)定義[6]見表2。
表2 GSA數(shù)據(jù)格式部分參數(shù)定義
[參數(shù)名\&;描述\&;參數(shù)名\&;描述\&;BDGSA\&;GNSS精度因子與有效衛(wèi)星信息\&;PDOP\&;位置精度因子\&;Smode\&;定位模式指定狀態(tài)\&;HDOP\&;水平精度因子\&;Sv1~Sv12\&;參與定位的衛(wèi)星號\&;VDOP\&;垂向精度因子\&;]
根據(jù)以上格式,對接收到的數(shù)據(jù)進行字符串處理,提取有用信息,即可進行顯示,如圖3所示。
<;E:\2014年23期\2014年23期\Image\42t3.tif>;
圖3 定位數(shù)據(jù)顯示
3.4 ?星座圖的顯示
Qt的視圖體系包括一個由QGraphicsScenec充當?shù)膱鼍凹坝梢恍㏎GaraphicItem的子類充當場景中的項。QGraphicView是一個控件,可顯示場景。GraphicView系統(tǒng)主要由QGraphicScene,QGraphicItem,QGraphicView組成[10]。他們之間的關系是場景是基礎,項用來管理視圖,并通過添加到場景中來完成顯示。
對NEMA中的GSV語句進行字符串分割,即可得到可視星信息,主要包括衛(wèi)星的編號、仰角和方位角。
星座圖的顯示,首先要進行坐標轉換,即將衛(wèi)星的仰角和方位角,通過簡單的幾何公式轉換為星座圖的坐標。
然后,定義類MySat,同樣以繼承的方式使用頭文件“QGraphicsItem.h”中定義的類及方法,結合QPainter函數(shù),可以很方便地將可視星以圖形化的方式表現(xiàn)出來。
Class MySat:public QGraphicsItem
之后,分別使用Qpainter類的drawPixmap()函數(shù)和drawText()函數(shù)在進行畫圖。
Pos_ball=axis_transform(FYJ,BPJ);
Painter.drawPixmap(pos_ball,pix);
最后在控件QGraphicView里顯示場景,并使用場景的addItem()方法來實現(xiàn)MySat類的畫圖功能。代碼如下:
MySat *mysat=new MySat;
Scene?>;addItem(mysat);
Ui?>;graphicview.>;setScene(scene);
這樣,就實現(xiàn)了星座圖在控件里的顯示,顯示效果如圖4所示。
<;E:\2014年23期\2014年23期\Image\42t4.tif>;
圖4 衛(wèi)星星座圖顯示
4 ?結 ?語
本文實現(xiàn)了從S3C6410開發(fā)板的串口讀取NEMA數(shù)據(jù),并進一步完成了定位數(shù)據(jù)提取和衛(wèi)星星座圖顯示。經(jīng)測試,程序運行穩(wěn)定,定位精度優(yōu)于10 m,驗證了北斗二代接收機在Linux終端上開發(fā)的可行性,對北斗終端應用的發(fā)展有一定的借鑒意義。
參考文獻
[1] 中國衛(wèi)星導航系統(tǒng)管理辦公室.北斗衛(wèi)星導航系統(tǒng)發(fā)展報告(2.1版)[M].北京:中國衛(wèi)星導航系統(tǒng)管理辦公室,2012.
[2] 吳林城,胡慶新,李冬.基于Qt/Embedded的圖形用戶界面開發(fā)[J].儀器儀表學報,2009,30(6):371?374.
[3] 邵海東,周鵬,胡南軍,等.基于Linux的嵌入式系統(tǒng)設計與實現(xiàn)[J].計算機工程,2002(6):262?264.
[4] 何永琪.嵌入式Linux系統(tǒng)實用開發(fā)[M].北京:電子工業(yè)出版社,2010.
[5] 楊水清,張劍,施云飛.精通ARM嵌入式Linux系統(tǒng)開發(fā)[M].北京:電子工業(yè)出版社,2012.
[6] BLANCHETTE J, SUMMERFIELD M.C++ GUI Qt4編程[M]. 2版.閆鋒欣,曾泉人,張志強,譯.北京:電子工業(yè)出版社,2012.
[7] 吳子平.基于Qt/E的嵌入式GUI技術研究與實現(xiàn)[D].荊州:長江大學,2012.
[8] 和芯星通有限公司.UM220用戶手冊[EB/OL].[2013?06?03].http://www.unicorecomm.com/down?64.aspx.
[9] 和芯星通有限公司.UM220北斗/GPS雙系統(tǒng)導航授時模塊數(shù)據(jù)接口協(xié)議[EB/OL].[2013?11?06].http://www.unicorecomm.com/down?64.aspx.
[10] 廖熹,易克非.基于嵌入式Linux系統(tǒng)下的Qt測試軟件開發(fā)[J].兵工自動化,2013(8):98?100.endprint