工作时间 周一至周六 :8:30-17:00 联系方式 电话:021-51360000 地址:浦东新区金吉路778号1幢703 email:embedchina@163.com 客服热线:18717992104 技术咨询:17811901598 |
室内导航系统服务端设计浏览数:543次
室内导航系统服务端设计 目录 概述 1.1软件背景 1.2软件功能 1.3Java运行环境 2.相关技术介绍 2.1常用的室内导航技术 2.2常用的定位方法 2.3相关技术对比 2.4定位终端介绍 3.需求分析 3.1室内导航概述 3.2各模块概述 4.概要设计 4.1定位模块设计 4.2导航模块设计 4.3地图模块设计 4.4社交模块设计 5.详细设计 5.1WiFi定位模块的实现 5.2导航模块的实现 5.3地图模块的实现 5.4数据库模块的实现 5.5社交模块的实现 6.总结 1.概述 1.1软件背景 目前常用的室外定位方式有:一种是基于人造卫星的定位,一种是基于移动运营网的基站的定位。然而室内无GPS信号无法进行定位,然而人们大多数时间又在室内活动,而且现在室内场所也越来越趋于大型化。与室外卫星定位技术的统一不一样,室内定位各种技术呈现出百花齐放的场景,故人们对室内定位也有强烈的定位需求。室内导航系统就是为了弥补室外定位导航系统在室内不能很好运行的缺陷而开发的一个系统。可以看到在大型超市、会展中心、医院、监狱等地方对于室内定位导航的急切需求。以及一些商家也可以通过此软件推送促销信息,以提高营业额。所以说室内导航蕴藏着巨大的商业价值。 1.2软件功能 主要用于室内导航,帮助人们在大型场所中如购物中心,大型会展馆等地尽快的找到自己需要去的地方。 1.3Java运行环境 关于Java 之所以选择Java作为此导航系统的开发语言,与其众多优点是密不可分的。Java技术有下列优点:简单、面向对象、分布式、安全、体系结构中立、可移植、高性能、多线程以及动态性。 Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。 与平台无关的特性使Java程序可以方便地移植到网络上的不同机器。同时,Java的类库中也实现了与不同平台的接口,使这些类库可以移植。另外,Java编译器是由Java语言实现的,Java运行时系统由标准C语言实现,这使得Java系统本身也具有可移植性。 在安全方面,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用“特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。 (2)Eclipse开发平台 Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse还附带了一个标准的插件集,包括Java开发工具。 2.相关技术介绍 2.1常用的室内导航技术 红外线定位技术 红外线定位技术需要在室内先布置一些光学传感器,然后通过设备向周围发出调制的红外线,光学传感器在接收到红外线后反射红外线到设备,最后进行定位。红外线定位在室内可以实现一个较高的精度,但是由于红外线只能直线传播,不能穿过障碍物,而且红外线传播的距离较短,所以红外线在室内定位时需要大量的传感器,才能保证各个位置、角度都可以定位。此外,红外线还容易受到室内的灯光干扰。总体上红外线并不是一个很好的选择。 LED定位技术 LED定位技术通过往天花板上的LED灯具实现,灯具发出像莫斯电报密码一样的闪烁信号,再由用户智能手机照相机接收并进行检测,定位精度可以在1米之内。LED定位需要改造LED灯具,增加芯片,增加成本,红外线只能视距传播,穿透性极差也极易受灯光、烟雾等环境因素影响明显。定位效果有限。比较适用于实验室对简单物体的轨迹精确定位记录以及室内自走机器人的位置定位。尽管如此,LED定位是一种很有潜力的室内定位技术。 超声波定位技术 超声波测距主要通过超声波的反射进行测距,通过最小二乘、三角定位等几何算法确定物体的位置。即发射超声波,接收器接受到超声波后同样发射超声波,被测物接收返回的超声波,根据两次超声波之间的时间差计算出超声波的传播距离。超声波定位系统需要一个主测距器和多个应答器。定位时主测距器放在待测位置并向周围发射超声波,周围的应答器在检测到超声波后同样向主测距器发射超声波,主测距器根据两次超声波之间的时间间隔判断出主测距器到各个应答器之间的距离,即可计算出主测距器当前的坐标。超声波定位的精度很高,并且结构上比较简单,但是超声波具有多径效应以及非视距传播特点,而且超声波定位在实际中需要很到辅助设备,导致成本大大提高,因此也不适合作为室内定位的技术使用。 蓝牙技术 通过测量RSSI进行定位。蓝牙定位需要先在室内安装蓝牙接入设备,将室内做成多个蜂窝,保证每个蓝牙接入设备在自身蜂窝中是主设备,便可以通过蓝牙接入设备获取位置信息。蓝牙技术主要用于小范围的定位,比如超市、仓库等。蓝牙技术最大的优点是所使用的设备小、价格低廉,可以大范围普及并把蓝牙设备集成到手机等终端设备中。理论上,只要用户的手机等设备打开了蓝牙功能,蓝牙定位系统都可以对该设备进行定位。蓝牙定位技术在当前是一种很理想的技术,目前诺基亚正在大力推广相关的技术发展。但是蓝牙的接入设备价格比较昂贵,而且在一些复杂的室内环境,蓝牙定位系统的精度不能保证,在有信号干扰时稳定性还不够好。 (5)射频识别技术 射频识别技术通过射频实现源设备和接收设备的非接触式双向通信,通过获得射频信号的接收信号强度进行定位。射频技术优点在于射频信号的传播距离比较长,传播速度快,可以再很短的时间内获取位置信息。而且射频相关设备价格低廉,可以大范围部署,传播是非接触和非视距的。但是射频设备当前和手机等日常终端设备的整合较差,需要单独的定位设备,有待于进一步的发展。总的来说,射频技术有望成为新的室内定位技术。 (6)超宽带(UBW,UltraWideband)技术 超宽带(UBW,UltraWideband)技术是~种全新的,和以往的通信技术有很大差别的通信技术。首先,超宽带技术不使用传统通信技术中的载波来传输信号,而是通过频率很低(纳秒级或纳秒级以下)的极窄脉冲来传播信号。和传统通信技术相比,超宽带可以具有GHz数量级的带宽,且超宽带还具有消耗低、抗多径效应、穿透力强、系统简易、高安全性、精确度高等优点,所以超宽带也是一个很好的室内定位技术。 (7)ZigBee技术 ZigBee是一种已经比较成熟的无线网络技术。它具有传输距离短、传输速率低的特点。所以在实际中,往往需要使用大量的传感器。ZigBee定位系统在定位时通过传感器之间相互通信,将数据通过接力方式从一个传感器传到另一个传感器从而实现定位。ZigBee技术的传播效率很高,而且具有低功耗、低成本的优势,所以ZigBee技术现在也是非常流行的室内定位技术。 (8)WiFi技术 WiFi是一种能够将个人电脑、手持设备(如Pad、手机)等终端以无线方式互相连接的技术。随着IEEE802.1l的普及,WiFi在生活也变得越来越普及。所以WiFi定位系统能够很好地利用现有的基础和设备,从而显著的降低了初始成本。此外,当前据大多数的移动终端都支持WiFi接入,这也为WiFi定位提供了很大的便利。Wi-Fi定位可以达到米级定位(1~10米),Wi-Fi定位技术有两种,一种是通过移动设备和三个无线网络接入点的无线信号强度,通过差分算法,来比较精准地对人和车辆进行三角定位。另一种是事先记录巨量的确定位置点的信号强度,通过用新加入的设备的信号强度对比拥有巨量数据的数据库,来确定位置(“指纹”定位)。Wi-Fi定位适用于对人或者车的定位导航,可用于医疗机构、主题公园、工厂、商场等各种需要定位导航的场合。本文的定位功能的实现便是使用WiFi技术。 地磁和计算机视觉定位技术 目前这两类产品大多用于军事及科学探测,如军事上的水下导航常用的地磁导航,火星车的导航用到了计算机视觉导航。 除了以上提及的定位技术,还有基于光跟踪定位、基于图像分析等定位技术。未来,室内定位不会单单依靠一种技术,多种技术的混用以及切换也是很重要的研究对象。 2.2常用的定位方法 (1)时间到达法(TOA) 时间到达法通过测量信号到周边多个接收机的传播时间来测量距离,通过距离进行定位。 (2)时间到达差法(TDOA) 时间到达差法和时间到达法有所不同,是时间到达算法的改进。时间到达差法并不直接测量信号到达接收机的时间,而是用多个接收站接收到信息的时间差来确定。时间到达差法在实际中并不需要移动终端和接收站之间同步,只要利用TDOA值即可获得较高精度。时间到达差法对网络的要求低,且定位精度高,目前已经成为研究的热点。 (3)到达角度法(AOA) 到达角度法主要是通过估算基站发送到移动终端的信号的入射角判断基站的方向,得到基站与移动终端的一条连线。到达角度法受环境影响比较大,各种障碍物、噪声都会对影响测量结果。此外,到达角度法的设备成本大,不适宜室内定位。 (4)信号强度法(RSSI) 信号强度法主要有两种实现方法。一种是建立信号的强度RSSI和信号的传播距离之间的数学模型,将RSSI转换为距离,然后是几何方法计算当前位置坐标。另一种方法是记录下室内多个点的RSSl分布情况,使用RSSI指纹进行定位。 2.3相关技术对比
根据以上的几种定位技术对比,可以看到WiFi定位的布局复杂度相对简单,成本低,抗干扰性比较强,精确度虽然较低,但是可以通过增加AP节点或选取合适的算法方式,能有效降低误差,完全满足人在室内环境的定位需求。 2.4定位终端介绍 手机已经成为人日常生活中必不可少的一部分,手机上基本都有获取WIFI的功能,而目前手机上使用最多的就是Android与iOS系统,该系统都内置了扫描WIFI信息的方法,由操作系统、中间件、用户界面和应用软件组成。也就是说我们只要做好开发APP的工作,大家就可以很方便的用上该技术,这也为该软件的推广提供很大的便利,毕竟只要下个APP就可以,无需安装其他硬件。 3.需求分析 3.1室内导航概述 一个好的应用系统一定要能很好地实现用户的需求,包括各种功能和非功能部分,并尽可能的完善用户的潜在期望和减少可能出现的问题。所以需求分析在项目开发变起到非常重要的作用,只有把需求分析做好,才能确保软件开发过程的顺利。 根据系统的需求分析,可以得到以下流程图, 3.2各模块概述 下面详细地描绘了这些需求和目标: (1)定位功能。用户只有知道自己当前所在的位置,才能更好确定定位的起始点,并能够准确的沿着导航线路到达目的地。 (2)导航功能。为用户设计一条从起始点到目的地的道路,并尽可能确保道路设计的合理。 (3)电子地图。电子地图是室内导航系统的基础,是用来展示用户所处环境以及导航和定位的结果,是整个系统中用户最常接触到的部分。 (4)信息采集。主要是采集地图的节点信息,WiFi信号信息。 (5)社交模块。用于用户共享位置,以及对附近商家的评价,及一些其他功能。 4. 概要设计 根据上述的分析,可知室内导航系统服务端主要由定位模块和导航模块以及电子地图组成,其中地图建模模块和WiFi信息采集模块为主要辅助模块。客户端则由网页版(PC)和移动版(手机,平板电脑)构成,当用户通过http请求进行访问时,向服务器发送定位、导航等请求后,服务器对用户的请求调用不同的模块进行处理,并将得到的结果显示到页面上,用户模块通过http获取到结果并将结果在电子地图上显示出来。系统服务端结构图如下: 室内定位系统的各个组成部分的功能如下图 服务终端上的APP首先接收多个AP节点发来的RSSI信息,然后将他们发送到服务器端,服务器通过与数据库数据对比和计算选择合适的算法,计算出终端的位置坐标,然后返回给终端,终端接收到后,将此信息在APP的导航模块中显示出来。 4.1定位模块设计 (1)WiFi定位模块的设计思路 首先,WiFi定位模块从用户模块接收定位请求,包括到用户当前位置即待测点周围所有AP的信息。 其中每个AP信息包括MAC地址和RSSI值。 其次遍历RSSI指纹数据库中各个采集点,将每个采集点Dk的信息和待测点进行匹配。 其中每个AP信息包括MAC地址、RSSI平均强度和RSSI误差范围。 对每个采集点检查相应的AP信息,若待测点某一个APi的RSSI值处在该采集点对应APki的RSSI值区间范围内,则将该采集点的权值加一。在遍历结束后,选出权值最大的3个点Ml、M2、M3,及其对应权值Wl、W2、W3。将其坐标加权平均获得待测点的坐标。 4.2导航模块设计 (1)导航模块的设计思路 由于起始点可能不是地图结构中的点,而是当前位置的坐标,这时需要将找到起始点最近的可到达的节点,然后通过A*算法找一条合适的路径。导航模块分为最近点搜索和A*算法两部分实现。 最近点搜索。为了防止找到的最近点不是可以直接到达的,比如是隔着墙壁的一点。所以在电子地图的结构文件中将全部点分别按照空间划分成不同区域。 4.3地图模块设计 电子地图模块主要完成一个电子地图,它是室内导航系统向用户显示的部分。本模块需要对大楼和所有楼层建立地图显示层,并完成一个用来操作电子地图的Javascript文件。还要对所有楼层建立地图结构层,并生成RSSI指纹数据库。 4.4社交模块设计 社交模块主要是给用户提供共享位置以及对在用户查询所在地点的评价供用户参考。这需要提供一个分享功能以及接入商家在个网点的评价以及一些其他信息。 5.详细设计 5.1WiFi定位模块实现 WiFi定位模块对用户的定位请求进行处理,按如下方式实现。 (1)定位模块的数据结构 用户模块向WiFi定位模块发送的请求主要包括当前待测点能检测到的所有接入点的总数和这些接入点的MAC地址以及接入点的信号强度。数据的格式如下: AP_Num--num&AP_Info=MAC 1:RSSI 1;MAC2:RSSl2······ AP_Num是指在当前待测点能够检测到的WiFi接入点的总数。AP_info是包含了所有MAC地址和RSSI强度。MAC和RSSI用冒号隔开,每条接入点信息用分号隔开。 WiFi定位模块还需要获取RSSI指纹数据库的数据。 WiFi定位模块需要三个类:AP,AP_db和Point。 AP类记录了待测点检测到的接入点的相关信息。定义了两个属性: string MAC:检测到的AP接入点的MAC地址。 int RSSI:检测到的AP接入点的RSSI强度。 AP_db类记录了数据库保存的收集的接入点的相关信息。定义了三个属性: string MAC:AP接入点的MAC地址。 int RSSI_avg:AP接入点的RSSI强度。 int RSSI_dev:AP接入点的RSSI误差。 Point类记录RSSI指纹数据库中每一个采集点的相关信息。定义了三个属性: dictionary int X:采集点的x坐标。 int Y:采集点的Y坐标。 int W:该采集点的权值。 WiFi定位模块接受到请求数据后使用一个dictionary WiFi从数据库中获取数据保存到一个list WiFi定位模块流程图 5.2导航模块的具体实现 导航模块对用户的导航请求进行处理,按如下方式实现。 (1)导航模块的数据结构 用户模块向导航模块发送的请求主要包括起始点的名称或坐标、目标点的名称。数据的格式如下: from=起始点的名称&to=目标点的名称或者 x=起始点x坐标&v=起始点Y坐标&t0=目标点名称 导航模块还需要获取电子地图的结构数据。 导航模块需要一个类:node。 node类记录了接入点的相关信息。定义了以下属性: intid:节点的id。 int areald:节点的所属的区域id。 int x:节点的X坐标。 int Y:节点的Y坐标。 int type:节点类型。 List int preld:前一个节点的id,方便查找完后回溯。 导航模块使用一个dictionary 此外还需要一个类:area。 area类保存了区域的划分情况。定义了以下属性: int areaId:区域id。 List List 其中point类仅包括X坐标和Y坐标。 (2)导航模块的实现 道路搜索是导航模块最主要的部分。导航模块导航请求作为参数结合电子地图的结构信息进行计算。 导航模块除了主模块的函数,还要实现NearestPoint函数和A*函数。 (3)导航模块流程图 (3)导航模块的具体实现 首先Navigate.ashx在ProcessRequest函数中通过conmtent.Request的方式获取请求的各种数据。通过split将请求的string分割保存。 其次通过System.Xml;命名空间操作数据库,使用XmlDocument打开XML文件,使用SelectNodes取数据保存到XmlNodeList,最后保存定义的数据结构中。 然后使用导航算法进行计算。 最后通过context.Response.Write将计算结果写回页面。 5.3地图模块的实现 电子地图的操作部分保存在一个SVG Toolds的文件中。其中封装了大量对地图的操作函数。 其中对SVG移动和放大缩小都通过SVG的viewbox属性实现。viewBox属性值的格式为(xO,yO,u_width,u_height),每个值之间用逗号或者空格隔开,它们共同确定了视窗显示的区域:视窗左上角坐标设为(x0,y0)、视窗的宽设为u_width,高为U_height;该变换对整个视窗都起作用。 viewBox的设置其实是包含了视窗空间的缩放和平移两种变换。 变换的计算也很简单:以最外层的svg元素的视窗为例,假设svg的宽与长设置为width,height,viewBox的设置为(XO,yO,u_width,u_height)。则绘制的图形,宽和高的缩放比例分别为:width/u_width,height/u height。视窗的左上角的坐标设置为了(x0,y0)。 move函数。输入参数为方向,通过修改viewbox的xO、v0元素,改变SVG图形在整个视窗中的位置。绑定到键盘和按钮。 (2)drag函数。输入参数为原始坐标和偏移量。通过对网页document的onmousedown、onmousemove、onmouseup事件重写,在onmousedown时重写onmousemove时间保存初始坐标,在onmousemove时调用drag函数修改viewbox属性,在onmouseup时将onmousemove赋null值。 (3)zoom函数。输入参数为zoom类型,在zoom时修改zoomLevel参数,确定当前zoom等级,修改viewbox中的U width、U height实现放大缩小,并修改x0、y0保证zoom时中心位置不变。 (4)add函数。输入参数为元素类型,添加各种元素到地图。 (5)delete函数。输入参数为元素,从地图上删除该元素。 (6)getCoordinate函数。输入房间编号,返回房间内的一点,方便添加房间标记。首先通过房间编号获取房间path元素的d属性,取出每个点的坐标,求和再平均即为近似中心点。需要注意的是d属性不同浏览器下坐标分隔符不同,ie是空格,chrome是逗号,所以使用正则表达式/[1-9][O-9]*/g提取数字。 (7)highlight函数。输入参数为一个房间编号,修改该SVG元素颜色属性高亮该房间。绑定到SVG房间分类的onmousedown事件中。 (8)moveViaKey,zoomViaMouse函数。将键盘、鼠标和move、zoom函数绑定起来。 (9)initialize函数。初始化函数,完成各种事件绑定,变量赋初值等工作。在window.onload中载入。 5.4数据库的实现 RSSI指纹数据库主要应该包括以下三个表: (1)样本表:用来存储样本点的坐标信息包括每个样本点的id、坐标,由样本点id作为主键。 (2)AP表:用来储存无线路由器的信息包括每个AP的id、MAC、坐标,由AP的id作为主键。 (3)样本点RSSI表:用来储存样本点的RSSI信息包括每个样本点采集到的AP信息以及AP信号强度的信息,样本点ID,以RSSI表的ID为主键。 样本点信息表:
列名 数据类型 说明 ID int 主键,字段标识 X float 样本点横坐标 Y float 样本点纵坐标 z float 样本点所在楼层 无线路由器样本点:
列名 数据类型 说明 ID int 主键,字段标识 X float 样本点横坐标 Y float 样本点纵坐标 z float 样本点所在楼层 AP varchar 无线路由器名称 MAC varchar 无线路由器物理地址 位置指纹信息表:
列名 数据类型 说明 ID int 主键,字段标识 SID int 样本点ID APID int 无线路由器ID RSSI varchar AP的信号强度 5.5社交模块的实现 社交模块的操作部分保存在一个SJ的文件中。其中封装了大量的操作函数。 share函数。通过此函数用户能够将特定的位置通过微信,QQ等一些常用的交流APP将自己所在的位置分享出去。 pj函数。通过此函数用户能够对一些商家进行评价,发表自己的评论。 view函数。通过此函数用户能够看到自己查询所在地的一些具体的信息。 |