基於Qt/Embedded的物流資訊終端導航定位功能設計

來源:互聯網
上載者:User

文章來源:http://www.eaw.com.cn/news/show.aspx?ClassID=44&ArticleID=9624

摘 要:本文介紹了Qt/Embedded圖形介面系統在嵌入式Linux系統和S3C2410平台的物流資訊終端上的移植與開發過程,以及在物流資訊終端上定位功能的系統設計方案和Qt/Embedded編程實現,並給出實驗結果。

Qt/Embedded是奇趣科技推出的基於Linux的嵌入式平台開發工具,是Qt的嵌入式版本。由於KDE等項目均使用Qt作為支援庫,所以許多基於Qt的X Windows程式可以非常方便地移植到Qt/Embedded版本上。Qt/Embedded具有物件導向、跨平台和介面設計方便美觀等優點,已得到了廣泛的應用。
本文針對當前物流行業終端定位功能的需求,提出與之相適應的物流終端定位功能實現方案,並利用Qt/Embedded,在基於嵌入式Linux和S3C2410的物流資訊化終端平台上對終端定位功能進行了初步實現。
  
軟硬體系統設計原理

基於現有網路建設的總體情況和物流配送過程中對定位元據的可靠性、連續覆蓋性、精度的要求,並綜合考慮各種定位技術的發展現狀及技術成熟度等級、實現成本等因素,本系統在物流配送網路中採用了GPS輔助定位系統,即GPS+CellID+RFID+圖形道路匹配相結合的定位技術。

系統的軟硬體功能框圖1所示,開發板CPU採用的是三星公司的S3C2410。該處理器內部整合了ARM公司ARM920T處理器核的32位微控制器。GPS模組利用RS232介面與開發板通訊,提供衛星定位訊號;GSM/GPRS模組提供通訊以及CELLID定位資訊擷取;RFID模組提供標籤資訊採集和RFID定位功能。終端通過GSM/GPRS通訊網路與物流資訊控制中心建立聯絡,提交相關資料擷取資訊和接收物流資訊控制中心指令。

圖1 系統軟、硬體功能框圖

系統採用嵌入式Linux作業系統,移植Qt/Embedded 3.3.4和SQLITE資料庫,採用Qt編程實現物流資訊化終端定位功能。

軟體系統設計

本文的軟體系統設計主要以S3C2410平台為核心,通過RS-232串口從GPS模組、GSM/GPRS模組、RFID模組提取定位資訊,加以分析轉換,並根據需要用於終端導航或通過GSM/GPRS網路提交給物流資訊控制中心。  

宿主機開發環境建立

由於目標平台資源所限,需要搭建交叉編譯環境,本系統開發過程中採用的平台如下:
宿主機:RED HAT 9.0
Qt/X11 3.3.4
Qt/Embedded 3.3.4
SQLITE 2.8.16
cross-2.95.3.tar.bz2
目標機:Linux Kernel 2.4.18
Qt/Embedded 3.3.4
SQLITE 2.8.16

Qt/Embedded 3.3.4移植

為了正確交叉編譯Qt/Embedded,建議宿主機完整安裝RED HAT 9.0,同時要確保UUID、ZLIB、JPEG、GIF、PNG、SQLITE等Qt中所需要的標頭檔、庫檔案在交叉編譯前正確安裝,並移植相應的庫檔案至目標機中,此類檔案的具體安裝在此不再贅述。下面主要對Qt/Embedded 3.3.4的交叉編譯及移植進行詳細討論。

下載解壓源檔案
$ cd ~
$ mkdir -p qt_embedded/
$ cd qt_embedded
$ wget ftp://ftp.trolltech.com/qt/source/qt-x11-free-3.3.4.tar.bz2
$ wget ftp://ftp.trolltech.com/qt/source/qt-embedded-free-3.3.4.tar.bz2
$ tar jxf qt-x11-free-3.3.4.tar.bz2
$ tar jxf qt-embedded-free-3.3.4.tar.bz2
$ mkdir -p qt-embedded-free-3.3.4-target/
$ sudo cp -r qt-embedded-free-3.3.4/ qt-embedded-free-3.3.4-target/
安裝Qt/X11
$ cd qt-x11-free-3.3.4
$ export QTDIR=$PWD
$ export PATH=$QTDIR/bin:$PATH
$ export LD_LIBRARY_PATH =$QTDIR/lib:$LD_LIBRARY _PATH
$ echo yes | ./configure -thread -plugin-sql-sqlite -prefix /usr/local/ Qt-3.3.4/
$ make
$ sudo make install

安裝Qt/E 3.3.4的宿主機版本

為便於在宿主機上進行嵌入式程式開發,利用qvfb進行虛擬嵌入式LCD螢幕顯示。

$ cd ../qt-embedded-free-3.3.4
$ export QTDIR=$PWD
$ export PATH=$QTDIR/bin:$PATH
$ export LD_LIBRARY_PATH =$QTDIR/lib:$LD_LIBRARY _PATH
$ echo yes | ./configure -thread -plugin-sql-sqlite -prefix /usr/local/Qt-embedded-3.3.4-host -qvfb
$ make
$ sudo make install
$ sudo cp -r lib/fonts/ /usr/local/Qt-embedded-3.3.4-host/lib/
安裝Qt/E 3.3.4的目標機版本
$ cd ../qt-embedded-free-3.3.4-target
$ cp ../qt-x11-free-3.3.4/bin/uic bin/(注意:需拷貝uic工具的QT/X11版本至安裝目錄中)

由於Qt/E3.3.4沒有專門針對觸控螢幕的配置選項,為了確保觸控螢幕能正常工作,可以利用現有的配置選項進行修改,以滿足實際需要。現利用qt-mouse-Linuxtp修改觸控螢幕驅動。

修改src/embedded/qmouselinuxtp-qws.h,添加下面兩行:
#define Qt_QWS_IPAQ
#define Qt_QWS_IPAQ_RAW

修改src/embedded/qmouselinuxtp-qws.cpp,把檔案中/dev/**3600改為開發板ARM-Linux作業系統中相應觸控螢幕驅動的名稱/dev/touchscreen/0raw。

$ echo yes | ./configure -embedded arm -shared -debug -no-cups -thread -plugin-sql-sqlite -no-ipv6 -qt-mouse-Linuxtp -prefix /usr/local/Qt-embedded-3.3.4-target -depths 16 -system-libpng -system-libjpeg
$ export QMAKESPEC=qws/linux-arm-g++
$ make
$ sudo make install
$ sudo cp -r lib/fonts/ /usr/local/Qt-embedded-3.3.4-target/lib/

此時,將交叉編譯的Qt/E 3.3.4的庫檔案下載至開發板中,並設定相應的環境變數QTDIR、PATH、LD_LIBRARY_PATH等。另外還要設定觸控螢幕環境變數如下:
$ export QWS_MOUSE_ PROTO=LinuxTP:/dev/touchscreen/0raw
$ export QWS_KEYBOARD=

此時,觸控螢幕可能仍無法工作或誤差較大,其主要原因是開發板作業系統中/etc/pointercal檔案不存在或該檔案中對觸控螢幕進行調整的校準參數不正確,需對/etc/pointercal檔案進行修改。修改方法有兩種:一種方法是直接建立該檔案,並在檔案中按正確格式添加相應參數;另一種方法是交叉編譯tslib-1.3.tar.bz2,將產生的校準程式拷貝至目標板,設定環境變數,運行校準程式,可直接產生高精度的/etc/pointercal檔案。這裡推薦使用第二種方法。

至此,Qt/E3.3.4便可在目標板上正確執行,移植完畢。

Qt/E編程

本文採用Qt/Embedded 3.3.4版本,主要是考慮到Qt/E 3.3版本相對以往版本更成熟,可視化編程相對更方便易用,且其支援SQLITE資料庫驅動,便於資料庫操作與編程。在本設計中主要使用了Qt/E的畫布模組、SQL模組、網路模組及多線程編程,縮短了程式的開發週期,提高了開發效率。下面主要就多線程編程和畫布模組編程進行討論。

多線程編程

通常情況形使用者介面應用程式有一個執行線程並且每次執行一個操作。如果使用者在單線程的應用程式中從使用者介面中調用一個耗時的操作,當這個操作被執行的時候,使用者介面通常會被凍結。本實現使用QThread子類化得到QGPSThread類,並使用QMutex、QSemphore和QWaitCondition來同步各線程。QGPSThread類用於通過串口編程接收GPS模組的$GPRMC定位元據幀,並加以解析,得到即時的經緯度等定位資訊,供其它線程使用。

畫布模組

畫布模組中QCanvas庫是一個高度最佳化的二維繪圖庫,QCanvas可以包含很多任意圖形的項並且在內部使用雙緩衝來避免閃爍,而且QCanvas支援分層,適合數字地圖的分層顯示。QCanvas與其它畫布模組結合使用,能很方便地實現導航地圖的顯示、縮放、漫遊以及鷹眼等功能。下面是導航地圖常用操作的實現代碼。

void Form2::zoomin()  //縮小地圖比例
{
QWMatrix m = mapview->worldMatrix();
m.scale( 0.5, 0.5 );
mapview->setWorldMatrix( m );
}
void Form2::movleft() //地圖向左漫遊
{
mapview->scrollBy(-10,0);
}
void Form2::centerpoint()  //將當前錨點居於顯示地圖正中
{
mapview->center (pointx,pointy);
}
void Form2::movleft()  //錨點在地圖上移動
{
i->move (pointx,pointy);
canvas->update();
}

初步實現

嵌入式資訊終端平台定位功能的初步實現2所示,該系統人機介面友好,定位精確。定位誤差主要取決於GPS-OEM模組的定位精度,實驗顯示,本系統能初步滿足物流資訊終端對定位功能的需求。

圖2 嵌入式資訊終端平台定位功能的初步實現

結語

本文提出了一種嵌入式物流資訊化終端定位功能的實現方案,並利用Qt/E編程對其進行了初步實現。實驗結果證明,系統定位元據精確、介面友好、系統可擴充性強,較好地完成了物流資訊化終端定位功能。■
 
參考文獻
1.常菲,李明祿,李魯群.物流配送中移動定位技術研究[J].微型電腦應用(研究與設計),2004,20(1).22-24
2.楊暈,胡永健,林志泉.基於Linux和S3C2410嵌入式圖象傳輸系統設計[J].微電腦資訊(嵌入式與SOC),2007,23(3-2).20-24
3.(加拿大)布蘭錢尼(Blanchette,J.),(英)桑姆菲爾德(Summerfield,M.)著;齊亮譯.C++ GUI Qt3 編程[M].北京:北京航空航天大學出版社,2006

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.