公告:新满多没有杂乱广告的网站, 请大家收藏!很好记,域名是 新满多 拼音!xinmanduo.com ! 更简洁好记的 ykyh.net

您的当前位置:首页 > 专利技术 > 正文 -- 手机或者平板访问

基于A-STAR算法的室内导航系统的制作专利

来源:未知 编辑:晚一步 时间:2018-06-12

本发明涉及室内导航技术,具体涉及基于A-STAR算法的室内导航系统。



背景技术:

目前,市场上大部分的定位导航服务目前主要根据依靠GPS系统,且主要应用领域都在室外宽阔环境。我们的日常生活的大部分时间都处于室内区域,然而由于室内环境的复杂性和建筑环境对卫星信号的遮挡及干扰,使得GPS的定位结果发生严重偏移,甚至无法正常工作,目前比较普遍的解决方法是使用wifi定位技术,wifi定位技术是先结合相关数据通过定位算法得出用户的位置,并显示到电子地图上的技术。它通过用户提交的周围的信号强度,等相关信息,结合指纹数据库,最后通过定位算法得到用户的位置,它可以降低复杂室内环境对定位结果的影响。

而在wifi定位实现上,目前市场上的室内导航都是使用传统的Dijkstra最短路径算法进行寻路导航,Dijkstra算法在运行的过程中始终维护一组节点集合S。从原节点s到该集合中每个节点之间的最短路径都已经被找到。算法重复从节点集合V‐S中选择从s出发路径最小的节点u,将u加入到集合S,然后修改所有从u出发的边的距离,便可以找到原节点s到其他节点的最短路径,由于Dijkstra算法在搜索时对节点不加以区别,对所有节点等概率搜索。所以Dijkstra算法可以保证最优解,但是其搜索的效率并不高。



技术实现要素:

本发明所要解决的技术问题是:提出一种基于A-STAR算法的室内导航系统,实现在复杂的室内环境的精确定位并提高导航效率。

本发明解决上述技术问题采用的技术方案是:

基于A-STAR算法的室内导航系统,包括:电子地图模块、地图建模模块、wifi信息采集模块、wifi定位模块及导航模块;

所述电子地图模块,用于保存与地图展示相关的数据,并负责电子地图的展示;

所述地图建模模块,用于建立地图模型以及根据SVG图形对地图进行点的添加、删除和更改操作;

所述wifi信息采集模块,用于采集wifi接入点的接收信号强度及MAC地址信息,对这些信息处理后存入RSSI指纹数据库;

所述wifi定位模块,用于根据用户提交的附近wifi接入点的信号强度及MAC地址信息,结合RSSI指纹数据库中的数据,通过指纹匹配算法计算获得用户的当前位置;

所述导航模块,用于对用户的导航请求进行处理,基于电子地图中室内道路拓扑结构的有向图,利用最近点搜索和A‐STAR最短路径算法计算获得一条从指定起始点到目标点的道路。

作为进一步优化,所述电子地图包括地图图形部分和操作部分,地图图形部分是一个包含SVG信息的html文件,其中html文件头包含了相应的js文件,SVG标签中使用各种SVG元素来绘制地图图形;操作部分保存在一个SVG_Tool.js的文件中,其中对SVG的移动和放大缩小都通过SVG的viewbox属性实现。

作为进一步优化,所述地图建模模块具体用于:载入SVG地图文件,将SVG地图显示到一个asxp页面上,在地图上添加点、线元素,并添加元素相对应的信息;将添加的信息保存到一个XML文件中。

作为进一步优化,所述wifi定位模块具体用于:

首先接收定位请求,然后处理请求参数,所述请求参数中包括用户当前位置即待测点周围所有AP的信息,每个AP的信息包括MAC地址和RSSI值;接着,遍历RSSI指纹数据库中各个采集点,将每个釆集点的AP信息和待测点的信息进行匹配;其中每个采集点的AP信息包括MAC地址、RSSI平均强度和RSSI误差范围;

然后对每个采集点检查相应的AP信息,若待测点某一个AP的RSSI值处在该采集点对应RSSI的值区间范围内,则将该采集点的权值加一;当权值大于三个可能点的最小值,便用其权值对应的坐标代替三个可能点的坐标,直至选出权值最大的点M1、M2、M3及其对应权值W1、W2、W3;然后对此三个权值最大点的坐标加权平均获得用户当前的坐标,用户终端获取所在点后在电子地图上显示。

作为进一步优化,所述用户的导航请求包括:

起始点的名称或坐标以及目标点的名称。

作为进一步优化,所述导航模块利用最近点搜索和A‐STAR最短路径算法计算获得一条从指定起始点到目标点的道路,具体包括:

导航模块在接收用户导航请求参数并读取地图结构后,若起始点不是坐标,即起始点处于室外环境时,使用最近点搜索算法得到它的距离室内最近的点,然后判断起始点与目标点是否处于同一楼层:

若起始点与目标点处于同一楼层,则对起始点和目标点使用A-STAR算法进行路线规划;

若起始点与目标点相差一层楼,则对起始点与楼梯之间以及楼梯与目标点之间分别使用A-STAR算法进行路径规划;

若起始点与目标点相差两层楼或两层楼以上,则对起始点与电梯之间以及电梯与目标点之间分别使用A-STAR算法进行路径规划。

本发明的有益效果是:采用wifi定位结合最近点搜索+A-STAR算法路径规划方案进行导航:基于RSSI进行了指纹匹配求出用户位置,只要连接上室内wifi便能进行精确的定位,定位的精度也有很大提高,而且不会受到周围墙壁等复杂环境的干扰;而最近点搜索算法+A-STAR算法路径规划方案使用启发式估价函数,可以对每个扩展节点的优先值进行评价,使函数优先搜索那些最有可能的节点,使得导航效率得以大大提高。因此,采用本发明方案,用户能够在复杂的室内环境内进行更加精确的定位和高效的导航。

附图说明

图1为室内导航系统总体设计框架图;

图2为wifi定位模块的工作流程图;

图3为导航模块的工作流程图;

图4为导航模块中最近点搜索的算法流程图;

图5为导航模块中A‐STAR算法流程图。

具体实施方式

本发明旨在提出一种基于A-STAR算法的室内导航系统,实现在复杂的室内环境的精确定位并提高导航效率。

如图1所示,本发明中的基于A-STAR算法的室内导航系统,包括电子地图模块、地图建模模块、wifi信息采集模块、wifi定位模块及导航模块;其中,电子地图模块、定位模块以及导航模块是整个室内导航系统的核心,也是和用户交互的部分,主要为用户提供地图,保存系统数据,确定用户位置,帮助用户进行导航。地图建模模块和信息采集模块主要是系统的基础,主要负责建立电子地图模型,收集信号强度建立指纹数据库。

各个模块的具体功能为:

所述电子地图模块,用于保存与地图展示相关的数据,并负责电子地图的展示;

所述地图建模模块,用于建立地图模型以及根据SVG图形对地图进行点的添加、删除和更改操作;

所述wifi信息采集模块,用于采集wifi接入点的接收信号强度及MAC地址信息,对这些信息处理后存入RSSI指纹数据库;

所述wifi定位模块,用于根据用户提交的附近wifi接入点的信号强度及MAC地址信息,结合RSSI指纹数据库中的数据,通过指纹匹配算法计算获得用户的当前位置;

所述导航模块,用于对用户的导航请求进行处理,基于电子地图中室内道路拓扑结构的有向图,利用最近点搜索和A‐STAR最短路径算法计算获得一条从指定起始点到目标点的道路。在具体实现上,电子地图模块使用SVG矢量图来描述地图信息,以提高地图显示的分辨率,SVG是一种使用XML来描述二维图形的图形格式,是由W3C于2000年8月制定的,也是html5中的新的矢量图形标准严格遵守语法,所有的图形内容都由SVG中的各种对象表示,并以文本文件的形式保存起来,以达到显示内容的清晰度和图片分辨率无关的目的,模块中包括了三种类型的图形对象:矢量图形形状、图像和文本,然后使用SVG矢量图形形状中的各种基本形状来表示电子地图中的墙壁、楼梯、桌子等,使用图像表示一些标记信息,使用文本表示一些文字信息,比如办公室编号等,SVG的元素由一个javascript文件进行操作,使用此javascript文件对地图显示层进行各种操作,比如定位导航结果和地图元素的添加和删除,地图的平移、放大和缩小等。整个室内的拓扑结构用一个有向图来描述,它由电子地图模块实现,用节点来表示室内门、窗等各个部件,用点与点之间的连接来表示是可以连通的道路,每一个地图中所有的信息保存在一个xml文件中,该xml文件通过地图建模模块生成。

地图建模模块,负责载入SVG地图文件,将SVG地图显示到一个asxp页面上,在地图上添加点、线等元素,并添加元素相对应的信息,比如节点的办公室编号等;然后,将添加的信息保存到一个XML文件中。

首先为了显示SVG,asxp页面中要包含含有AVG的html文件。添加的节点元素保存到SVG标签下一个id为的node元素下,每一个节点在SVG中使用circle类型保存,circle属性中包括x坐标和y坐标、办公室编号、人员信息。每一条连线保存到SVG标签下一个id为roads的g元素下,每一个连线在SVG中使用line类型保存,line属性中包括两个端点信息。其次为了在地图上进行添加、删除、修改元素的操作,页面需要添加相应的按钮和输入文本框。将所有的操作放到一个js文件中,js将所有点线信息保存到两个变量中。后台页面通过隐藏元素获取js变量。同时使用一个类保存节点信息,使用邻接矩阵保存连线信息。最后按照地图结构文件的格式保存到XML文件中。

wifi定位模块主要向用户提供定位功能,通过用户提交的wifi信号强度,MAC等相关信息,结合RSSI指纹数据库,最后通过指纹匹配得到用户的位置。其工作流程如图2所示,首先,定位模块接收定位请求,包括到用户当前位置即待测点周围所有AP的信息R。即R=(AP1,AP2,...APi),其中每个信息包括MAC地址和RSSI(Received Signal Strength Indicatio,即接收的信号强度指示)值。其次遍历RSSI指纹数据库中各个采集点,将每个釆集点和待测点进行匹配。其中每个AP信息包括MAC地址、RSSI平均强度和RSSI误差范围。然后对每个采集点检查相应的AP信息,若待测点某一个AP的RSSI值处在该采集点对应RSSI的值区间范围内,则将该采集点的权值加一。当权值大于三个可能点的最小值,便用其权值对应的坐标代替三个可能点的坐标;在遍历结束后,选出权值最大的个点M1、M2、M3,及其对应权值W1、W2、W3。然后将其坐标加权平均获得用户当前的坐标,用户终端获取所在点后在电子地图上显示。

导航模块主要是利用电子地图模块的地图结构层所保存的表示室内道路拓扑结构的有向图,利用导航算法得到一条从指定起始点到目标点的道路,它包括最近点搜索和道路搜索两个部分。最近点搜索部分,由于电子地图的拓扑结构是由一个由点构成的有向图,而当前位置并不一定在点上,所要首先要选取全部点之中最接近当前位置的点并且两者之间没有墙壁等阻栏。选取的点即作为导航寻路算法中的当目点。道路搜索部分,本部分通过最近点搜索部分得到的起始点和目标点,在描述电子地图拓扑结构的有向图中通过算法得到一条导航道路,并返回给用户模块显示在电子地图上。

在求解最短路径时,传统Dijkstra算法的搜索过程比较盲目,没有考虑到目标点的具体情况,进行等概率搜索,实际上是以起始点为圆心不断扩大半径来进行搜索,效率不高。A-STAR算法是一个把常规方法和启发式方法结合起来的算法。算法通过使用启发式估价函数,用于评价每个扩展节点的优先值,使函数优先搜索那些最有可能的节点。

wifi信息采集模块主要接受wifi接入点的接收信号强度、MAC地址等信息,用户发送定位请求主要包括当前待测点能检测到的所有接入点的总数和这些接入点的mac地址以及接入点的信号强度。数据的格式是:AP_Num=num$AP_Info=MAC1:RSSI1;MAC2:RSSI2…其中AP_Num是值在当前待测点能够检测到的wifi接入点的总数。AP_Info包含了所有mac地址和RSSI强度。然后对这些数据进行过滤和清洗,去除无用的数据,存入数据库作为RSSI指纹数据库。此模块最大的作用是能够为wifi定位模块提供需要匹配的RSSI数据,辅助wifi定位模块实现定位功能,它是根据wifi定位模块设计的模块。

下面结合附图及实施例对各个模块的具体实现进行说明:

1.电子地图模块:

电子地图的地图图形部分是一个包含SVG信息的html文件,其中html文件头包含了相应的js文件,SVG标签中使用各种SVG元素来绘制地图图形。操作部分保存在一个SVG_Tool.js的文件中,其中对SVG的移动和放大缩小都通过SVG的viewbox属性实现。view属性值的格式为(x0,y0,u_width,u_height),每个值之间用逗号或空格分开,它们共同显示了视窗显示的区域:视窗左上角坐标设为(x0,y0),宽设为u_width,高为u_height,该变换对整个视窗都起作用。至于变换的计算方面,以最外层的svg元素的视窗为例,假设svg的宽与长设为width,height,viewbox的设置为(x0,y0,u_width,u_height)。则绘制的图形,宽和高的缩放比例分别为:width/u_width,height/u_height。视窗的左上角的坐标设置为了(x0,y0)。

2.wifi定位模块:

(1)定位模块的数据结构:

用户向wifi定位模块发送的请求主要包括当前待测点能检测到的所有接入点的总数和这些接入点的mac地址以及接入点的信号强度。数据的格式是:

AP_Num=num$AP_Info=MAC1:RSSI1;MAC2:RSSI2…

其中AP_Num是值在当前待测点能够检测到的wifi接入点的总数。AP_Info是包含了所有mac地址和RSSI强度。

wifi定位模块需要三个类:AP,AP_db和Point。

AP类记录了待测点检测到的接入点的相关信息,定义了两个属性:

stirng 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<string,AP_db>ap_info:一个采集点的所有信息,以MAC为键,AP_db类为值。

int x:采集点的x坐标。

int y:采集点的y坐标。

int w:该采集点的权值。

(2)定位结果的计算:

wifi定位模块以定位请求作为参数根据定位请求中的mac信息从数据库中取出相应数据,计算出每个采集点相对于待测点的权重。选取出权重最大的三个才几点,将这三个三级点的坐标加权平均之后获得定位结果。定位模块实现一个locate的函数,函数输入参数是一个字符串,包含了所有接入点的总数和这些接入点的mac地址以及接入点的信号强度,输入的结果为当前待测点的坐标。

(3)wifi定位模块的具体实现:

首先Locate.ashx在ProcessRequest函数中通过coonmtent.Request的方式获取请求的各种数据。通过split将请求的string分割保存。其次通过System.Data.SqlClient命名空间操作数据库,使用SqlConnection打开数据库,使用SqlCommand获取数据库中的数据,使用SqlDataAdapter和DataSet保存sql查询的结果,保存在定义的数据结构中,最后使用定位算法进行计算,最后通过context.Respose.Write将计算结果写回页面。

3.导航模块:

(1)导航模块的数据结构:

用户向导航模块发送的请求主要包括起始点的名称或坐标、目标点的名称。数据的格式如下:

from=起始点的名称&to=目标点的名称。

导航模块需要一个类:node,它记录了接入点的相关信息,定义了如下属性:

int id:节点的id。

int areaId:节点所属的区域id。

int x:节点的x坐标。

int type:节点类型。

List<int>nextId:节点可以到达的其他节点的id的集合。

int preId:前一个节点的id,方便查找完后回溯。

导航模块使用一个dictionary<id,node>来保存地图结构信息,每一个节点点信息保存在一个node类中,使用节点id作为键方便查找。

此外还需要一个类:area,它保存了区域的划分情况,定义了如下属性:

int areaId:区域id。

List<int>nodeId:区域范围内节点的id的集合。

List<point>edge:区域的顶点集合。

(2)导航模块的具体实现:

首先Navigate.ashx在ProcessRequest函数中通过conmtent.Request的方式获取请求的各种数据,通过split将请求的string分割保存,然后通过System.Xml命名空间操作数据库,使用XmlDocument打开XML文件,私用SelectNodes取数据保存到XmlNodeList,然后保存到定义的数据结构中,使用导航算法进行计算,最后通过context.Respinse.Write将计算结果写回页面。导航模块除了主模块的函数,还要实现NearestPoint函数和A-STAR函数,NearestPoint最近点算法流程图如说明书附图3所示,A-STAR算法流程图如说明书附图4所示。

4.地图建模模块:

地图建模模块主要负责系统的数据采集整理,并且生成地图的结构文件,地图的结构主要保存在一个xml文件当中。其中的所有元素说明如下:

map元素,根元素,表示整个地图,id属性代表地图标号。

aera元素,map的子元素,将地图分成多个小区域,id是区域编号,d属性代表区域多边形的顶点。

node元素,aera的子元素。属性包括id编号、x坐标、y坐标、desc描述。

link元素,node的子元素。属性lid表示父节点node可以到达的节点编号。

地图建模模块模块主要使用一个MapInfoColection.aspx页面。页面使用一个iframe显示包含SVG的html,使用一个操作区域包括选中元素时的元素信息显示文本框,修改、删除的按钮。

需要实现下列函数:

addNode函数,对页面的document绑定onmousedown事件。当在页面上点击通过document创建节点,并加入到一个id为nodes的g元素下。

selectNode函数,通过绑定到node元素的onmousedown事件上,当在node元素上点击时将node信息显示到文本框。并检测变量start是否为null,若不是null则将start赋值为node,r若start不为null且不等于当前node,则调用addRoad函数。

modifyNode函数,当Node节点被选中后,可以修改文本框的信息使用modifyNode修改node信息。

addRoad函数,添加连线。

selectRoad函数,通过绑定到road元素的onmousedown事件上。当在road元素上点击时将road信息显示到文本框。

modifyRoad函数,当road被点中后,可以修改文本框的信息使用modifyRoad修改road信息。

delete函数,使用parentNode.removeChild删除选中元素。

本发明中,导航模块收到用户的导航请求进行处理,基于电子地图中室内道路拓扑结构的有向图,利用最近点搜索和A‐STAR最短路径算法计算获得一条从指定起始点到目标点的道路,其具体流程如图3所示:

导航模块在接收用户导航请求参数并读取地图结构后,若起始点不是坐标,即起始点处于室外环境时,使用最近点搜索算法得到它的距离室内最近的点,然后判断起始点与目标点是否处于同一楼层:

若起始点与目标点处于同一楼层,则对起始点和目标点使用A-STAR算法进行路线规划;

若起始点与目标点相差一层楼,则对起始点与楼梯之间以及楼梯与目标点之间分别使用A-STAR算法进行路径规划;

若起始点与目标点相差两层楼或两层楼以上,则对起始点与电梯之间以及电梯与目标点之间分别使用A-STAR算法进行路径规划。

上述流程中的最近点搜索算法流程如图4所示,其包括:

用P表示起始点,区域由一组点P1、P2…Pn表示,P1、P2…Pn循环相连的多边形即为区域。首先从P做一条水平向左的射线,判断这条射线与多变形的每条边的相交情况。若点在某条边上,则可以看作点在多边形内。若某条边是水平的,则直接忽略该条边,若射线正好穿过某条边的某条边的端点,如果P的纵坐标和两个端点的较小纵坐标相同则忽略该条边,否则交点数加一。若射线和某条边相交且交点不是该条边的端点,则交点数加一,若最后交点数为奇数,则说明点在多边形内,最后将区域内的节点和起始点进行计算,计算出他们的距高,找出最近点,设为新的起始点。

A‐STAR最短路径算法的流程如图5所示,其包括:

1)把起始点s放入OPEN表中,记f=h,令CLOSED为空表;

2)若OPEN为空表,则宣告失败;

3)选取OPEN表中未设置过的具有最小f值的节点为最佳节点n,并把它放入CLOSED表;

4)若n为一目标节点,则成功求得一解;

5)若n不是目标节点,则扩展之,产生后继节点x;

6)对每个x进行下列过程:

①计算g(x);

②如果x∈OPEN,则比较两个x的估计值,如果新的x估计值小,则记下较小的估计值,修改OPEN表,并将n记为x的父节点;

③若x在CLOSE表中,则比较两个x的估计值,如果新的x估计值小,则记下较小的估计值,并将n记为x的父节点,修改CLOSE表,把x放入OPEN表;

④若x既不在OPEN表中,又不在CLOSE表中,则将n记为x的父节点,把它放入OPEN表中;

⑤将n插入CLOSE表,按照股价值对OPEN表排序。

本发明基于最近点搜索算法+A-STAR算法的路径规划方案使用启发式估价函数,可以对每个扩展节点的优先值进行评价,使函数优先搜索那些最有可能的节点,使得导航效率得以大大提高。因此,采用本发明方案,用户能够在复杂的室内环境内进行更加精确的定位和高效的导航。

再多了解一些 完整全部详细技术资料下载
 
手机扫描本二维码

分享创意到朋友圈

网友评论:

栏目分类


Copyright © 2006-2017 新满多 渝ICP备11004546号-1

如有侵犯,请联系我们:Gaocheng365@live.com

Top