基于RFID的盲人导航系统路径搜索设计与实现.docx
《基于RFID的盲人导航系统路径搜索设计与实现.docx》由会员分享,可在线阅读,更多相关《基于RFID的盲人导航系统路径搜索设计与实现.docx(28页珍藏版)》请在冰豆网上搜索。
基于RFID的盲人导航系统路径搜索设计与实现
基于RFID的盲人导航系统
路径搜索设计与实现
此文档为WORD格式,下载后可随意编辑
2017年9月修订
基于RFID的盲人导航系统路径搜索设计与实现
摘要
随着城市人口数目的增加,盲人这个特殊的群体也越来越受人们的关注,盲人的出行一直是困扰盲人的问题,尤其是去距离稍微远一些的地方,通常都会感到力不从心。
本论文提出了一种物联网技术下盲人导航系统的路径规划算法。
采用Dijkstra最短路径算法作为基础算法,为盲人的出行提供一条最合理的路径。
其研究意义在于:
一方面,通过多因素模糊算法来确定道路网络中的权值,对道路的因素等级进行人为的设定,另一方面,根据道路网络的空间分布特性,合理利用矩形限制搜索算法来限制搜索区域,减少计算工作量,系统以关系数据库作为存储模式,减小数据库的存储空间,再结合算法在盲人导航系统中的实际应用,给出了算法的应用实例。
总而言之,求合理路径集的方法就是尽量缩小搜索范围,配合合理的数据库进行快速搜索,从而得到合理路径集。
最后,利用仿真实验和实例分析验证了算法的正确性。
关键词:
物联网最短路径算法关系数据库多因素模糊算法限制搜索区域
RoutePlanninginHandheldBlindNavigationSystem
BasedonRFID
ABSTRACT
Withtheincreasingofthenumberofurbanpopulation,heblindofthisspecialgrouphasthefocusofsociety.Blindtravelhasbeenamajorproblemtotheblindespeciallytosomeplacefardistanceslightly,usuallyfeelinadequate.
Arouteplanningalgorithmforblindnavigationsystemwithinternetofthingstechnologisproposed.Shortest-pathalgorithmusingasabasisforthetravelingoftheblindprovidingthemostreasonablepath.Theresearchsignificanceliesin:
ontheonehand,determinetheweightsonroadnetworkthroughmulti-factorfuzzyalgorithm,theroadwaystohumanfactorslevelset.Ontheotherhand,accordingtothespatialdistributioncharacteristicsofroadnetwork,reasonableutilizationofrectangularlimitedsearchalgorithmtolimitthesearchareawhichcanreducecomputingworkload.algorithm,relationaldatabaseasthestoragemodecanreducethestoragespacedatabase,combiningwithitspracticalapplicationsinblindnavigationsystem.Anactualexampleisgiven.
Generallyspeaking,thebestwayforreasonablepathsetmethodistotrytoreducesearchrangewhichiswithreasonabledatabasearequicksearchandobtainsreasonablepathsets.Finally,usingthesimulationexperimentandexampleanalysisverifythecorrectnessofthealgorithm.
Keyword:
TheInternetofthingsShortest-pathalgorithmRelationaldatabaseMulti-factorfuzzyalgorithmRestrictedsearchingarea
1绪论
1.1盲人出行问题的提出
世界卫生组织估计全世界有盲人4000万到4500万,低视力是盲人的3倍,约1.4亿人,其中,中国是世界盲人最多的国家,目前约有800万盲人,占全世界盲人总数的18%,低视力者两千多万。
并且我国每年会出现新盲人大约45万,低视力135万,即约每分钟就会出现1个盲人,3个低视力患者。
党和政府历来十分重视和关心残疾人扶贫工作,中国残联成立20年来,通过一系列有力措施对贫困残疾人予以扶持,取得了显著的效果。
然而出行一直是困扰盲人的问题,尤其是去距离稍微远一些的地方,通常都会感到力不从心。
传统上,盲人出行主要依靠盲道、手杖。
已经面世的盲人导航系统大多基于超声波识别系统,现有的超声波导盲产品往往只能够判别出前方是否有障碍以及障碍的距离,而这些并不能够给盲人带来实质性的帮助。
而GPS全球定位系统进行导航则存在着一个精度的问题,最多只能提供一个大概的地点,而且存在着危险性。
对于盲人这个特殊群体,由于转弯次数、路面状况、红绿灯情况等影响,盲人所行走的最短路径并不一定就是最合适的路径。
因此,改善盲人的出行是个很有必要的措施。
1.2国内外发展现状
1.2.1国外发展现状
在国外,关于使用RFID技术为盲人进行导航的项目正处于实验阶段。
该研究计划由欧盟资助,旨在为盲人这一特殊群体开发基于RFID的道路信息指示。
目前一个Ispra的欧盟公民救援与防护中心(ISPC)组建的10人的专家组正在意大利北部的LavenoMombello测试三条植入1260枚电子标签的人行道。
另外,美国中央密歇根大学的学生研制出来RFID手杖是首个研究RFID技术的户外应用。
参与该项目研发的学生成员表示,若研发成功,将帮助视觉有障碍及听觉有缺陷的残疾人更安全地行走。
最短路径算法是图论中长久以来的经典问题,它是计算机科学、运筹学、交通工程学、地理信息科学等学科的研究热点,从20世纪50年代至今一直被广泛研究,它在交通运输分析与规划研究中是一个必不可少的环节,目前Dijkstra(迪杰斯特拉)算法是典型的最短路径算法,用于计算一个节点到其他所有节点的最短路径。
主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
1.2.2国内发展现状
在我国,目前还没有关于“RFID盲人导航系统”这一项目的开发。
主要由于我国的相关基础建设不够完善,盲道的管理不够规范,经常出现盲道被占用以及盲道连通性不足的情况,并且,国内RFID技术的不成熟以及研究该方面系统的人员欠缺等等也都是我们目前需要解决的问题。
关于最短路径算法的研究,除了计算机网络通讯技术领域外,在交通运输方面也被广泛研究,其中清华大学、中山大学、吉林大学、北京理工大学等多所高校都对此方面有所研究。
除此之外,中国科学院遥感应用研究所对于交通网络限制搜索区域时间最短路径算法取得了一定的成果,中国科学院广州能源研究所对基于城市道路数据库的最短路径搜索也取得了一定的研究成果。
1.3本人主要研究工作
本人研究的目的为盲人导航系统中路径搜索的设计与实现提供一个盲人出行时起点到终点合理路径的规划,利用矩形算法进行搜索范围的缩小,根据道路等级对道路网络进行简化,尽量减小数据的处理及存储。
先进行道路等级的划分、对道路权值的计算后通过Dijkstra算法得到最短路径,从而实现最优路径的选取,并通过以上的设计实现如下功能:
1.盲人出行时自动读取盲道上的第一张标签,确定当前的地理位置并通过语音提示的方式通知盲人。
2.盲人使用盲人输入法通过盲人键盘输入目的地后,系统通过数据库的查询配合Dijkstra算法、矩形算法等生成一条最合理的铺有RFID电子标签的盲道路径并开始提示盲人进行行走。
3.在盲人行走过程中,系统不断匹配读取到的RFID标签,通过语音提示的方式进行拐弯、标志性建筑、目的地等相关提示。
2系统方案
2.1主要功能
基于RFID手持式盲人导航系统,旨在解决现有的盲人导航系统不能够准确、安全的为盲人导航的问题。
其包括手持式终端、盲人手杖和RFID标签。
其中,RFID标签埋设于盲道上;盲人手杖通过RFID射频识别模块读取盲道上的RFID标签的信息;而盲人手杖与手持式终端通过无线传输模块建立连接,用于将标签信息传递给盲人手持式终端进行处理后给出导航指示。
本系统通过采RFID射频识别技术,为盲人的出行进行全程精准导航;其不但能够对当前位置进行定位,生成最优路线实现导航,同时还具有对常见路况信息智能分析的功能,满足盲人的出行需求,且操作简单,只要懂得盲文都能独立的使用该系统的功能。
本系统的反馈信息通过语音方式实现,清晰易懂,使盲人在行进的过程中也能收听到关于位置和周围环境情况的具体信息,为盲人出行带来方便。
其系统结构框图如下:
图2-1系统结构框图
本系统导航问题的核心算法就是最优路径搜索,如何生成最优路径至关重要。
而这样的路径规划则是基于拓扑结构的盲道网络,依据盲道网络的权值,搜索到一条权值最小的路径,其本质是图论和运筹学中的单源最短路径问题。
但是原始的最短路径算法对于本系统的应用,存在一定的问题,如盲道网络的存储、权值的确定,搜索范围的限定。
根据这三者,对原始的最短路径算法进行改进,以达到更好的适应本系统的需要。
3数据库实现原理
3.1sqlite数据库介绍
盲人导航系统需要考虑到盲人的安全问题,因此它必须是一个实时性的系统,对于数据的处理要求尽可能的快速且准确,数据库的选择和设计就起到了至关重要的作用。
SQLite是一个小型的嵌入式数据库,实现了独立的,可嵌入的,零配置的SQL数库引擎且占用资源非常的低。
在嵌入式设备中,只需要500K的空间就可以进行使用。
它支持Linux操作系统,能够通过C语言进行很好的结合,更重要的是,它的数据处理速度比Mysql、PostgreSQL等知名的数据库管理系统更快。
SQLite数据库结构简单、操作简单,无需安装和管理配置,它支持数据库大小至4TB,完全满足盲人导航系统的需要。
3.2sqlite数据库的移植
为了在博创PX270平台上使用SQLite数据库,则必须对SQLite源码进行交叉编译,具体编译及移植步骤如下:
1.从http:
//sqlite.org下载SQLite3.7.5到/home/mrdh/sqlite目录下。
2.解压缩SQLite源码包:
tarzxvfsqlite-3.7.5
3.解压缩后会在sqlite目录下生成一个sqlite-3.7.5的子目录,该目录中包含有编译所需的源文件及配置文件。
4.进入sqlite-3.7.5文件夹后通过configure脚本生成Makefile文件:
./configure--disable-tcl--prefix=/home/sqlite-arm-linux/--host=arm-linux
5.生成makefile文件,进行编译并安装:
make&&makeinstall
6.sqlite-3.7.5文件夹下生成一个文件夹sqlite,包含有bin、include、lib、share四个子文件夹。
7.进入bin文件夹,去掉sqlite3可执行文件的调试信息:
arm-linux-stripsqlite3
8.将子文件夹bin中的sqlite3文件拷贝到开发板的usr/bin目录下,将子文件夹lib中的文件pkgconfig文件夹、libsqlite3.a、libsqlite3.la、libsqlite3.so、libsqlite3.so.0、libsqlite3.so.0.8.6拷贝到/lib目录下。
3.3数据库实现原理
考虑到盲人导航系统要求盲人跟着RFID的提示信息行走,盲人自身对周围的环境没有很大的意识,所以盲人导航系统的数据库并不需要有正常人使用的界面及道路位置等信息,只需要知道道路之间的连接关系即可。
本系统所涉及的问题属于非数值问题,必须先将盲道网络转换为计算机能够识别和处理的数据结构。
针对本系统所涉及的盲道网络,用邻接矩阵表示最为简单明了。
但是矩阵中将会有大量的0元素和∞元素存在,数据冗余太大,增加了算法的无效循环次数,存储上也占用了大量的空间[1],如图3-1所示。
图3-1图及其对应的领接矩阵
而本系统所涉及的盲道网络数据和情况过于复杂,不单单只是盲道网络中的权值,还涉及到铺设在盲道上的RFID标签的标签码等复杂数据,采用邻接矩阵存储盲道网络,其表示能力明显不足。
针对上述问题,故采用关系数据库的存储模式。
为了最小化盲道网络中的RFID标签码的存储空间和处理时间,RFID标签的铺设至关重要。
我们将盲道网络中任意相邻的两个结点之间的RFID标签,采用连续的标签码。
如图3-2所示:
图3-2连续标签码的地图
图中带圈的RFID标签码为结点;而这样的铺设使得存储变得简单。
RFID标签可以根据标志性建筑的密集程度来铺设,但是相邻的两个RFID标签的距离不低于1米,这样有利于识别距离的设定(识别距离设定为0.5至1.0米,约为成年人行进一步至两步的距离)。
基于盲道网络拓扑结构的特点,采用数据库建立道路信息表和地点信息表来描述盲道网络。
表3-1道路信息表
列名
说明
数据类型
约束
Roadno
道路标识码
int
主码
Roadfirst
起点RFID标签码(结点)
int
非空
Roadsecond
第二个RFID标签码
int
非空
Roadthird
倒数第二个RFID标签码
int
非空
Roadend
终点RFID标签码(结点)
int
非空
Roadweigh
道路长度
int
非空
在表3-1中,采用四个RFID标签码来描述盲道网络中的一条道路,相邻结点间所有RFID标签码信息只需通过简单的加减运算即可得到。
表3-2地点信息表
列名
说明
数据类型
约束
Prompbf
前驱RFID标签码
int
主码
Prompno
当前RFID标签码
int
Prompend
后继RFID标签码
int
Promppy
地名信息/提示信息路径
varchar(20)
Prompcf
地名重复标识
varchar(20)
在表3-2中,采用了三个有序的RFID标签码作为主码;避免了交叉路口不同行走方向,提示信息不一致的混淆。
同时,该表还描述了地名信息和RFID标签码唯一的对应关系。
3.4数据库的实际应用
在数据库的实际应用中,主要包括有数据库连接的建立、关闭以及几条查询语句的使用。
1.数据库的连接方式如下:
intsqliteDB_open(){//数据库连接
intrc;//操作标志
printf("\ntryingtoopenthedatabase");
printf("\nifthedatabasedoesnoexistwewillbuildanewone!
");
rc=sqlite3_open("mrdh.db",&db);
if(rc){
fprintf(stderr,"Can'topendatabase:
%s\n",sqlite3_errmsg(db));
sqlite3_close(db);
exit
(1);
}
printf("\nopensucess!
");
return1;
}
2.关闭数据库的连接方式如下:
intsqliteDB_close(){//关闭数据库
if(db!
=0)
sqlite3_close(db);
}
3.通过RFID模块读取到第一张RFID卡后进行盲人所在道路的判断:
chartem_sql[256]="select*fromroadwhere";
chartem_sql0[256]=">=Roadsecondand";
chartem_sql1[256]="<=Roadthird;";
4.由得到的点查询与该点关联的所有路的信息:
chartem_sql[256]="select*fromroadwhereRoadfirst=";
chartem_sql0[256]="orderbyroadweight;";
chartem_sql1[256]="<=Roadthird));";
5.由得到的关联道路的起点和终点RFID码查询该道路的完整路径:
chartem_sql[256]="select*fromroadwhereRoadfirst=";
chartem_sql0[256]="androadend=";
chartem_sql1[256]=";";
6.由连续的三个点查询相关提示信息:
chartem_sql[256]="select*fromprompwherePrompbf=";
chartem_sql0[256]="andPrompno=";
chartem_sql1[256]="andPrompend=";
chartem_sql2[256]=";";
7.通过盲人输入的地名查询地点的相关信息:
chartem_sql[256]="select*fromprompwherePromppy=";
8.每个字符段通过sql拼接成完整的sqlite查询语句范例:
sql=strcat(tem_sql,name);
sql=strcat(sql,tem_sql0);
sql=strcat(tem_sql,name);
sql=strcat(sql,tem_sql1);
4算法设计
4.1Dijkstra算法设计
4.1.1Dijkstra算法介绍
解决单源最短路径问题的一个常用算法是Dijkstra算法[2-4],它由著名数学家E.W.Dijkstra于1959年提出,是按路径权值递增的次序产生最短路径的算法;可将本系统所涉及的盲道网络简化抽象为赋权网络,把盲道抽象为网络中的边,并以边的权值来表示盲道相关的参数,算法产生了赋权网络中从指定的结点到所有其它结点权值最小的路径。
其也是目前解决最短路径问题采用最多的理论基础。
4.1.2Dijkstra算法描述
首先将网络结点分为最短距离已确定的结点集合(简称:
确定结点集合)、最短距离未确定的结点集合(简称:
未确定结点集合);在搜索过程中,和确定结点相连通的未确定结点称为边缘结点[4];算法的过程就是设置并逐步扩充确定结点集合。
其次,确定结点集合在初始状态下只包含源结点,算法不断从边缘结点中搜索距源点路径权值最小的未确定结点加入确定结点集合,直至找到目标结点或者所有结点都加入确定结点才结束算法。
最后,算法在将未确定结点v加入确定结点集合时,还需考虑如下问题:
1.对于任意节点u有一对标记(du,pu)[5],其中du是从起源结点s到结点u的最短路径权值(当s=u时,du=0),pu则是从源点s到u的最短路径中u点的前驱结点。
2.对于余下的每一个边缘结点u,如果通过权值为w(v,u)的边和v相连,当dv+w(v,u)Dijkstra算法就是一个使用贪心选取法则填充表的for循环,伪代码如下:
voidGraph:
:
dijktra(Vertexs)
{
foreachVertexv
{
v.dist=INFINITY;//初始化所有节点
v.knowm=false;//所有节点都设为未知
}
s.dist=0;//设置节点到本身的距离为0
for(;;)
{
Vertexv=smallest_unknowndistancevertex;
if(v==NOT_A_VERTEX)
break;
v.knowm=ture;//当v点为最小未知节点时将v点设为已知节点
foreachVertexwadjacenttov
if(!
w.known)
if(v.dist+cvw{
//Updatew
decrease(w.disttov.dist+cvw);
w.path=v;//更新du、pu
}
}
}
从上面Dijkstra算法的描述及实现方法可以看出,Dijkstra的算法实现起来非常容易,由Dijkstra算法的伪代码可以看出,Dijkstra中存在三个循环,它的时间复杂度为0(n²),由此也可以看出,顶点越多,循环次数越多,计算的时间也将成倍的增长,花费的时间也将急剧增加。
在实际情况中,一个道路网络的模型规模往往较大,道路的节点数往往数以万计,因此,单纯地使用Dijkstra算法在理论上是可行的,在实际的运用中却会出现计算时间过长,出现达不到实时性的效果,所以必须对道路网络进行优化,并对搜索范围进行限制。
4.1.3Dijkstra算法在盲人导航中的实际应用
在实际运用中,道路并没有固定的方向,所以在数据库的存储中,对于每条道路都存储了两个方向的数据,以便于Dijkstra算法的搜索,图4-1是一个实际例子,表4-1表示初始配置。
第一个选择顶点为U1,路径长为0.该顶点标记为known。
领接到U1的顶点是U2、U3、U4,这三个顶点的项得到调整,如表4-2所示。
图4-17实际道路模拟图
表4-1初始状态下节点状态表
U
Known
du
pu
U1
F
0
0
U2
F
∞
0
U3
F
∞
0
U4
F
∞
0
U5
F
∞
0
U6
F
∞
0
U7
F
∞
0
表4-2U1被声明为已知后的节点状态表
U
Known
du
pu
U1
T
0
0
U2
F
5
U1
U3
F
4
U1
U4
F
1
U1
U5
F
∞
0
U6
F
∞
0
U7
F
∞
0
U1被加入确定节点集合,根据Dijkstra算法,将不再搜索U1点,下一步选取U4并标记为known。
顶点U2、U3、U5、U6、U7为领接的顶点,而他们实际上都需要调整,如表4-3所示。
表4-3U4被声明为已知后的节点状态表
U
Known
du
pu
U1
T
0
0
U2
F
4
U4
U3