首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

无线传感器网络用于监测系统中的定位算法

无线传感器网络用于监测系统中的定位算法

摘要:从硬件设计入手,介绍了自主设计的以片上系统(SOC)STM32W108为核心的WSN节点,在此基础上采用了一种基于RSSI的加权质心定位算法实现了节点的自定位。该算法将RSSI测距和质心定位算法相结合,用测得的RSSI值作为质心定位的加权因子,合理体现了不同锚节点对定位未知节点的约束力。通过测试证明,该定位方法在较少的通信开销情况下具有较高的定位精度,且易于实现。
关键词:无线传感器网络;接收信号强度指示;节点定位;加权质心定位

    无线传感器网络主要用于监测系统,大多数情况下,监测到的数据必须结合实际的位置信息才有价值,这些位置信息主要包括事件发生的位置和WSN节点的位置,节点的位置是定位事件发生位置的基础。获取节点位置信息最直接的方法是采用人工部署或GPS定位,但是对于大规模的无线传感器网络,由于成本的制约和应用条件的限制,以上两种方法实现起来都不理想。因此有必要采取相应的定位算法措施来解决目前大多数应用场合对位置信息的需求。
    依据是否需要通过测量节点的距离信息把定位方法分为两类:基于测距(rang—based)和不基于测距(rang—free)。前者是利用测量得到的距离或角度信息来进行位置计算,主要有TOA、TDOA、AOA和RSSI;后者是利用节点的连通性和多跳路由信息交换等方法来估计节点间的距离或角度,并完成位置估计,主要有DV—Hop、质心算法等。两类定位算法各有优点,相比之下,基于距离的定位算法测量精度较高但是需要额外的硬件,不基于距离的定位算法对硬件要求较低但是定位误差较大。本设计在自主设计的节点硬件基础上,采用了将RSSI测距和质心定位方法结合起来,实现了节点的自定位,避免了使用单一定位方法的不足,提高了定位精度。

1 WSN节点硬件设计
1.1 节点设计方案的确定
    WSN节点设汁有两种方式:一种是NCP(network eoprocessor)——核心处理器和Zigbee网络处理器分开,另一种是SOC(system on chip) ——使用包含无线射频功能的核心处理器。传统的设计大部分采用了NCP的方式,这种方式的优势在于应用程序和Zigbee协议间可以分开设计,核心处理器的选择很灵活,可以是8位的单片机,也可以是运行嵌入式操作系统的高级ARM,但是由于需要两个处理器,就意味着增加了成本,且增加了节点的功耗,对于电池供电的无线传感器网络来说,增大了功耗就使得整的网络的寿命减少。而SOC的方式,大大减小了功耗和成本,且随着芯片工艺的进步,SOC内部的资源已经不再是限制其使用的瓶颈。故本设计采用了SOC的方式,选用了意法半导体最新推出的射频SOC—STM32W108。
1.2 STM32W108简介
   
STM32W108是意法半导体推出的一款WSN专SOC。该芯片采用32位ARM Cortex—M3内核,具有较强的处理能力,内部集成了符合IEEE80 2.15.4标准的2.4 GHz射频收发器,且芯片内部带有功率放大器,最大输出功率可达7 dB,芯片内部同化了Zigbee 2007 Pro协议栈,用户根据ST官网提供的API函数就可实现Zigbee网络节点间数据的收发。
1.3 节点硬件设计
   
实际设计中,选用了由上海沁科公司基于STM32W108生产的Zigbee模块——EMZ3018A,该模块采用了类似邮票孔的焊盘,可以很方便的焊接在PCB板上。围绕着该模块实现了外围电路的设计,主要包括:电源模块、SD卡存储模块、蓝牙模块、接口扩展模块,下面分别进行详细介绍:
    (1)电源模块
    由于STM32W108的工作电压要求是2.1~3.6 V,而SD卡和蓝牙模块要求是33 V供电,故选择了3.3 V输出的低压差线性稳压芯片SP620 1-3.3,它的输出电流能达到200 mA,满足节点正常工作的需要,而且仅需要300 mV的压差,3.6 V的锂电池即可满足要求。电源电路如图1所示。


    (2)存储模块
    考虑到节点在后期的实际监测中需要存储大量的数据,一般的存储芯片容量较小且价格较高,故本设计选用了大容量的存储设备SD卡,而且SD卡支持FAT32文件系统,存储的数据可以直接在PC上渎取,实际应用中方便人工现场取数。同时SD卡支持SPI接口,操作方便。电路如图2所示。


    (3)蓝牙模块
    蓝牙模块只在中心节点上安装,主要是为网关与中心节点通信服务的。本设计选用的是BMX蓝牙模块,其操作很方便,通过串口和STM32 W108连接,网关通过蓝牙配对成功后即可实现和中心节点的数据透传。蓝牙模块电路如图3所示。


    (4)接口扩展模块
    考虑到节点的体积和实际应用中的不同需求因而选用不同的传感器,故将I2C接口、SPI接口、和STM32W108的内部12位AD的6路接口引出来,做成插针封装。使用时,在PCB上焊接双排插针母座,然后根据需要单独做出传感器板插接到节点上,即可实现大部分传感器的采集。2 基于RSSI测距的加权质心定位原理

在无线传感器网络中,根据节点的位置是否己知,将节点分为未知节点和信标节点。未知节点表示节点在无线传感器网络的位置需要定位,而信标节点也称为锚节点,表示其位置已经确定。信标节点是通过人工事先放置好或者在节点上增加GPS模块得到自身位置。信标节点是未知节点定位时的参考点,但是由于功耗和成本的限制,信标节点不能太多。
2.1 RSSI测距原理
    RSSI (received signal strength indicator)测距原理:利用节点接收信号强度与节点距离成反比的关系,通过测量接收到的信号强度和已知的信道衰落模型,估算出节点之间的距离。无线信号的发射功率和接收功率之间的关系可以用式(1)表示


    PR是无线信号的接收功率,PT是无线信号的发送功率,d是收发单元之间的距离,n是传播因子,数值大小取决于无线信号传播的环境。给上式两边取对数得
    10lgPR=10lgPT-10n·lgd     (2)
    当距离d=1 m时,PR=Pr,令10 lg RT=10 lg R=A,即是距离发射节点1 m远处的信号接收强度,将(2)式化简为
    PR(dBm)=A-10*nlgd       (3)
    可以看出常数A和n决定了接收信号强度和传输距离的关系。A值为无线收发节点相距1 m时接收节点接收到的无线信号强度值,n值是无线信号的传播因子,这两个值都是经验值,和具体使用的硬件节点和无线信号传播的环境密切相关,所以测距前必须在应用环境中把两个经验值标定好,然后根据(3)式就可以求出距离d。
2.2 质心定位原理
   
质心定位的原理是:未知节点以所有在其通信范围内锚节点组成的几何形状的质心作为自己的估计位置。质心坐标就是多边形各顶点坐标的平均值。
    具体实现过程为:锚节点周期性的向邻居节点广播一个信标信号,信号中包含有锚节点自身的ID和位置信息,未知节点接收到信标信号以后将其存储起来。当未知节点在一段侦听时间内接收到来自某个锚节点的信标信号数量超过预设的门限后,就认为该锚节点与自身连通,最终该未知节点将自身位置确定为所有与之连通的锚节点所组成的多边形的质心。假设网络中的n个固定锚节点坐标为(Xi,Yi),其中1≤i ≤n,未知节点M的估测位置坐标为(Xm,Ym),那么质心定位计算未知节点的坐标公式如下:


2.3 基于RSSI的加权质心定位
   
传统的质心定位算法忽略了不同距离的锚节点对质心定位精度的影响,针对传统质心定位算法的缺陷,将RSSI信息引入可以起到辅助信息的作用。其基本思想是:在确定了未知节点所在的多边形以后,首先根据未知节点和锚节点通信时获取到的RSSI值计算出未知节点和各个锚节点之间的距离d,然后以wi=1/di作为加权质心定位算法中的权值,计算未知节点的坐标。
    假设网络中的n个同定锚节点坐标为(Xi,Yi),其中1≤i≤n,未知节点M的估测位置坐标为(Xm,Ym),那么加权质心计算公式5如下:


    这样选择加权因子能够体现出与未知节点距离不同的锚节点对未知节点定位的决定权的大小,其约束力符合加权质心算法的要求。

3 节点定位的实现
3.1 定位系统的工作原理
   
节点的定位计算主要是在网关上完成的。本定位系统中采用了Android平板电脑做网关,网关通过监牙通信和中心节点上的蓝牙模块建立连接,蓝牙配对成功后,中心节点将未知节点上传的与之通信锚节点的RSSI值和对应锚节点ID信息通过蓝牙模块无线透传给网关,在网关上进行计算。定位系统原理如图4所示。


3.2 定位实现的步骤
   
(1) RSSI值的获取
    在成功组建Zigbee网络后,锚节点周期性的向周同广播一个包含自身ID的信标信号,在通信范围内的未知节点接收到信标信号以后,通过调用API函数获取与自己通信锚节点的RSSI值和对应的锚节点ID号,使用的API函数主要包括:emberIneoming MessageHandler主要是处理节点接收到的信息,在这个函数里面再调用API函数emberGetSender,获取发送节点编号(node ID):调用API函数emberGetLastHopRssi,获取目前接收信息的信号强度;调用API函数emberSendUnicast将接收到的数据发送给中心节点,最终在中心节点调用API函数emberSerialPri ntf将数据通过串口发送给网关。获取RSSI值的部分代码如下:
   
   
返回列表