1 CC2430芯片介绍
CC2430芯片具有性能高、功耗低、接收灵敏度高、抗干扰性强、硬件CSMA/CA支持、数字化RSSI/LQI支持、DMA支持等特点,支持无线数据传输率高达250 kbps.
2 TinyOS系统与nesC语言
由于无线传感器网络的特殊性,需要操作系统能够高效地使用传感器节点的有限内存、低功耗处理器、多样传感器、有限的电源,并且能对各种特定应用提供最大的支持。
基于此,UC Berkeley研究人员专为嵌入式无线传感器网络开发出TinyOS系统,目前已经成为无线传感器网络领域事实上的标准平台。 TinyOS系统具有组件化编程、事件驱动模式、轻量级线程技术、主动消息通信技术等特点。TinyOS采用组件架构方式,快速实现各种应用,组件包括网络协议、分布式服务、传感器驱动以及数据获取工具等,一个完整的应用系统通过组合不同的组件来实现。采用事件驱动的运行模型,可以处理高并发性的事件,并实现节能。
TinyOS应用程序通常由顶层配件、核心处理模块和其它组件构成。每个应用程序有且仅有一个顶层配件,组件间通过接口进行连接通信,下层组件提供接口,通过provideinterface interfaceName来声明,上层组件使用接口,通过useinterface interfaceName来声明。接口提供两类函数,分别是命令(command)函数与事件(event)函数,上层组件向下层组件发出命令,启动下层组件的功能:下层组件完成相应的功能后向上层组件报告事件。应用程序总体框架如图1所示。
TinyOS系统本身以及应用程序都是采用nesC语言编写,nesC语言是对C语言的扩展,具有类似于C语言的语法,但支持TinyOS的并发模型,同时具有组件化机制,能够与其他组件连接在一起从而形成一个鲁棒性很好的嵌入式系统。nesC语言把组件化/模块化的编程思想和基于事件驱动的执行模型紧密结合起来。应用nesC语言能够更快速方便地编写基于TinyOS的应用程序。
3 RSSI定位原理
RSSI全称Received Signal Strength Indicator(接收信号强度指示),是一种基于距离的定位算法。RSSI原理是已知发射节点的发射信号强度,接收节点根据接收信号的强度,计算出信号在传播过程中的损耗,利用理论和经验模型将传输损耗转化为距离,再根据接收节点的已知位置利用三边测量法计算出发射节点的位置。由于该方法不需要额外的硬件设备,是一种低功耗廉价的测距技术,因此在很多项目中得到了广泛的应用。
本文在RSSI定位基础上使用质心算法提高定位精度,如图2所示,最后求得的盲节点坐标为点D、E和F组成的三角形的质心。
4 定位算法在TinyOS中的实现
根据RSSI测距原理,要确定盲节点的位置,至少需要三个锚节点(已知位置的接收节点),并需要一个汇聚节点来传输各锚节点的RSSI寄存器值到PC机,最终通过串口调试助手来显示结果并进一步定位盲节点坐标。下面分别介绍移动盲节点、静态锚节点以及汇聚节点的实现流程。
4.1 盲节点
盲节点的主要任务是向所有锚节点广播信息,具体的流程如图3所示。
Tiny OS程序顶层配件主体如下:
4.2 静态锚节点
锚节点主要功能是接收盲节点的广播信息,然后提取RSSI寄存器中的值,通过路由层发送接口转发给汇聚节点,或转发其它锚节点的数据给汇聚节点。主要实现流程如图4所示。
锚节点的组件连接如下:
静态锚节点通过CC2420Packet接口来获取RSSI值,具体函数如下:
rssi=((int)call CC2420Paeket.getRssi(msg));
4.3 汇聚节点
汇聚节点,也称为基站,主要负责接收各锚节点发送的接收表信息,包括锚节点ID、DSN和RSSI,并将这些数据包通过串口转发到PC机。具体流程如图5所示。
汇聚节点组件连接如下:
4.4 程序移植与实验结果
本实验在Cygwin平台下进行编译与移植,编译过程如图6所示。
图6 TinyOS编译流程图
进入Cygwin环境,切换到TinyOS定位程序目录下,输入编译移植命令:
make cc2430em install NID=0x GRP=00
其中NID是节点号,是节点的身份标识,同一网络中的节点号必须惟一;GRP是网络号,同一网络中所有节点的网络号必须一致。
在所有节点的TinyOS移植完毕后,启动所有节点,应用串口调试助手显示汇聚节点发送到PC机的RSSI数据,数据结构如图7所示,其中1~7个字节数据为信息包的包头,8~9两字节为中继锚节点的节点号,10~11两字节为源锚节点的节点号,12~13字节为源锚节点到汇聚节点的跳数,14~15字节为盲节点的节点号,21~22两字节数据为锚节点的RSSI值。
图7 锚节点RSSI值
在确定PC机能够正确接收各锚节点的RSSI值后,还需要选取合适的RSSI测距信号衰减模型,将RSSI值转化为距离。本实验中采用在无线信号传输中应用广泛的对数--常态模型,如式(1)所示:
RSSI=-(10n·lg(d)+A)+45 (1)
其中A为盲节点与锚节点相距1米时RSSI的绝对值,本实验中测得A≈40,n为无线信号传播指数,一般取2~4,经过多次试验取3.0较为合适。将本模型应用在所测得的RSSI中,并对比实际距离得到如表1和图8所示结果:表1中d为RSSI理论模型所得距离,D为实际测量结果。
表1 RSSI值与距离的转换
图8 RSSI测距模型验证
在实验室环境下布置了4个锚节点、1个汇聚节点和1个盲节点,4个锚节点分布在4.8x3.6 m2矩形的4个点,盲节点位于矩形区域内,汇聚节点在矩形区域外。
读取如图7所示的各锚节点RSSI值,在Matlab环境下通过对数--常态传播模型将RSSI值转变为距离,最后通过质心算法对盲节点进行定位,计算出盲节点的坐标。在实验中采用10次测量取平均值来减小定位误差,并计算对比盲节点理论坐标与实际坐标的误差,得到如图9所示的定位结果。
图9 RSSI定位结果
通过定位算法计算出的盲节点坐标为(2.483 1,1.018 5),实际盲节点坐标为(2.4,1.2),误差为0.199 6 m,基本实现了对盲节点的定位。
5 结论
本文在TinyOS操作系统下实现了基于CC2430模块的RSSI定位,分析了盲节点、锚节点和汇聚节点的工作流程,确定了实验室条件下无线传输模型Shadowing模型参数,最后利用Matlab计算出盲节点坐标。定位结果显示,通过定位算法所得的盲节点坐标与实际坐标误差为0.199 6 m,可满足大多数无线传感器网络对节点定位的要求。