定位体系自面世后便得到了蓬勃开展,其运用已进入到各行各业。个人消费范畴引领移动定位类型科技产品会集出现,其他范畴和职业也有很多技能更新。现在各范畴的定位体系首要会集在渠道和地图的研制上,渠道合作运用要求选用硬件,地图依据显现要求完结软件算法。因而,它们在定位体系的研讨作业中各成体系,兼容性不强。
近年来,在定位体系规划中,硬件挑选越来越会集在几个品牌的几个类型上。而软件规划方面比较涣散。因而在一个兼容性强的渠道上完结软件的会集研制,将是未来的研制方向。
这儿提出一种体系结构形式,弱化硬件渠道的影响而力求最大极限的一致软件规划。
1 、体系全体规划方案
这儿提出一种有用的规划方案,经过对体系的各方面装备,完结GPS实时导航功用。体系主控器材选用韩国Samsung公司出产的ARM核32位RISC微处理器S3C2410,并在由其组成的开发板上移植Linux操作体系,Linux操作体系担任体系的全体调度和操控。经过S3C2410的UART接口衔接GPS接纳机,用以接纳NEMA0183格局的GPS定位信息。经过UART接口和GSM/GPRS模块MC35进行通讯。
为了在移动LED上完结电子地图的制作显现,体系的全体层次结构框图如图1所示。Linux操作体系担任底层硬件的初始化和办理,并向上层供给运用接口,MiniGUI完结电子地图在LED上的制作,并经过Linux内核供给的运用接口与GPS接纳机和GSM/GPRS模块完结通讯等功用。
2 、图形界面支持体系——MiniGUI
MiniGUI是一个针对嵌入式体系的轻量级图形界面支持体系。MiniGUI能够在各个不同的渠道上供给最大程度的接口兼容性,可运转于AR-M、MIPS等各种干流嵌入式硬件渠道之上。它能够供给一个轻型、资源开支少的嵌入式图形接口。
这儿运用MiniGUI Ver l.3.3版别,将其编译为lite版别并移植到依据ARM核的32位微处理器S3C2410上。在此基础上,开发依据MiniG-UI的电子地图显现运用程序,合作GPS信号接纳机完结定位导航功用。
2.1 穿插编译MiniGUI
MiniGUI从结构层次上能够分为3层,最上层是APT层,中间层是MiniGUI中心,担任保护整个窗口体系的运转,最基层由2部分组成,即图形笼统层(GAL)和输人笼统层(IAL)。
为了使MiniGUI能够在不同的方针渠道上运转,必须有针对相应渠道的穿插编译环境。依据本文的规划选用S3C2410器材,则挑选穿插编译环境Linux-ARM,挑选Mizi公司针对Samsung公司32位ARM核RISC微处理器S3C2410规划开发的东西链,这样的装备环境使软件和硬件具有更好的兼容性。详细穿插编译的进程如下:
1)修正configure文件。设置make环境变量CC、LD及AR等。
2)GAL(图形引擎)和IAL(输入引擎)接口的完结。在MiniGUI中,GAL和IAL是MinGUI的2个基础设备,MiniGUI的高牢靠度在很大程度上也是因为这2个接口供给了独立于硬件的笼统才能。这2个接口的笼统类似于Linux内核中的虚拟文件体系。
在详细完结一个输入引擎(IAL)时,其间最为要害的是事情处理函数wait_event()的完结,MiniGUl会不断的调用该函数,来确认在输入引擎上是否有输入事情产生。这儿需求特别注意的是,因为MiniGUI是经过select体系调用来完结进程间通讯机制的,因而在完结lite版别输入引擎的wait_event函数时,一定要经过select函数或与其等价的poll函数完结。与此一起,在完结方针板的触摸屏驱动时,必需求完结对应file_operations结构中的poll函数指针。即便触摸屏驱动未供给poll函数,也要在wait_event回来之前调用select,并传递相关参数。
Linux体系供给了一种基础设备——FrameBuffer,经过这个设备Linux的图形输出有了一致的接口。因为MiniGUI能够经过FrameBuffer获得一致的图形引擎接口。
因而其适应性大大进步,也就很少需求再为MiniGUI编写GAL驱动层。
3)顺次运转configure、make和make install指令,完结MiniGUl的装备和编译。
经过上述编译进程,会将编译好的MiniGUI库文件安装在/home/MiniGUI-lite目录下。为了减小库文件的巨细,依据需求运用config-ure指令去掉MiniGUI中一些不需求的功用,一起运用穿插编译东西链中的strip指令删去MiniGUI函数库中的符号信息和其他一些调试信息。
2.2 MiniGUI向S3C2410上的移植
在嵌入式体系开发进程中,编译完MiniGUI和运用程序后,把MiniGUI库和运用程序拷贝到为方针体系预备的文件体系目录中,然后运用相关东西生成文件体系映像,下载到方针板上。
MiniGUI在运转时需求一个装备文件,用来装备MiniGUI运转所需求的环境参数。本规划中,将装备文件MiniGUI.cfg放到方针板的/etc目录下。别的,MiniGUI运用framebuffer作为其输入引擎,因而在编译Linux内核时,挑选将framebuffer相关的功用编译到内核中去。
3、制作依据MiniGUI的电子地图的算法
3.1 提取电子地图数据的算法完结
因为GUI的程序和传统单一流程的程序不太相同,因而经过简略的循环获取GPS数据的方法是不可取的。该体系经过多线程的循环提取数据,每组数据的提取与处理是在一个单线程中完结的,然后避免了数据和处理的杂乱交互,能更好地表现实时性。
首要,对所选用的坐标系进行阐明:假定有一个形状为严厉矩形的地图,其像素坐标原点为(O,0),地图X轴方向上的宽度为W个像素点,Y轴方向上的高度为H个像素点,地图上某点的坐标为(X,Y),则界说该像素点的归一化坐标为(x/W,y/H)。关于终端而言,其掩盖的地舆规模相关于地球半径来说简直能够看作无穷小,故能够以为电子地图所对应的经纬度坐标在其掩盖的区域内是线性改变的。有了这2个点的坐标数据后,当从GPS接纳机读取到经纬度坐标时,依据近似的线性映射联系,就能够算出该坐标在电子地图上的归一化坐标。这种映射联系,依据欧式几许原理即式(1)和式(2),由已知的2个点能够算出点A和点B的不知道参数。
要得到地图的左上角和右下角的经纬度坐标,只需知道地图鸿沟规模内任取的2个参考点的4个参数即可。经过在某地实地收集的3个参考点,得到表l所列的坐标数据。
依据公式,上面的3个参考点共有3种组合方法,别离得出3组经纬度值,对这3组取平均值,以削减差错,进步精度。终究求得左上角和右下角的坐标数据,如表2所示。
然后得到基准点,并将其坐标数据保存到坐标数据文件taiyuan_gps.dat中。
为了进步灵活性,这儿为坐标源数据界说如下数据结构:
3.2 GPS线程
选用单线程对收集的一组数据进行读取、解析和核算。在程序中界说一个pthread_t类型变量,代表收集并解析GPS数据的后端线程。因为GUI的前端和后端GPS线程都要拜访某些GPS数据,因而需求在线程间选用同步战略。这儿运用线程锁来完结,将其界说为GPSL0CK。它是一个pthread_mutex_t类型的变量。
对应于Point型、Pline型和Region型3种类型的地舆信息,别离界说数据结构_POINT、_PLINE和_REGION。以路途为例,在程序中界说对应的_PLINE结构来描绘相关信息,该结构界说如下:
3.3 MiniGUI下电子地图的制作
MiniGUI程序的进口点为MiniGUIMain.main函数已在MiniGUl的函数库中界说,该函数在进行一些MiniGUI的初始化作业后调用MiniGUI-Main函数。先调用SetDesktopRect函数来设置程序的显现区域,然后调用CreateMainWindow函数创立并显现程序的主窗口,终究进入音讯循环。
MiniGUI是音讯驱动的体系,全部运作都环绕音讯进行,MiniGUI运用程序经过接纳音讯来与外界交互。在电子地图的制作进程中,首要用到MiniGUI的窗口制作音讯MSG_PAINT。该音讯在需求进行窗口重绘时发送到窗口进程。MiniGUI经过判别窗口是否含有无效区域来确认是否需求重绘,在需求进行重绘时,MiniGUI会向相应的窗口进程发送MSG_PAINT音讯。MSG_TIMER则首要担任从后端GPS线程中获得当时的经纬度信息,格局化之后输出到文本框中。
当MiniGUI主程序接纳到其GPS通讯子进程发送的SIGUSRl信号时,就会调用相应的信号处理函数。为了实时更新定位点在电子地图中的方位,必须在该函数中读取同享内存中的最新方位信息;一起依据定位点方位的改变确认需求重绘的区域,调用MiniGUI中的lnvalidateRect函数使该区域无效。经过这种方法使得最新的方位信息实时地显现在电子地图上。
4 、结束语
跟着社会信息化的开展,GPS导航终端的运用已成燎原之势,越来越多的设备装备定位或导航功用。本规划运用MiniGUI来完结GPS的基本功用,使地图的制作作业脱离繁琐的底层硬件,大大简化了此项作业,再合作GPS信号接纳机完结实时定位导航功用。一起,本规划还有许多地方值得改善,例如通讯反应精度和矢量化地舆信息的优化显现等。
责任编辑:gt