DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 646|回复: 0
打印 上一主题 下一主题

[GPS] 车载导航系统绘图引擎的设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-30 07:05:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
车载导航系统绘图引擎的设计与实现
高 山 ,侯亚娟
(1.武汉市规划土地管理信息中心,湖北武汉430014;2.武汉大学资源与环境科学学院,湖北武汉430079)
摘要:嵌入式环境有限的计算能力和存储空间是嵌入式开发必须面对的问题,如何在有限的条件下高效地展现丰
富的图形效果,需要根据嵌入式的特点进行有针对性的设计。在分析车载导航系统和绘图引擎特点的基础上,对车
载导航系统绘图引擎的设计和实现进行了深入讨论并提出建议,实际项目表明,该方法具有较高的效率和良好的跨
平台移植性。
关键词:车载导航系统;嵌入式;绘图引擎;架构
中图分类号:P28 ,文献标识码:A 文章编号:1006—7949{2007}02—0054—04
Design & realization of rendering engine in car navigation system
GAO Shan ,HOU Ya-juan2
(1.W uhan Urban Planning and Land Administration Information Center,W uhan 430014,China;2.School of Resource an d Environ—
mental Science,Wuhan University,Wuhan 430079,China)
Abstract:Because of the limitation of computation ability and storage space,it is a hard work to render excellent
graphics efficiently under the embedded circumstance;the program should be designed by taking characteristic of
embedded circumstance into account.Based on the analysis of embedded development and the characteristic of
the rendering engine,and combined with the experience of actual project development,it discusses deeply on the
architecture of rendering engine and some important factors which should be recognized when developing the
rendering engine,and then gives some advice for easy transplantation and extension.
Key words:Car navigation system ;embedded system ;rendering engine;architecture
车载导航系统主要由6大模块组成:车辆定位
(Positioning)、地图显示(Map Show)、路线规划
(Route Planning)、路线引导(Route Guidance)、POI
(Point of Interest)检索、HMI(Hum an—Machine In—
terrace)。其中,地图显示与HMI负责导航信息与
车辆信息的实时显示,是与用户交互最多的模块,其
显示效果和执行效率将直接影响系统的可用性和用
户的感受。
绘图引擎(Rendering Engine)是对常用绘图操
作和算法的封装,是地图显示与HMI的共同基础。
可以认为,显示器上的所有可见元素都是由绘图引
擎经过一系列计算得到,因此,绘图引擎的优劣决定
了地图显示和HMI的成败。随着计算机图形学的
发展,PC下的图形技术已经相当成熟,出现了各种
类型的图形库(如:OpenGL、DirectFB)和图形加速
硬件,以及基于这些图形库的绘图引擎(如:Openln一
收稿日期:206—10—19
作者简介:高山(1979~),男,硕士
ventor、OGRE、VTK、CG、RenderMonkey),它们在科
学计算可视化(ViSC)、CAD/CAM、游戏等领域得到
日益广泛、深入的应用。与之相比,嵌入式设备上的
图形显示则还有较大差距,由于计算能力、存储容量
和数据传输带宽的限制,嵌人式设备还难以满足大
规模数据实时显示的要求,对绘图引擎的设计提出
了很高的要求。
本文在分析车载导航系统运行环境的特点的基
础上,对嵌入式环境下图形引擎的设计与实现进行
了深入讨论,并对可移植性问题提出了建议。
1 车载导航系统绘图引擎架构
优秀的架构设计是系统成功的关键。车载导航
系统绘图引擎的架构应借鉴其他绘图引擎的优秀思
想和成功经验,并针对嵌入式环境的特点进行设计。
为保证引擎的灵活性和扩展性,在架构设计中,笔者
第2期 高山,等:车载导航系统绘图引擎的设计与实现 ·55·
汲取中间件技术和COM 技术的思想,采取了分层
的方法:对不同的功能进行分类,同类功能封装成模
块;相互协同和关联的模块,组合在一起构成“层”。
层与层之间通过接口进行通讯,上层模块通过调用
下层接口完成功能。整个绘图引擎的架构如图1所
示。
应用程序
— — — — — — — — — — — — — — — — L ———— ? 一一 l
绘图引擎 表面管理器r 人机界面
(SurfacesManager)l;l(HMI)
表面(Surface)
— L —L
图 I图像变换 l高级绘图函数}. 图
像 _.1 和处理 形
算 ● 1 I 1 『 ●
法 H基本图像处理函数l 基本绘图函数卜 算
● ● 法
硬件抽象层

。硬件设备
图1 绘图引擎架构
整个引擎分为4层:第1层是硬件抽象层,该层
主要面向特定硬件和操作系统,以屏蔽不同软硬件
平台的差异;第2层是基本绘图功能层,负责提供基
本的绘图功能和图像处理能力;第3层是高级绘图
功能层,提供复杂的图形、图像功能;最上层是表面
层和表面管理层,通过对各表面的管理,实现各种组
合效果。各层之间通过接口传递功能,并可对功能
进行自由扩展,而无需知道具体实现细节,从而保证
了引擎的重用性和扩展性。
1.1 硬件抽象层
硬件抽象层为绘图引擎提供统一、稳定的基础。
该层架设在硬件、操作系统和绘图引擎之间,为绘图
操作提供最小的环境支持,它通过标准化的接口来
隐藏不同软硬件的差异,向上提供一致的接口。这
样,在硬件抽象层上工作的其他层,可以不必关心具
体平台间的差异,只要接口不变,就可以自由的进行
扩展。
硬件抽象层主要提供以下支持功能:
1)I/O支持:包括端口读/写、文件读/写、按键和
触摸屏输人等。车载导航系统的屏幕描绘需要从存
储设备上读取导航数据、图片数据。,并作日志记录,
因此需要文件读写功能的支持;同时,还需要接收从
串口返回的GPS信号、车辆信息(如:车速、油量)
等,并响应用户输人,这些工作都离不开I/O的支
持。可以说,对I/0支持的强度决定了系统与外部
设备交换信息的能力。
2)内存管理:包括内存的申请与释放、锁定与解
锁、内存使用统计等功能。内存管理是所有操作系
统的核心功能之一,为提高程序运行的稳定性,防止
内存泄漏,同时便于调试程序,需要定义一套内存管
理的方法,包括:内存的申请、释放、整理、加锁与解
锁等。
3)线程管理:包括线程的开辟与终止、线程间的
同步、以及信号量的控制等。
由于文件读取速度与CPU处理速度的差异,大
多数实时绘图程序都需要提前预读数据,以保持画
面的流畅性,这时多线程就显得非常必要,因此需要
支持对线程的常用操作:线程的创建、挂起、终止,以
及线程同步的机制。
4)硬件参数查询:包括显示器分辨率、刷新频
率、颜色深度等。
查询硬件参数,尤其是显示设备的参数,便于系
统在启动时进行必要的调整和设置,以达到最佳的
显示效果。
硬件抽象层的接口必须通用、简捷。由于该层
主要用于隐藏具体软硬件平台的差异,因此,其接口
主要为与底层相关的函数;硬件抽象层的实现必须
高效、稳定,由于所有功能的实现最终都会调用该层
接口,因此,该层的效率对整个引擎会有极大的影
响。
硬件抽象层使得图形引擎摆脱了软硬件平台的
限制,当更换硬件或操作系统后,只需要对硬件抽象
层进行调整,其他层无需改动,这一点在嵌人式程序
设计中尤其重要,因为嵌人式设备千变万化,操作系
统也常常根据实际需要定制,这就要求图形引擎的
设计要具有很强的适应能力。
1.2 基本绘图层
基本绘图层主要提供矢量绘图功能和图像显示
能力。矢量绘图功能主要包括:
1)点:在指定位置输出指定颜色的点,是最基
本、最重要的绘图函数;
2)线:各种直/曲线的绘制,包括实线、模式线
(如:虚线、点划线)、粗线等;
3)多边形:在曲线绘制的基础上增加内部区域
的填充;
4)文字:包括点阵字体和TrueType字体的显
示;
5)其他:圆、椭圆等。
图像显示功能主要包括:
1)文件的读取:常用图像文件的读取,包括
Bmp、Jpg、Tga(含Alpha通道);
· 56· 测绘工程 第l6卷
2)图像的显示:按原始图像的大小进行显示;
3)拉伸与放缩:将原始图像按比例拉伸或显示
为指定大小;
4)图像的融合:将两幅图像按指定的透明度进
行融合,生成半透明的效果;
5)透明显示:对含有透明色、Alpha通道或掩模
的图像,进行透明显示。
基本功能层既提供矢量图形能力,又提供栅格
图像能力,从而能够显示简单的图形图像。
1.3 高级绘图层 ’
与地形图一样,导航电子地图应遵循导航地图
图示规范,以增加导航地图的可读性和使用性。高
级绘图层是基本绘图层的延伸与拓展,该层着重图
形效果的表达,通过对基本图形的组合与叠加,提供
高级符号化的线条与区域填充。主要包括:
1)线状符号的绘制:如铁路、高速路、国道等;
2)区域填充:如湖泊、草地、山地等;
高级图像功能主要是动画的显示:主要显示简
单动画,如Gif;
基本绘图层由于功能有限,一般比较稳定,而高
级绘图的功能则根据系统需求的不同而有较大变
化,由于高级绘图层提供的功能一般都需要作复杂
的运算,因此应根据具体应用进行扩展。
1.4 表面和表面管理层
表面和表面管理层位于引擎的最上层。表面
(Surface)以聚合的方式封装矢量图形和栅格图像的
所有模块,通过查询接口(QueryInterface)的方式获
得基本绘图层和高级绘图层的功能;表面管理器
(SurfacesManager)用来管理多个表面,负责表面的
创建、销毁、透明色的设置、表面放缩比例、叠放次序
的调整等功能。多个表面的叠合就形成了最终屏幕
显示的内容。
此外,为方便图形应用程序的创建,可以在引擎
的基础上封装界面库,方便应用程序的跨平台移植。
2 车载导航系统绘图引擎的实现
虽然绘图引擎中涉及的图形、图像功能都有成
熟的算法,但嵌入式环境下的实现仍然要注意许多
问题,究其根本,可以将这些问题划分为3类:针对
嵌入式CPU运算特点的;针对内存容量限制的;针
对数据传输率限制的。
2.1 针对嵌入式CPU运算特点要注意的问题
2.1、1 浮点运算
与PC的CISC指令集不同,嵌入式CPU通常
采用RISC架构,其特点是几乎所有的指令都可以
在一个CPU时钟周期内完成。测试表明,嵌入式
cPU的整数运算能力与PC相差不大,但是浮点运
算能力则相去甚远,因此在引擎的实现中应尽量避
免浮点、开方、三角函数等复杂的浮点运算,而尽量
将浮点运算转化为整数运算。如:对于图像融合中
通常使用25%:75%的效果,一般计算方法为A*
0.25+B*0.75,转化为整数运算可表示为A》2+
B —B> >2。
2.1.2 中文显示
TrueType字体用参数曲线来表示字体轮廓,具
有放大不变形和便于打印的优点,是文字显示的首
选。然而,嵌入式环境下矢量字体的显示非常耗时,
PDA下的试验结果表明:当超过10个中文,刷新速
度显著降低,为了提高显示速度,笔者采取了用自己
生成的点阵字库代替TrueType字体的方法:按区
位码的编码顺序将矢量文字栅格化后写入文件,这
样汉字的显示既避免了复杂的参数曲线像素化,又
减少了数据的读取。
2.1.3 数据类型转换
数据类型的强制转换在PC上通常不会有问
题,但嵌入式CPU则有严格的限制,对于4字节对
齐的CPU,如果要转换的数据的地址不是从4的倍
数处开始,则可能得到异常的结果,甚至导致内存操
作错误(这类错误通常隐藏很深,不易发现)。
2.2 针对内存容量限制要注意的问题
图形数据解压后通常会占用较大的内存,而且
一个应用程序会使用若干个表面及许多图片资源,
这就给内存控制带来了困难,需要采取措施来控制
数据的加载。
常用的做法是对大区域图形进行分层、分块,在
系统运行时采用动态调度的方法,即只将当前范围
内的图形数据调入内存,这样做一方面可以节省内
存,另一方面可以缩短图形绘制时间。在显示内容
变化后,删除无用的数据,释放内存空间,保证内存
峰值控制在一定范围内。作者在项目开发中使用的
内存为32 M,实践证明总的内存占用超过27M 以
后,程序开始不稳定,经过改进后内存使用控制在
18 M 以内,程序运行良好。
另一个问题是内存的申请方式。通常,内存申
请可以在堆和堆栈上进行,为了更好的管理内存空
间,最好在堆上分配存储空间,在程序运行过程中静
态占有,在程序结束后释放,以有效控制内存的使
用,提高内存操作效率。还可以通过重载New和
Delete函数实时统计和控制内存的使用,辅助程序
排错。
第2期 高山,等:车载导航系统绘图引擎的设计与实现 ·57·
2.3 针对数据传输率限制要注意的问题
数据传输率是嵌入式环境的另一个瓶颈,在程
序需要短时间加载大量数据时,可能会出现显示画
面停顿的现象,为避免出现这种问题,通常的做法是
在系统空闲时,提前加载下一步操作最可能需要的
数据,这里就有个命中率的问题,需要根据具体的应
用程序特点和上下文环境来计算概率、设计算法。
因此,图形引擎需要提供对多线程的支持,通过将数
据加载分散到整个运行时,而不是某一时刻,以减小
数据加载的峰值。
此外,嵌入式显示屏的颜色位(BPP)往往低于
24位,可以利用这个特点来减少内存占用,提高处
理速度。使用l6位色的图片资源,可以节约1/3的
空间,并且可以将相邻两个像素颜色(USHORT)的
赋值操作转化为一次整型(UINT)操作,在32位系
统下可以极大地提高程序运行速度。
2.4 编程语言
编程语言是具体实现时要考虑的一个重要方
面。JAVA由于其良好的可移植性,是跨平台编程
的首选语言,但需要经过中间字节码重新生成机器
码的JAVA存在效率不高的问题,因此适合开发以
贴图为主的游戏,对于大规模矢量图形的绘制则显
得力不从心。由于目前几乎所有平台都提供对C/C
++的支持,且由于C/C++的高效性能,很适合编
写核心模块,因此,作者选用了C/C++作为绘图引
擎核心的实现语言。
3 结束语
设计一款优秀的绘图引擎是构建高效图形程序
的基础,结合实际硬件特点和应用需求是嵌人式开
发的原则。当然,作为一款优秀的图形程序,绘图引
擎只是其中的一部分,要使整个系统流畅运行,还需
要对文件格式、数据结构和算法等进行精心设计,并
在各个因素之间进行协调平衡,以取得整体最优。
本文结合实际项目,给出了嵌入式环境下车载导航
系统绘图引擎设计的思路,基于以上设计思路,作者
实现了PDA、嵌人式主板(研华、Samsung 2410)硬
件环境下基于winCE(G I、GDI)和uCLinux(Di—
rectFB)的绘图引擎,并成功应用于车载导航系统的
开发。
参考文献
[1]张其善,吴今培,杨东凯.智能车辆定位导航系统与应用
[M].北京:科学出版社.2002.
[2]赵亦林(美).车辆定位与导航系统[M].谭国真,译.北
京:电子工业出版社,1999.
[3]耿彦丽,王平.基于StrongARM 的嵌入式Linu)(的GUI
实现[J].计算机工程,2006,32(9):214—218.
[4]杨军,高小鹏,龙翔.嵌入式系统GUI调色板查找改进算
法[J].计算机工程与应用,2005(33):34—35.
[5]GapiDraw接口源.http://www.gapidraw.com.
[6]DirectFB接口源码.http://www.directFB.org.
[7]CEGraph源代码.http://www.codeproject.com]ce/ce—
graph.asp.
[责任编辑:张德福]】
车载导航系统绘图引擎的设计与实现.pdf (221.52 KB, 下载次数: 0)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-4 04:29 , 耗时 0.098472 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表