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