基于arduino的无线传感器网络室内定位方法的研究毕业论文_第1页
基于arduino的无线传感器网络室内定位方法的研究毕业论文_第2页
基于arduino的无线传感器网络室内定位方法的研究毕业论文_第3页
基于arduino的无线传感器网络室内定位方法的研究毕业论文_第4页
基于arduino的无线传感器网络室内定位方法的研究毕业论文_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计论文第一章绪论1.1选题目的与意义从21世纪初开始,物联网(InternetofThings)的概念和技术在全球得到高度重视。物联网是互联网的应用拓展,它通过智能感知、识别技术与普适计算等通信感知技术,把传感器、控制器、机器、人和物等通过新的方式联系在一起,形成物与物、人与物联系,实现信息化、远程管理控制和智能化网络,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮[1]。国内外各大企业和高效开始将目光由传统的通信行业转向了物联网行业[2],而与物联网密切关联,基于大量具有通信功能的微型传感器构成的无线传感器网络也成为了国内外关注的热点。WSN是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳的自组织的网络系统,其目的是协作地感知、采集和处理网络覆盖区域被感知对象的信息,并发送给观察者。随着微电子和微系统(Micro-Electro-MechanismSystem,MEMS)、片上系统(SystemonChip,SOC)、无线通信以及低功耗嵌入式技术的快速发展,无线传感器网络(WSN)在军事应用、目标追踪、环境监测、医疗保健、空间探索等领域都得到广泛的应用,为信息感知带来了一场新变革,使得物与物、人与物、人与人之间,甚至人身的交互感知更方便[2]。传感器节点是无线传感器网络(WSN)的基本单位,节点的位置信息是WSN应用的基础,不能确定位置信息的节点所得到的监测数据是没有任何意义的,因而节点定位技术在WSN中具有举足轻重的地位。由美国国防部领导下的卫星导航联合计划局(JPO)主导研究的全球定位系统(GlobalPositioningSystem,GPS)是目前应用最广泛和成功的定位技术。GPS在许多嵌入式系统中被用于定位服务,如手机、导航系统或笔记本电脑等。虽然GPS能提供高精度的位置信息,但对于大多数的WSN应用并不适用。首先,现有的GPS部件非常昂贵。其次,GPS耗能高,将有可能对WSN生存期产生额外的约束。另外,WSN通常是静止的,定位协议可能只需要在网络初始化周期执行。因此,GPS可能不能实现有效的成本效益[3]。GPS主要应用于船舶、汽车、飞机等运动物体进行定位导航,只适合于在户外使用。在室内场合,由于建筑布局复杂、场景特定、再加上人员活动等不确定随机因素,存在着多径效应和非视距传输的影响,使得室内信道环境复杂,微波信号衰减厉害、测量误差大,GPS并不适用。而基于IEEE802.11协议的无线局域网(WirelessLocalAreaNetwork,WLAN)的定位技术已经取得了巨大的研究成果,尤其是近年来基于多种简单定位机制和算法,技术相对简单,低成本、低功耗、自组织的WSN定位技术得到了科研人员的重视和大量研究,具有很好的应用前景。图1-1列举了WSN的主要应用[3]。无线传感器的网络应无线传感器的网络应用军事智能微粒螺旋侦察狙击手侦测系统环境洪水、火山、森林火灾等监控自然栖息地监控医疗人工视网膜病人监护应急响应人体检查药品管理家庭用水监控火灾监控安防智能家居工业定期检修结构健康侦测图1-1WSN的应用类别和举例现代社会人们对生产生活中的安防和智能化的需求越来越高,精确的定位技术在许多室内场景的实用性和必要性已经日趋显著[4]。在一些公共场所,例如购物超市、展览厅、办公室、图书馆、地下停车场、监狱等,人们都需要精确的定位信息[2]。精确的室内定位信息能够实现高效的空间利用,为人们的生活带来了诸多便利。例如在医院进行医护人员与患者监控管理,药品和医疗设备管理。如果有病人发生意外,定位系统就可以确定患者位置并通知最近的医护人员,进行紧急处理;在图书馆布置带有温度和烟雾浓度的感知系统,如果发生火灾系统能够及时向监控中心报告火灾的具体位置;在超市,可以通过对消费情况的监控来对商品优化摆放,减少消费者寻找时间以及减轻拥堵情况[4]等等。因此,室内定位技术应用前景广阔,具有极大的研究价值和市场需求。1.2研究背景1.2.1国内外研究状况无线传感器网络的研究最初起源于美国军方,其研究的项目包括CEC、REMBASS、TRSS、SensorIT、WINS、SmartDust、SeaWeb、μAMPS、NEST等[5]。美国国防部远景计划研究局已经投资几千万美元,帮助无线传感器网络技术的研发。美国国家自然基金委员会(NSF)也开设了大量与其相关的项目,如:2003年制定了无线传感器网络研究计划,每年拨款3400万美元支持相关研究项目,并在加州大学洛杉矶分校成立了传感器网络研究中心;2005年对网络技术和系统的研究计划中,主要研究下一代高可靠、安全的可扩展的网络、可编程的无线及传感器系统的网络特性,资助金额达4000万美元。此外,美国交通部、能源部、美国国家航空航天局也相继启动了相关的研究项目。美国所有著名的院校几乎都从事传感器网络相关技术的研究,如加州大学洛杉矶分校、康奈尔大学、麻省理工学院和加州伯克利分校等都先后开展了传感器网络方面的研究工作。加拿大、英国、德国、芬兰、日本和意大利等国家的研究机构都先后开始了无线传感器网络的研究。欧盟第6个框架计划将“信息社会技术”作为优先发展的领域之一,其中多处涉及对无线传感器网络的研究。日本总务省在2004年3月成立了“泛在传感器网络”调查研究会。韩国信息通信部制定了信息科技839战略,其中“3”是指IT产业的3大基础设施,即宽带融合网络、泛在传感器网络、下一代互联网协议。企业界中欧盟的Philips、Siemens、Ericsson、ZMD、France、Chipcon等公司,日本的NEC、OKI、Skyleynetworks、世康、欧姆龙等公司都开展了无线传感器网络的研究。我国对无线传感器网络的研究起步较晚[6],首次正式启动出现于1999年中国科学院《知识创新工程点领域方向研究》的“信息与自动化领域研究报告”中,无线传感器网络是该领域的五大重点项目之一。2001年,中国科学院依托上海微系统与信息技术研究所成立微系统研究与发展中心,旨在引领中国科学院无线传感器网络的相关工作。在一份我国未来20年预见技术的调查报告中,信息领域157项技术课题中有7项与传感器网络直接相关[6]。2006年初发布的《国家中长期科学与技术发展规划纲要》为信息技术定义了三个前沿方向,其中两个与无线传感器网络的研究直接相关,即智能感知技术和自组织网络技术。我国2010年远景规划和“十五”计划中,就已经将无线传感器网络列为重点发展产业之一[2,7]。2012年教育部也将无线传感器网络纳入科研重点项目[7]。近年来,国家自然科学基金委员会对无线传感器网络相关的研究课题给予了大力资助,大量关于无线传感器网络的国家自然科学基金研究项目赫然在列。国家863高技术发展也设立了专项基金,以资助无线传感器网络技术的研究工作。从20世纪90年代起,国内外许多高校和研究机构开始了室内定位技术的研究,也出现了一些成熟的室内定位系统。例如ActiveBadges[11]、ActiveBats、Cricket[12]、RADAR[13]等。ActiveBadges与ActiveBats定位系统都是由AT&T研发的。ActiveBadges定位系统采用红外通信技术来定位,但红外信号存在直线视距和传输距离较短等缺点,另外系统需要布置多个基站,这提高了系统的复杂度和维护成本,降低了系统的可扩展性。而ActiveBats定位系统使用超声波(timeofflight,TOF)技术来实现定位,相对于ActiveBadges定位系统其精度更高,可扩展性较好,且易于部署,但成本较高。由MIT提出的Cricket系统采用了超声波技术并根据TDOA(TimeDifferenceOfArrival)原理来实现定位,其定位精度高,但需要昂贵的硬件设备来支持,并且系统功耗大。RADAR系统是由Microsoft公司开发的,它是基于IEEE802.11WLAN的室内无线射频定位系统,采用经验测试和信号传播模型相结合的定位系统。RADAR系统易于安装,基站少,但定位系统必须处于无线局域网中,这样,在网络的规模和电源功能方面将是一大限制[2]。1.2.2室内定位技术ScaleUWBScaleUWBProprietarymicrowavesolutionsAOATDOARTOFRF&IRRF&UltrasonichybridmethodsWLANBluetoothDECTZigbeeHomeRFpositioningRSSTDOATOAAOAGPSDGPSWirelessAssistedGPSAutomation/controletcguiding,trackingrouting,etc.GSMCDMA/3GMobilecellularnetworkCell-IDTOATDOAE-OTDRSSWidesignal-strengthfingerprintResolution0.1meter10meter1meterRural&RemoteOutdoorLocally&UrbanIndoors红外线室内定位技术定位的原理是,红外线标识发射调制的易被荧光灯或者房间内的灯光干扰,在精确定位上有局限性。(二)是一种新兴的短距离、低速率无线网络技术,它介于无线射频识别技术和无线蓝ZigBee最显著的技术特点是它的低功耗和低成本。(五)以及人的定位跟踪与导航,且能提供十分精确的定位精度。(六)支持IPv6,可以很方便地和已有网络互联,并且支持的架构广泛,功能强大,可以满足复杂应用的需求[19]。2.1无线传感器网络结构2.1.1无线传感器网络体系结构一个典型的无线传感器网络结构如图2-1所示,其中包括传感器节点、汇聚节点、互联网或通信卫星和管理节点等[5,9]。汇聚节点汇聚节点卫星、Internet、移动通信网络任务管理节点监测区域传感器节点图2-1典型的无线传感器网络结构在图2-1中,大量传感器节点随机部署在被监测区域中,通过自组织方式构成网络。传感器节点通过多跳中继方式将所探测到的数据传到汇聚节点,然后经卫星、互联网或是移动通信网络等途径到达最终用户所在的任务管理节点。2.1.2无线传感器节点结构传感器节点是无线传感器网络的基本单位,典型的传感器节点由传感单元、处理单元、无线通信单元和电源单元组成,结构如图2-2所示[2,4,5]。传感器传感器ADC存储器处理器网络收发器MAC传感单元处理单元无线通信单元电源单元图2-2无线传感器网络节点结构各个单元的基本功能:传感单元:由传感器和模数转换器组成,用于感知、获取监测区域内的信息;处理单元:由嵌入式系统构成,包括处理器、存储器等。负责控制和协调节点各部分工作,存储和处理自身采集的数据以及其他节点发来的数据;无线通信单元:由支持相应无线通信协议的无线数据收发器组成,负责传感器节点之间的通信,交换控制信息和收发采集数据;电源单元:通常采用微型电池,负责为传感器节点提供正常所必需的能源。本论文研究中采用的是移动电源。2.1.3无线传感器网络的协议栈随着人们对传感器网络研究的不断深入,研究人员提出了多个传感器节点上的协议栈[9,14]。图2-3所示的是研究人员早期提出的一个协议栈,该协议栈包括物理层、数据链路层、网络层、传输层和应用层。另外,该协议栈还包括能量管理平台、移动管理平台和任务管理平台。这些管理平台使得传感器节点能够按照能源高效的方式协同工作,在节点移动的无线传感器网络中转发数据,并支持多任务和资源共享。应用层应用层传输层网络层数据链路层物理层能量管理平台移动管理平台任务管理平台图2-3无线传感器网络协议栈各层的功能如下[9]:物理层:实现信道选择、无线信号监测、信号发送与接收等功能,设计目标是以尽可能少的能量损耗获得较的链路容量;数据链路层:负责数据成帧、帧检测、媒体访问和差错控制。该层又可以细分为媒体访问控制(mediumaccesscontrol,MAC)子层和逻辑链路控制(logicallinkcontrol,LLC)子层,其中媒体访问控制子层规定了不同的用户如何共享可用的信道资源,逻辑链路控制子层负责向网络提供统一的服务接口;网络层:主要负责路由生成与路由选择,主要功能包括分组路由、网络互联、拥塞控制等。路由协议的功能是在传感器节点和汇聚节点之间建立路由,可靠地传递数据;传输层:负责数据流的传输控制,现阶段对传输控制的研究主要集中于错误恢复机制,但是目前还没有专门适合无线传感器网络的协议提出;应用层:主要负责获取数据并进行初步处理,包括一系列基于检测任务的应用软件。2.2无线传感器网络的定位机制在无线传感器网络中确定传感器节点自身位置是确定事件发生位置的前提,只有在传感器节点自身位置得到正确的估计后,才能确定事件发生的具体位置[4]。无线传感器网络中节点分为两种类型,已知自身位置的信标节点和待定位的未知节点。节点定位就是根据网络中少数的信标节点,按照某种方法来推算出未知节点的位置。信标节点的位置可以通过携带GPS等定位装备来确定或者是人工布设在已知位置。信标节点在很多的书中又被称为参考节点,一般在网络中数量很少,下文统一称为参考节点。一般来说,无线传感器网络节点定位算法应具备以下特点[6]:自组织能力不依靠外部的基础设施;鲁棒性,即能容忍一定的物理测量误差及单个节点的实效,能快速适应网络的拓扑变化;资源节省要求较少的通信开销、计算处理和存储能力。目前对无线传感器网络节点定位技术的研究主要集中在以下两个方面[6]:一是算法精度,设计具有足够精度的定位算法,需要多大的精度依赖于不同的应用需求;二是误差分析,分析无线传感器网络定位的误差特征。无线传感器网络的节点定位算法大致分为两大类:基于测距(range-based)的定位机制和与距离无关(range-free)的定位机制。前者需要测量节点间距离或方位角度信息。而后者不需要。2.2.1基于测距的定位技术基于测距的定位技术要求待定位节点与参考节点间具有直接或者间接测量相互距离或者角度的能力。一般来说,基于测距的定位技术实现主要有以下步骤[5,6]:测距/测角:测量估计两节点间的距离或者角度信息;定位估计:采用定位方法来获取节点的相对位置或绝对位置;位置校正:利用与相邻节点间的连通信息及其位置信息来校正待定位节点的位置。记录记录测距度量值测距度量值转化为d或者方位定位算法显示系统无线信号位置坐标(x,y)测距度量值:TOAAOATDOARSSI图2-4基于测距的定位原理框图基于测距的定位原理如图2-4所示[4],先由未知节点硬件接收外部参考节点发射的无线信号并记录测距度量值,如TOA(timeofarrival)、TDOA(timeofdifferentofarrival)、AOA(angleofarrival)、RSSI(receivedsignalstrengthindicator)等,接着将测距度量值转化为未知节点到参考节点的距离d或者方位,然后在采用相关算法来计算未知节点的位置,并最后显示出来。常用的基于测距的定位算法有三边测量法、三角测量法、极大似然估计法等,将在2.3节中详述。(1)TOA测量法一般是根据已知信号的传输速率及信号在两节点间的传播时间来计算两节点间的距离,然后利用已知的定位算法计算出节点的位置。基于TOA的定位能够获得很高的精确度,但一般需要昂贵的硬件,并且接受器耗能高。(2)TDOA测量法与TOA测量法都是基于时间的测距技术,两者很相似。但TDOA是通过记录发射信号在两节点间的到达时间差信息,并根据已知的信号传播速率来计算两个节点间的距离差,再通过已有的定位算法计算出未知节点的位置。Cricket系统就是基于TDOA原理的[4]。(3)基于AOA的定位是接收点通过天线阵列或多个接收机来估算发射节点信号到达方向(DOA),从而计算出接收节点和发射节点之间的相对方位或者角度信息。未知节点的位置可以通过一组测量装置之间的方向线的交点来确定,其定位原理如图2-5所示。NNAB图2-5基于AOA的定位原理基于AOA的定位原理简单,但在室内环境,容易受到噪声、多径效应和非视距等问题的影响,定位精度较差。并且角度测量需要较高的硬件设备支持。(4)基于RSSI的测距技术是已知发射节点的发射信号强度,接收节点根据接收到的信号强度来计算出信号的传播损耗,然后利用理论或经验的信号传播模型将传播损耗转化为距离信息。因传感器节点本身具有无线通信能力,故其是一种低功耗、廉价的测距技术,在RADAR系统中就是使用了该技术。射频信号在传播的过程中会随着传播的距离增加而衰减,在自由空间中,RSS(ReceivedSignalStrength)值与发射距离的平方成反比关系。(2-1)上式就是经典的Friis传输方程,其中,分别为发射功率和接收功率;,分别为发射天线和接收天线的天线增益;为信号载波波长;为信号传输距离。在基于RSSI的定位中关键是室内无线信号传播衰减模型的建立[5]。该算法的实现简单,便于计算,但它的定位准确性在很大程度上依赖于建立准确的无线信号传播衰减模型。公式(2-1)是在理想情况下的传播衰减模型,在室内环境,要得到更为确切的传播衰减模型需要通过物理模型和实验方法获得,本文将在第三章详细叙述。2.2.2与距离无关的定位技术基于测距的定位技术一般定位精度较高,但是对于无线传感器网络节点的硬件要求也比较高。针对无线传感器网络的特点,研究者们提出了免于测距的定位技术,这类定位方法中仅仅需要得到待定位节点与相邻节点间的连通信息,接着利用各种优化方法估计待定位节点位置[6]。简而言之,与距离无关的定位技术是通过对节点间的距离进行估计或者确定包含未知节点的可能区域,来确定未知节点的位置。因为与距离无关的定位技术不需要测量节点间的距离或者方位,硬件要求低,成本低,使得该技术更适合于大规模无线传感器网络,并且定位性能受环境因素的影响小。但是相应的定位误差会有所增加,定位精度也有所降低。常用的定位算法主要有DV-HOP算法、加权质心算法和APIT算法等,详述见于2.3节。2.3常用的室内节点定位算法2.3.1三边测量法三边测量法是已知若干个参考节点的位置坐标和他们到未知节点的距离,然后联立方程组求出位置及节点的位置坐标[2,4,16,25,29]。由于测距有一定的误差,并且联立方程组也可能存在无解的情况,这时一般采用最小二乘法来确定未知节点的位置。AABCD图2-6三边测量法如图2-6所示,三个坐标已知的参考节点、、,一个未知节点的坐标待定,其中参考节点到未知节点的距离(可通过RSSI法来测量)分别为、、,联立建立参考节点与位置节点的距离方程组:(2-2)用前两个方程分别减第三个方程,将方程组线性化为:(2-3)其中:用最小二乘法求解方程组(2-3),便可以得到待求节点的位置估计值。根据矩阵理论,是方程组(2-3)的最小二乘解的充要条件是,为方程组(2-4)的解.对于实矩阵,则将(2-4)转化为(2-5)只要所有参考节点不共线,则的两个列向量线性无关,,由于,因此2阶矩阵可逆。从而得出未知节点的位置坐标估计为(2-6)2.3.2三角测量法与三边测量法的距离测定不同,三角测量法主要是利用参考节点与未知节点之间的角度信息来进行定位[2,4,16,28]。三角测量法的示意图如2-7所示。AABCDO1O3O2图2-7三角测量法已知节点、、,设未知节点的坐标为,则未知节点相对于、、的角度分别为:,和。根据三角形原理,已知过、、三点可以确定唯一圆,设其圆心为,其半径为,可知,求解圆形的半径可以得到以下方程组:(2-7)求解公式(2-7)能够得到圆心的具体坐标及其半径。同理可以求得另外两个圆的圆心坐标和半径。当确定了半径,和后,可以将三角法转换为三边法,通过公式(2-2)来计算未知节点的位置坐标。2.3.3极大似然估计算法极大似然估计算法基本思想是通过未知节点和多个位置坐标已知的参考节点的距离关系来建立方程组,并通过最小二乘法来解方程从而得到未知节点的位置坐标估计[4]。已知个参考节点的坐标分别为,…,他们到未知节点的距离分别为,…,则有:(2-8)用方程组中前个方程减去第个方程,将方程组线性化为:(2-9)其中:用最小二乘法求解方程组(2-9)得:(2-10)2.3.4DV-Hop定位算法DV-Hop(DistanceVector-Hop)算法的基本思想是将未知节点到参考节点之间的距离用网络中节点的平均每跳距离和两节点之间的跳数乘积来表示,然后再使用三边测量法或者极大似然估计算法来获取未知节点的位置信息[2,4]。其定位过程大致为:首先,网络中所有的参考节点使用距离矢量交换协议,将其位置信息和跳数信息广播到整个网络中,使网络中的所有的未知节点获取与参考节点的跳数;其次,参考节点根据正确接收的跳数信息,计算未知节点与该参考节点的平均每跳距离,并将其广播到整个网络中,未知节点利用接收到的跳数信息和平均每跳距离值计算与参考节点的距离。最后,未知节点利用三边测量法或者极大似然估计算法来实现定位。2.3.5APIT定位算法APIT的全称是ApproximatePointinTriangle,三角形内点近似估计算法。APIT定位中,已知多个参考节点的坐标位置,其中随机每三个参考节点形成一个三角区域,根据节点在区域内部还是外部就可以缩小节点位置的可能范围[2,16]。AAECDBO图2-8APIT定位算法如图2-8所示,A,B,C,D,E表示的是APIT定位算法中的参考节点,阴影部分表示的是未知节点的所在范围。通过不断地计算,这个区域可能越来越小,最后将这个所确定的区域的重心O作为未知节点的位置坐标。APIT定位算法在定位中对硬件的要求低,耗能小。但它会受到参考节点数目的影响很大,参考节点一旦数量增多,对于定位计算将会产生相当大的负担。另外,对于参考节点的距离,分布方式等要求较高,并存在不可避免的误差。2.3.6加权质心算法如同2.3.5所介绍的APIT定位算法中最后利用三角形的重心作为未知节点的估计值。质心定位算法也是图形定位中非常常见的一种算法[2,16]。质心定位算法是由美国南加州大学NirupamaBulusu等学者提出来的。该算法的核心思想是假设未知节点以所有在其通信范围内的参考节点的几何质心作为估计位置坐标。具体过程:参考节点每隔一段时间向邻近节点广播数据包,其中包含了自身的信号标志以及具体位置等信息。当未知节点在一段时间后收到来自不同的参考节点信号的数量达到了预定的标准后,则默认此未知节点的位置在于与那些参考节点所构成的多边形的质心上。未知节点的位置估算公式为:(2-11)(2-12)质心定位算法较为简单,计算量小。但如若需要较高的定位精度,则需要部署大量的参考节点。在日常生活中一般精度较低,误差大。2.4定位系统和算法的性能评价标准定位系统和算法的性能评价标准[2,4,16]大致有定位精度、网络规模、节点密度、功耗、容错性与自适应性和代价等。定位精度定位精度是无线传感器网络定位技术最重要的性能评价标准。定位精度一般指的是定位误差,在与距离无关的定位算法中常用误差值和节点通信半径的比例来表示;在基于测距的定位算法中常用定位坐标与实际距离来比较。网络规模对定位系统的性能评价应考虑可实现定位的范围,不同的定位算法所能定位的范围和规模也不同。在实现定位的过程中要因地制宜,选择适合的定位算法。节点密度在无线传感器网络中,网络成本与节点密度是成正比关系的。在节点密度增加导致网络成本上升的同时还会增加网络节点间的通信冲突。节点密度还会影响一些定位算法的定位精度,如极大似然估计算法的定位精度会随着节点密度的增大而提高。功耗功耗是对无线传感器网络设计与实现影响最大的因素之一。在无线传感器网络中,节点的微型电源能量是有限的,为了延长整个网络的正常工作时间,就要尽量降低定位算法的计算复杂性,减少节点之间的通信开销、存储开销。容错性与自适应性在理想的实验环境中,大部分的定位算法误差较小。但在复杂多变的实际应用环境中,无线信号的传播受到多径效应和非视距传输问题的影响,导致定位误差容易发生突发性增大。因此,定位系统和算法必须具备良好的容错性和自适应性。代价定位系统和定位算法需要很多代价,包括时间代价(一个系统的安装时间、配置时间和定位时间)、成本代价(实现定位系统的基础设施和节点设备的成本)和硬件代价(一个定位系统或者算法所需要的基础设施和网络节点的数量。硬件尺寸等)。第三章基于RSSI的室内定位模型分析及算法设计3.1RSSI测距原理基于RSSI的测距原理在第二章已经进行了简要的介绍。无线射频信号强度在春播的过程中会随着距离的增加而衰减,在接收端接收到的信号强度(RSS值)与传播距离存在着一定的数学关系。在基于RSSI定位中,我们首先需要确定RSS值与距离d之间的准确的数学关系,即建立RSSI测距模型。RSSI测距模型,就是在已知发射功率的情况下,通过测量接收点接收的信号强度,使用信号传播模型将信号传播损耗转换为距离的数学模型。3.1.1无线信号传播损耗模型无线信号传播损耗模型是通过不同的算法模拟、仿真电磁波的传播过程,并计算其在传播过程中产生的衰减,即路径损耗值,然后依据信源发射功率预测无线电磁波在区域内的场强分布情况。下面介绍两种经验传播模型,自由空间传播路径损耗模型(free-spacepropagationmodeling)和对数-常态阴影模型(Log-normalshadowmodel)。(1)自由空间传播路径损耗模型在上一章中,对于自由空间传播模型做过简单的介绍。在自由空间中,无任何干扰的情况下,即理想介质,无电磁能量吸收,也不存在多径衰落[2,17,18]。自由空间的传播损耗模型是指天线辐射的电磁波在传播过程中随着传播距离的增大能量的自然扩散而引起的损耗,它反映了球面波的扩散损耗[2,17]。设信号源发射功率为,均匀辐射,则以发射源为中心,为半径的球面上单位面积接收到的功率为[2,18]:(3-1)设发射天线增益为,则:(3-2)设接收天线增益为,则接收天线有效面积为:(3-3)接收天线所截获的功率为:(3-4)其中,为自由空间波长。将(2-3)代入(2-4)得:(3-5)令:(3-6)其中,定义为自由空间的传播损耗,即:(3-7)以分贝表示自由空间传播路径损耗模型为:(3-8)在实际短距离的应用中,由于信号传播并非自由空间,上式可改写为:(3-9)其中,为距信号源距离,单位;为信号发射频率,单位;为信号衰减因子,范围一般为2~4。(2)对数-常态阴影模型[2,18]在室内环境,由于存在多径、非视距、绕射等问题的影响,公式(3-9)并不适用,一般常用对数-常态阴影模型。此模型中的一些参数可以根据不同环境来测定:(3-10)其中,为经过距离后的路径损耗,单位;为经过单位距离后的路径损耗,单位;为近地参考点,取决于实验值,一般取;为信号衰减因子,与传播环境有关,随环境中障碍物的增多而增大,范围一般为2~4;是均值为0的高斯随机变量,其标准差范围为4~10。对于不同参数、、的路径损耗模型,有着不同的接收和发送距离。3.1.2RSSI测距模型[18]在基于RSSI的定位中,基于以上理论,接收端接收到的信号强度(RSS)为:(3-11)式中,为接收信号强度指示RSSI();(),分别为发射信号功率和发射天线增益。IEEE802.15.4标准给出简化的信号衰减模型为:(3-12)在室内定位中,考虑到环境、成本、定位精度要求等因素,所使用的RSSI测距信号衰减模型由公式(2-12)进一步简化为:(3-13)令:(3-14)上式中,为信号衰减因子;为射频参数;为非反射、多径效应等其他环境造成的信号衰减量;为定位节点与参考节点之间距离为1m时RSS值。根据公式(2-13)和(2-14)可知,RSSI值与距离d的关系取决于和。在一个特定的室内环境,和是两个确定的参数值,并且需要实验来测定。3.2RSSI测距实验根据以上理论,我们得知在建立RSSI测距模型时需要通过一定的方法来测定影响RSSI值与传播距离d之间数学关系的关键参数值和。主要方法是,在设定的室内环境里,通过布置一定梯度距离d的参考节点和未知节点来获得RSSI值,得到多组RSSI值与距离d的对应关系,再利用最小二乘法拟合出RSSI值与距离d的的数学模型的参数值,确定RSSI与d的数学关系式。根据公式(2-13)与(2-14)知:(3-15)上式中有四个未知变量,参数和是需要此实验测定优化的;距离d则只需要设定合适的值;而对于RSSI,由于一些环境固有的特性或者随机干扰的影响,同一参考节点和未知节点,相同距离,在不同的时间RSSI显示值有所波动,所以利用多次测量取平均值来进行优化处理。(3-16)实验所选的监测环境区域是星天苑E座单号区501宿舍,这里人员活动少,环境简单,对于二维定位系统(所有节点放在同一平面)来说相对容易。宿舍长约4.8m,宽约4.3m,两侧各有两张床位(上面床铺下面课桌)和上床的楼梯,楼梯在床位中间。每张床位长约2.05m,宽约1.0m,楼梯长约1.0m,宽约0.5m。模拟图如下所示:22413走廊楼梯楼梯阳台图3-1星天苑E座单号区501宿舍根据定义,为未知节点与参考节点之间距离为1m时RSSI值。在测量时,考虑到芯片朝向不同会导致测量结果有所变化,在测量时采用全向测量,设置未知节点与参考节点之间芯片所处角度分别为0°,45°,90°,135°和180°。22413走廊楼梯楼梯阳台图3-2测量值时的节点部署如图3-2所示,未知节点位于距离一侧床位1m中间处,在以未知节点为圆心,1m为半径的半圆上用同一参考节点分别在0°,45°,90°,135°和180°,5个不同的角度广播数据包,每个方向获取50个数据,按公式(3-16)计算均值,作为值。其结果如表3-1所示。表3-1未知节点在走廊中间时测得的值角度0°45°90°135°180°/dBm-82-82-82-82-82从上述结果可以得出,参考节点与未知节点夹角不同不会影响未知节点接收信号强度RSSI值。所以实验测得的值为-82dBm。接下来就是要测量信号传播因子。具体方法如下:将未知节点固定在一个位置,用同一参考节点在每隔0.1m的位置广播数据包,未知节点接收到50个RSSI值后按公式(3-16)计算均值,并将该均值作为相应距离下的接收信号强度。考虑到宿舍物品较多,对信号的吸附作用大,实验测量距离间隔较短。测量信号衰减因子时的节点部署如图3-3所示:22413走廊楼梯楼梯阳台图3-3测量信号衰减因子时的节点部署测量结果如下:表3-2不同距离d的接收信号强度RSSI距离d/m0.10.20.30.40.50.60.7RSSI/dBm-64-67-70-73-74-76-77.5距离d/m0.80.91.01.11.21.31.4RSSI/dBm-79-81-82-83-85-88-85距离d/m1.51.61.71.81.92.02.1RSSI/dBm-88-89-90-90-88-91-91从表3-2可以看出,虽然参考节点与未知节点之间的距离变化间隔很小,为0.1m,但RSSI的变化却较明显,一般在-3dBm左右,这说明iDuino节点的灵敏度很高,很适合于短距离的定位。另外,当参考节点与未知节点之间的距离达到2.0m后,接收信号强度基本保持不变,因此只需取2.1m之前的数据进行参数拟合。令:(3-17)将公式(3-15)变形为:(3-18)依据表3-2建立如下的新数据表:表3-3t与RSSI关系t106.9905.2293.9793.0102.2181.549RSSI/dBm-64-67-70-73-74-76-77.5t0.9690.4580-0.414-0.792-1.139-1.461RSSI/dBm-79-81-82-83-85-88-85t-1.761-2.041-2.304-2.553-2.788-3.010-3.222RSSI/dBm-88-89-90-90-88-91-91根据线性方程的最小二乘法原理[33]得方程组:(3-19)将数据代入公式(3-19),得:(3-20)即:(3-21)求解该二元一次方程组得:(3-22)将公式(3-22)代入(3-15),即得到实验环境下的接收信号强度RSSI与距离d之间的数学模型。如下所示:(3-23)由上式可知,参数的值为-83.617dBm,这与实验测得的数据-82dBm相差仅1.617dBm,而相对在间隔为0.1m测定的接收信号强度(其接受功率变化为3dBm)而言,这样的误差已经足够小了。因此该拟合结果在2.1m内的拟合精度很高。3.3基于RSSI的三边定位简化算法通过以上实验可以证明信号的衰减与距离成对数关系。接收节点与发射节点的距离越近,由RSSI值的偏差产生的绝对距离误差越小。当距离大于某一值时,由RSSI值波动造成的绝对距离误差将会很大。所以,一个未知节点能够收到N个参考节点的信号,应当采用RSSI值大的前几个参考节点进行定位计算,这样可以减小定位误差。一般采用三个参考节点实现定位,所以对RSSI值进行从大到小排序处理,并选取前三个RSSI值,将RSSI值转化为距离d,根据三边定位算法原理简化定位算法,即采用双边定位原理得到两个可能的定位点,再利用RSSI测距原理对两个定位点进行择优选择确定定位点。下面将介绍基于RSSI的三边定位的简化算法。如图3-4所示,三个坐标已知的参考节点、、,一个未知节点的坐标待定,其中参考节点到未知节点的距离分别为、、。其中、、是通过公式(3-18),由未知节点计算而得:(3-24)以参考节点A为圆心,为半径的圆与以参考节点B为圆心,为半径的圆相交于两点D和E,由圆的相交原理易知未知节点肯定是其中一个交点。AABCDE图3-4双边测量法联立两圆得二元二次方程组:(3-25)由(2)-(1),将(3-17)转化为二元一次方程:(3-26)(一)当,即A,B连线与横轴平行时,易知两个交点的横坐标相同。由(3-18)得:(3-27)设两个交点D,E的横坐标为:(3-28)将(3-20)代入(3-17)的(1)式,得两个交点D,E的纵坐标为:或者(3-29)同理可以求得当,即A,B连线与纵轴平行时,两圆交点的坐标。(二)当且时,即A,B连线既不与横轴平行也不与横轴平行。将(3-18)变形为:(3-30)令:(3-31)则:(3-32)将(3-24)代入(3-17)的(1)式,得到标准形式的一元二次方程:(3-33)由于两个圆相交,所以有:(3-34)则:(3-35)将(3-26)代入(3-27)并化简的两个交点的坐标:或(3-36)通过以上的计算,得到两个可能的未知节点坐标D和E。在无任何错误和误差的情况下,未知节点就是其中的一点。但在实际环境中是不可能的,误差是不可避免的,所以D或E只是未知节点的估计位置点。为了确定两个交点中哪个点作为未知节点的估计位置点更为精确,只需计算两个交点分别到第三个参考节点C的距离和,并与未知节点到参考节点C之间的距离进行比较,若与大小更为接近,则选择D作为未知节点的估计位置点;同理,若与大小更为接近,则选择E作为未知节点的估计位置点。下面是具体的绝对差比较方法:(3-37)若:(3-38)则选择D作为未知节点的估计位置点;若:(3-39)则选择E作为未知节点的估计位置点。通常情况下,由于复杂的环境因素,接收信号强度RSSI与距离d的映射关系会受到很大的影响。所以将RSSI等效距离d后,还可能会出现两圆相切和相离的情况。下面是这两种情况下的定位算法。(三)当两圆相切时,如图3-5所示。三个坐标已知的参考节点、、,一个未知节点的坐标待定,其中参考节点到未知节点的距离(可通过RSS法来测量)分别为、、。以参考节点A为圆心,为半径的圆与以参考节点B为圆心,为半径的圆相切于两点D。AABCD图3-5两圆相切根据以上理论,可以直接将D作为未知节点的估计位置点。(3-40)则D的坐标如下:(3-41)(四)若两圆相离时,如图3-6所示。三个坐标已知的参考节点、、,一个未知节点的坐标待定,其中参考节点到未知节点的距离(可通过RSSI法来测量)分别为、、。以参考节点A为圆心,为半径的圆与以参考节点B为圆心,为半径的圆相离。连接A,B两点的线段中点为D。AABCD图3-6两圆相离在这种情况下,可以直接将线段AB的中点D作为未知节点的估计位置点。其中D的坐标如下:(3-42)第四章基于iDuino节点的室内定位系统的实现4.1iDuino节点简介[19]iDuino是一块无线传感器网络节点的开发板,即课题研究中使用的传感器节点,采用Atmega128RFA1SOC微处理器。其中Atmega128RFA1SOC微处理器的主要芯片选型参数指标如表4-1所示:iDuino开发板具有以下优点:研发和应用并重。iDuino功能强大,原理开放和代码开源,能够满足用户快速开发利用;多操作系统支持。基于Atmega128RFA1芯片的开发板iDuino可以支持Arduino、Contiki、TinyOS、Nano-RK、BitCloudZigBee等多个操作系统。并且网上资源丰富,方便学习;Arduino硬件接口兼容。iDuino的硬件接口设计为Arduino硬件接口样式,便于自由扩展。Arduino开发板的单排插针改为双排插针后在物理和逻辑上仍然与官方的Arduino开发板保持兼容。iDuino是基于AVR架构开发的,由电源管理模块、微处理器及射频模块、系统复位及USB转UART模、以太网模块、外部存储模块、扩展接口部分组成。除了具备标准的802.15.4无线收发功能外,还具备以下功能:满足中国802.15.4C频段标准的无线射频收发模块;满足无线网络与以太网互联要求的以太网收发模块;满足大容量数据存储需求的SD功能模块;满足唯一地址编码要求的MAC地址模块;满足以太网供电要求的POE电源管理模块(选配)。表4-1Atmega128RFA1SOC微处理器参数指标芯片项目参数Atmega128RFA1SOC微处理器主频16MFLASH128KBRAM16KBEEPOM4KB运行时功耗(16M)4.1ma深度休眠是功耗<250na最大发射功率3.5dB接收灵敏度(250kbps)-100dB支持速度250kbps,500kbps,1Mbps,2Mbps发射时功耗(3.5dB)14.5ma接收时功率12.5ma支持频率2.4GISMiDuino中还加入了DS2411ROM芯片,提供48bit数据用于生成全球唯一MAC地址,它与MCU之间采用单总线(OneWireNetwork)协议。另外还配有有RESET复位键,支持用户手动复位,便于输出。在iDuino单片机上,UART通过Silabs的CP2104串口转换成USB接口实现与电脑的通讯。并且通过AVRDUDE上机软件和CP2104的配合,在实现烧录的Bootloader帮助下,iDuino可以实现USB上载编程。图4-1为本论文使用的iDuino传感器节点实物图,并配备有小型移动电源通过USB为其供电。图4-1配备电源的iDuino开发板实物图在第一次使用iDuino开发板时,需要在上位机上安装CP2104驱动程序,将USB接口虚拟出一个COM口,每台上机位安装后都将虚拟成不同的COM口。这对于iDuino软件开发和程序上传很重要。在上位机上只需要将开发平台上的程序通过COM口上传,就可以对iDuino单片机进行编程。如图4-2所示。图4-2iDuino节点USBtoUART虚拟串口任何基于SMeshStudio的Arduino项目的代码都由三部分组成,具体列表如下:Arduino核心库,即ProjectExplorer视图中的Arduino目录,该目录下有两个文件夹,一个是core,里面放的是Arduino统一的核心库;另外一个是variant,里面放的是Arduino特定板卡的管脚定义文件pins_arduino.h。Libraries扩展库,即ProjectExplorer视图中的Libraries目录,里面存放着用户导入的和特定应用相关的扩展库,该目录只有在用户导入扩展库后才会存在,ArduinoTest没有导入任何扩展库,所以不存在该目录。用户项目代码,向导默认会生成两个文件,一个是和项目同名的CPP文件,另外一个则是和项目同名的.h头文件。图4-3SMeshStudio初始Arduino项目4.2节点部署模型设计本论文实验所选的监测环境区域是星天苑E座单号区501宿舍,宿舍长约4.8m,宽约4.3m;两侧各有两张床位(上面床铺下面课桌)和上床的楼梯,楼梯在床位中间;每张床位长约2.05m,宽约1.0m,楼梯长约1.0m,宽约0.5m。根据第三章实地测量结果得知,当节点间距大于2.1m时,信号强度不再随距离的增加而变化,所以在部署节点时应当考虑2.1m这个临界值。另外宿舍环境基本上是对称的,则采用均匀部署参考节点。22413走廊楼梯楼梯阳台2.3m4.8mxy0ABCDE图4-4监测区域参考节点部署如图4-4所示,监测的环境区域比较狭小,能部署节点的区域长约4.8m,宽约2.3m。在x轴方向上,靠近床位两边各按间距1.0m均匀部署5个参考节点,如节点A与B之间相距1.0m。中间也按1.0m间距部署4个参考节点,如节点D与E之间相距1.0m。在y轴方向,节点A,C之间的距离约为1.3m。节点D在以节点A,B和C组成的直角三角形的斜边中点上,节点A,D之间的距离约为1.64m。其他的节点均按以上方案部署。当参考节点与未知节点之间的距离较大时,接收信号强度会受到各种因素的干扰而使衰减增大,如墙体及各种物体的吸附和发射,导致误差增大,降低定位精度。按照以上方案在监测环境部署的参考节点较为密集,相邻节点之间的距离也基本上在1.0m~1.64m之间,这个距离均在2.0m之内,接收信号强度受环境因素的影响较小,测量数据误差小,定位精度较高。4.3程序设计4.3.1节点逻辑设计[2,19]根据以上的双边定位算法原理,要在室内环境实现无线传感器网络的定位,需要布置至少三个参考节点,未知节点则随机摆放,并通过USB接口连接终端电脑。简单的节点定位逻辑图4-5所示。节点后面的编号表示节点的IEEE802.15.4短地址,每个节点有唯一的地址标示。在定位中,获取多个节点RSSI的具体方法是:参考节点定时发送广播数据包,未知节点收到周期内多个不同参考节点的RSSI数据后开始计算,并结合参考节点的原始位置信息实现定位,随后将计算结果通发送给终端电脑。参考节点1参考节点3参考节点2未知节点0终端电脑显示图4-5节点定位逻辑图由于不同类型的节点所实现的功能不一样,所以需要编写两种程序。其中三个参考节点的程序除了节点序号不同外,其他的部分完全相同。参考节点与未知节点程序要实现的功能具体要求如下:参考节点:发出的数据包里面必须包含有自身的位置信息,并指明自身ID(也即是自身的节点序号);未知节点:首先需要接收不同参考节点的ID信息和位置信息,并在接收不同参考节点数据包的同时,获取不同参考节点对未知节点的RSSI值;接着,将接收到的RSSI值进行预处理,并映射成不同参考节点与未知节点之间的距离d;然后利用基于RSSI三边定位算法的简化算法(双边定位算法)对自身进行定位计算;最后将计算结果通过USB接口传送到终端电脑上,并利用串口进行监控观察。在整个定位过程中,参考节点只负责发送数据包,未知节点则需要完成较大难度的任务。未知节点除了要接收数据包外,同时还要进行关键的定位计算。在节点供能有限的情况下,这样较大规模程序在只有16KB存储中编写还是有些难度的。为了保证节点定位精度,就更要求定位算法简单易运行,且占用内存小,使得节点在短时间内计算出结果,以免节点移动造成实时性定位精度误差。4.3.2Arduino程序体系结构及程序语言基础[2,20]Arduino程序工作原理:所有的Arduino程序都是从Arduino核心库函数自带的main函数启动,它首先会执行一些系统的初始化工作,然后再调用用户的setup函数完成用户特定的初始化工作,接着使用一个死循环不断调用用户的loop函数完成用户的持续性工作,在循环的过程中如果发生串口事件则还会调用用户的串口处理函数。所以,对于用户而言,如果是一次性的初始化工作,就把它放在setup函数中完成,而对于那些重复性工作,则把它放在loop函数中完成,这两个函数的名称是固定的,不能更改。main程序如下:#include<Arduino.h>intmain(void){init();#ifdefined(USBCON)USBDevice.attach();#endifsetup();for(;;){loop();if(serialEventRun)serialEventRun();}return0;}Arduino程序采用C++进行编写,并在此基础上添加了一些自定义的函数和常量。只要没有超过内存限制,Arduino可以按照C++语法自由定义变量,它还继承了C++的运算符,包括数学运算法、逻辑运算符和二进制运算符三部分内容。Arduino程序可以使用所有的标准数学函数。对于本论文采用的iDuino节点,因为它没有任何显示设备,需要通过单片机的串口来实现。Arduino提供了大量的串口函数,它使用静态对象SerialX来代表串口,但AVR很多单片机都有多于一个以上的串口,在本文中使用的Serial代表UART0。本文主要用到以下几个串口函数:voidbegin(unsignedlongbaud):初始化串口,并工作在数值为baud的波特率下,如本文使用的代码Serial.begin(38400);则是启动了UART0,并工作在38400的波特率下;voidend():关闭串口,如本文使用的代码Serial.end();关闭了UART0,一旦串口被关闭,串口的其它函数将不会发生作用;print(data):往串口写入数据,可以是数字型的也可以是字符串;println(data):和print(data)基本相同,不过在最后加上了回车换行;write(date):往串口写入一个字节。iDuino自带了一个名为MxRadio的无线通信库,它是Smeshlink公司基于uracoli和zigduinoRadio这两个开源射频库改造的,能同时支持2.4G的802.15.4标准和780M的802.15.4C标准,并具备跨平台能力,用户只需少许改动就可以很方便地应用到其它使用AT86RF2XX射频芯片的平台上。如图4-6所示,即为Smeshlink公司集成Eclipse的SmeshStudio开发平台上的MxRadio无线通信库。在程序编写中必须勾选SmeshStudioArduino扩展库中的Arduino-MxRadio这一项,这样经烧入程序的iDuino节点才能实现无线收发数据。这是在基于iDuino节点的室内定位的软件开发和程序编写的关键步骤图4-6Arduino-MxRadio无线通信库在节点程序中,调用MxRadio库中的函数来实现对Atmega128RFA1射频芯片的控制。本文中主要调用的库函数如下:初始化MxRadio库voidbegin(channel_tchan,uint16_tpanid,uint16_tlocaladdress,boolneedack,boolautotxval,boolautorxval);chan表示通讯频段,iDuinoRf212取值范围是0-3,iDuinoRfa1取值范围是11-26;panid表示个人区域网编号,如果是广播发送,可以设定为0xFFFF;localaddress表示本地地址编号;needack表示是否要求接收方应答,如果要求应答但却没有受到应答包,则发送方会再次发送4次;autorxval表示是否为自动发送模式,如果是,则会自动进行冲突检测并重发;autorxval表示是否为自动接收模式,如果是,则会自动过滤掉不属于自己得数据包。设置回调函数voidattachReceiveFrame(uint8_t*(*funct)(uint8_t,uint8_t*,uint8_t,int8_t,uint8_t));attachReceiveFrame用于设定接收数据的处理,其参数分别是数据包程度,数据包内容,数据链路质量指示LQI值,接收时的能量值ED,RSSI,CRC判错。发送数据包发送数据有一般模式和精简模式两种,本文采用一般模式。不管在何种模式下,都是以数据包为最小传输单位。在一般模式下,发送数据需要三步:(1)开始发送voidbeginTransmission(uint16_tdestaddress);写入数据前,用户必须调用beginTransmission方法,传入参数表示目标地址,如果没有参数,则表示发送广播数据。(2)写入要发送的数据voidwrite(uint8_t*arr,uint8_tlen);在一个数据包内,用户可以写入多种数据,但802.15.4/c标准规定一个数据包的最大长度为128,再加上包头9个字节和包尾2个字节的数据,实际的有效数据最大为116个字节。(3)结束发送voidendTransmission();用户可以调用endTransmission真正结束发送数据。接收数据包iDuino采用非缓冲方式数据接收,关键步骤如下:(1)定义数据接收处理函数:onReceiveFrame(uint8_tlen,uint8_t*frm,uint8_tlqi,int8_ted,uint_tcrc_fail)(2)设置数据接收处理函数指针到自己定位的函数:MxRadio.attachReceiveFrame(receivehandler)获取接收状态用户在某些情况下还需要了解收发器在接收数据时的某些状态信息,如信号强度(RSSI),链路质量指示(LQI),能量检测(ED)等信息,MxRadio提供的函数如下:int8_tgetRssiNow();获取当前信号强度。int8_tgetLastRssi();获取接收最近一个数据包时的信号强度。uint8_tgetLqi();获取接收最近一个数据包时的链路质量信息。int8_tgetLastEd();获取接收最近一个数据包时的能量检测信息。int8_tgetEdNow();获取当前的能量检测信息。4.3.3节点程序设计下面将分别简要介绍参考节点和未知节点上的应用程序。参考节点参考节点只需以广播方式发送数据包,数据包里包含自身的位置信息,并在程序中显示数据包来源地址。不同的参考节点的程序设计只需设置不同的地址,其他的部分完全相同。关键代码如下:#include"MxRadio.h"uint16_tlocaladdress=1;//设定节点地址uint16_tdestaddress=0xffff;//节点以广播方式发送数据包channel_tcurchannel=11;//节点通信频段voidsetup(){MxRadio.begin(curchannel,0xffff,localaddress,false,false,true);//初始化MxRadio库}voidloop(){MxRadio.beginTransmission(destaddress);//开始广播发送数据包MxRadio.write("helloworldfrom");//在节点上显示数据包来源MxRadio.write(localaddress+'0');MxRadio.write("!");MxRadio.endTransmission();//结束数据包发送delay(2000);}未知节点未知节点接收不同参考节点数据包及RSSI,接着进行滤波、排序、距离映射处理,然后利用基于RSSI三边定位算法的简化算法(双边定位算法)对自身进行定位计算,最后将计算结果转化为字符串通过USB接口传送到终端电脑上,并利用串口进行监控观察。程序流程图如下:接收参考节点的数据包及RSSI接收参考节点的数据包及RSSI基于RSSI三边定位算法的简化算法(双边定位算法)RSSI从大到小排序RSSI到距离d映射RSSI均值滤波处理发送到终端电脑数值到字符串转换开始结束图4-7未知节点程序流程图由于未知节点的程序较为复杂,下面分别从接收不同参考节点数据包及RSSI、RSSI到距离d映射和基于RSSI三边定位算法的简化算法(双边定位算法)这三部分关键程序进行说明。接收不同参考节点数据包及RSSI#include"MxRadio.h"uint16_tlocaladdress=0;channel_tcurchannel=11;voidsetup(){MxRadio.begin(curchannel,0xffff,localaddress,false,false,true);Serial.begin(38400);}voidloop(){if(MxRadio.available()){Serial.println();Serial.print("Rx:");//显示发送数据包的源地址while(MxRadio.available())Serial.write(MxRadio.read());Serial.println();Serial.print("LQI:");//显示接收数据包内容Serial.print(MxRadio.getLqi(),10);Serial.print(",RSSI:");//显示该接收节点的源地址节点的接收信号强度RSSISerial.print(MxRadio.getLastRssi(),10);Serial.print("dBm,ED:");//显示能量EDSerial.print(MxRadio.getLastEd(),10);Serial.println("dBm");}}未知节点接收来自不同参考节点的数据包及RSSI的监控结果如图4-8所示:图4-8未知节点串口监控结果——接收不同节点数据包及RSSI上图中,“Rx:helloworldfrom1!”表示接收到地址为1的参考节点发送的数据包;“LQI:255,RSSI:-82dBm,ED:-76dBm”表示参考节点发送的数据包内容,包括数据链路指数LQI,接收信号强度RSSI和能量ED。RSSI到距离d的映射关键代码如下所示:#include"MxRadio.h"uint16_tlocaladdress=0;channel_tcurchannel=11;beaconrssival[10];beaconrssival3[TRI_BEACON];inti;intsflag=0;intrssivalindex=0;uint8_t*receivehandler(uint8_tlen,uint8_t*frm,uint8_tlqi,int8_ted,uint8_tcrc_fail){uint16_tsrcaddress=(uint16_t)frm[8]*256+frm[7];Serial.print("Src:");Serial.print(srcaddress);Serial.println();Serial.print("RSSI:");intlastrssi=MxRadio.getLastRssi();Serial.print(lastrssi);Serial.print("dBm");Serial.println();rssival[rssivalindex].nodeid=srcaddress;rssival[rssivalindex].RSSI=lastrssi;rssival[rssivalindex].d=RSSI_to_distance(rssival[rssivalindex].RSSI);Serial.println("d=");Serial.print(rssival[rssivalindex].d,DEC);Serial.println();Serial.println("RSSI_to_distancehasbeenexecuted!");floatRSSI_to_distance(floatRSSI){floatd=0.0;floatn=3.77;//信号衰减因子,需要调整floatA=82;//距离1m时的接收信号强度,需要实验测知d=pow(10,-(RSSI+A)/(10*n));return(d);}未知节点与不同参考节点之间RSSI到距离之间的映射监控结果如图4-9所示:图4-9未知节点串口监控结果——RSSI到距离d的映射上图中,“Src:1”表示接收到地址为1的参考节点;“RSSI:-58dBm”表示接收信号强度;“d=0.2308847188”表示该参考节点与未知节点之间RSSI到距离d的映射结果;“RSSI_to_distancehasbeenexecuted!”表示此映射结果的完成。基于RSSI三边定位算法的简化算法(双边定位算法)关键代码如下:voidcalculate(beaconbc3[TRI_BEACON],float*eX,float*eY){floata=0,c=0,xi,yi,xj,yj,x,y,d,di,dj,sx1,sx2,sy1,sy2,t1,t2,fx,fy;xi=bc3[0].x;xj=bc3[1].x;yi=bc3[0].y;yj=bc3[1].y;di=bc3[0].d;dj=bc3[1].d;t1=0;t2=0;x=bc3[2].x;y=bc3[2].y;d=bc3[2].d;if(yi==yj){sx1=((pow(di,2)-pow(dj,2))-(pow(xi,2)-pow(xj,2)))/(2*(xj-xi));sx2=sx1;sy1=yi-sqrt(pow(di,2)-pow((xi-sx1),2));sy2=yi+sqrt(pow(di,2)-pow((xi-sx1),2));}else{a=0.5*(pow(xi,2)-pow(xj,2)+pow(yi,2)-pow(yj,2)-pow(di,2)+pow(dj,2))/(yi-yj);c=-1*(xi-xj)/(yi-yj);sx1=(c*yi+xi-a*c+sqrt(2*(c*xi+a)*yi-pow(yi,2)-pow(c,2)*pow(xi,2)-2*a*c*xi-pow(a,2)+(1+pow(c,2))*pow(di,2)))/(1+pow(c,2));sy1=a+c*sx1;sx2=(c*yi+xi-a*c-sqrt(2*(c*xi+a)*yi-pow(yi,2)-pow(c,2)*pow(xi,2)-2*a*c*xi-pow(a,2)+(1+pow(c,2))*pow(di,2)))/(1+pow(c,2));sy2=a+c*sx2;}t1=sqrt(pow((sx1-x),2)+pow((sy1-y),2));t2=sqrt(pow((sx2-x),2)+pow((sy1-y),2));if(abs(t1-d)<abs(t2-d)){fx=sx1;fy=sy1;}else{fx=sx2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论