当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于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通信网络与物流信息控制中心建立联系,提交相关数据采集信息和接收物流信息控制中心指令。

 

系统采用嵌入式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

[!--empirenews.page--]

安装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=

[!--empirenews.page--]

此时,触摸屏可能仍无法工作或误差较大,其主要原因是开发板操作系统中/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模块的定位精度,实验显示,本系统能初步满足物流信息终端对定位功能的需求。

 

[!--empirenews.page--]

结语

本文提出了一种嵌入式物流信息化终端定位功能的实现方案,并利用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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

电容式触摸屏又称电容触摸屏,是一种生长在电子行业中的新型非接触式触摸技术,广泛应用在人机交互界面,实现与人机之间信息传递,它带动了科技发展,改变着日常生活。

关键字: 电容式 触摸屏 交互界面

随着汽车电子技术的飞速发展,汽车电子设备触摸屏已经成为汽车信息娱乐系统、导航系统、车载通信系统等设备的核心组成部分。然而,复杂的电磁环境对汽车电子设备触摸屏的电磁兼容性(EMC)提出了更高的要求。为了使汽车电子设备触摸屏...

关键字: 汽车电子 触摸屏 电子设备

触摸屏显示器是每个现代支付系统和销售点(POS)终端的重要组成部分。触摸屏极大地提升了支付终端的美观度,同时提供了一种对手机、平板电脑和触摸屏笔记本电脑的用户来说都十分熟悉的现代化控制方式。尽管触摸屏拥有这些优点,但也增...

关键字: 触摸屏 POS显示器

现今我们常用的触摸屏可分为电阻式触摸屏、表面电容式触摸屏、红外式触摸屏、表面声波式触摸屏4 类。

关键字: 电阻 触摸屏 红外式触摸屏

电阻屏和电容屏的区别在原理、抗损能力、像素精度等方面

关键字: 电容 触摸屏 像素精度

生活中越来越多的事物开始需要用触摸屏操作,家电、车载导航等等。在日常生活中,触摸屏最常见的为电容式触摸屏,那么在操作它们的时候有什么注意事项呢。

关键字: 电容 触摸屏 车载导航

电容触摸技术被应用在广泛的电子产品从智能手机,冰箱和汽车。在许多应用中,电容式触摸传感器提供输入到一个专用的控制器芯片。微控制器直接参与当控制器集成为一个外围设备的MCU模具。

关键字: 电容 触摸屏 智能手机

触摸屏越来越多的应用于国民生产的各个领域用来实现手写输入、查询、控制等,这些触摸屏多被装在显示器(CRT)或液晶(LCD)上,触摸屏的种类也越来越多。

关键字: 电子器件 电阻 触摸屏

触摸屏通过感应人体电容来进行触摸位置的检测。具体来说,现代常见的电容式触摸屏采用了电容感应技术。触摸屏表面覆盖着一层透明的导电薄膜或玻璃,在触摸屏上进行触摸时,人体的电荷会改变触摸区域的电容量。

关键字: 触摸屏 校准算法 导电薄膜

电阻触摸屏的屏体部分是一块贴在显示器表面的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层(ITO,氧化铟),上面再盖有一层外表面硬化处理、光滑防刮的塑料层。

关键字: 触摸屏 ITO 氧化铟
关闭
关闭