引言
CC2431是TI公司推出的带硬件定位引擎的片上系统(SoC)解决方案,能满足低功耗ZigBee/IEEE 802.15.4无线传感器网络的应用需要。CC2431定位引擎基于RSSI(Received Signal Strength Indicator,接收信号强度指示)技术,根据接收信号强度与已知参考节点位置准确计算出有关节点位置,然后将位置信息发送给接收端。相比于集中型定位系统,RSSI功能降低了网络流量与通信延迟,在典型应用中可实现3~5 m定位精度和0.25 m的分辨率。本文在简述基于RSSI定位技术的基础上,详细介绍CC2431无线定位引擎的功能、特点及使用方法,并且针对CC2431无线定位引擎定位范围小和只能进行二维定位的不足之处给出了改进方法。
1RSSI定位技术
RSSI是指节点接收到的无线信号强度大小。在基于接收信号强度指示RSSI的定位中,已知发射节点的发射信号强度,接收节点根据接收到信号的强度计算出信号的传播损耗,利用理论和经验模型将传输损耗转化为距离,再利用已有的算法计算出节点的位置。该技术硬件要求较低、算法相对简单,在实验室环境中表现出良好特性;但由于环境因素变化的原因,在实际应用中往往还需要进行改进。
2CC2431无线定位引擎
CC2431无线定位引擎基于RSSI技术,定位系统由参考节点和盲节点组成。参考节点是一个位于已知位置的静态节点,这个节点知道自己的位置并可以将其位置通过发送数据包通知其他节点。盲节点从参考节点处接收数据包信号,获得参考节点位置坐标及相应的RSSI值并将其送入定位引擎,然后可以读出由定位引擎计算得到的自身位置。由参考节点发送给盲节点的数据包至少包含参考节点的坐标参数水平位置X和竖直位置Y,而RSSI值可由接收节点计算获得。
2.1定位引擎
定位引擎的使用非常简单,只要将所需参数写入定位引擎,等待定位引擎计算完毕就可以直接读出计算结果。所需参数如表1所列。
表1定位引擎输入参数
2.2RSSI参数
当CC2431接收到一个数据包后会自动将RSSI值添加到该数据包中。RSSI值为数据包接收在开始的8个周期中的平均值,用1个字节表示。当一个数据包从CC2431的FIFO中读出时,倒数第二个字节包含RSSI值,这个值在接收到实际数据包的8个符号后测量得到,也可在数据包接收的同时获得。此时RSSI将反映当时接收信号的强度,而不一定是接收到的数据的信号强度,从而增加了大量节点同时使用信道时RSSI值出错的可能性。
CC2431包含一个RSSI寄存器,此寄存器保留与上述相同的值,但它并不锁定,因此寄存器值不能用于进一步的计算。只有与接收到的数据相关的被锁定的RSSI值才能认为是接收数据时获得的正确RSSI测量值。
RSSI的理论值可以由式(1)表示:
其中,射频参数A和n用于描述网络操作环境。在全向模式下,射频参数A被定义为用dBm表示的距发射端1 m处接收到的信号强度绝对值。如信号强度为-40 dBm,那么参数A被定为40。定位引擎的期望参数A为30.0~50.0,精度为0.5。参数A用无符号定点数值给出,最低位为小数位,而其余各位为整数位。A的一个典型值为40.0。
射频参数n被定义为路径损失指数,它指出了信号能量随着到收发器距离的增加而衰减的速率。衰减与d-n成比例,这里d是发射器和接收器之间的距离。实际写入定位引擎的参数n是一个通过查表得到的整数索引值n_index,如表2所列。
表2参数n查询表
例如,通过测量得到n=2.98,查表得到最接近的有效值为3.00,相应的索引值是13。因此,整数13作为参数n写入定位引擎中。参数n以[0,31]之间的整数索引写入定位引擎,索引用整数表示。如n=7写入为000000111,n的典型值是13。
2.3参考节点数量
一般来说参考节点越多越好,要得到一个可靠的定位坐标至少需要3个参考节点。如果参考节点太少,节点间影响会很大。一个错误的RSSI值能明显改变所得的位置坐标,错误的RSSI值在此即为不适合理论值的RSSI值,可能由于多路信号或信号被墙壁阻挡等造成。另外,如果盲节点位于参考节点网格外部,很可能结果与实际使用位置差别很大,因此不应该跟踪位于网格之外的目标。
2.4定位算法
首先,定位操作应该使用“最优”参考节点,即使用具有最高RSSI值的8个参考节点。其他节点都应放弃。如果得不到8个节点,则应该使用尽可能多的节点。
可用于软件操作的算法很多,例如在图1所示的区域中,在X、Y方向上每隔30 m放置一个参考节点,图中白色节点为盲节点,其他节点为参考节点。第1步,确定具有最高RSSI值的一个节点并计算一个补偿值,使之“移动”到64 m×64 m范围的中心。由于已知来自此节点的RSSI值,所以到此节点的距离很容易得到。第2步,确定除“最强”节点之外的其他使用节点,即图中黑色节点。所有节点用第1步中的补偿值进行修正。第3步,所有获得值送入定位引擎最终读出结果位置。最后一步,将补偿值添加到计算位置中。完成这些计算之后,盲节点在全局网格中的位置就确定了。
图1定位算法示意图
2.5软件操作
在定位引擎运行之前,必须使能定位引擎寄存器LOCENG的第4位LOCENG.EN。当要停止定位引擎运行时,应往LOCENG.EN写入0关断引擎的时钟信号,从而降低CC2431的功耗。对定位引擎的操作,主要就是对与定位引擎有关的寄存器的操作。
定位引擎运行时需要输入3~8个参考坐标。参考坐标是以m为单位的,它表示各个参考节点的位置,其数值位于0~63.75,最高精度为0.25 m,以最低2位为小数部分,剩余6位为整数部分。参考坐标存放于RF寄存器REFCOORD中。在写入REFCOORD之前,寄存器LOCENG的第1位LOCENG.REFLD必须写入1,用于指示一组参考坐标将要被写入。一旦坐标写入过程开始(LOCENG.REFLD=1),8对坐标必须一次性写入。当定位引擎使用少于8个参考坐标时,要将未用的参考坐标写入0.0。
RSSI值在[-40 dBm,-95 dBm]之间,精度为0.5 dBm,写入值中应去掉负号。如RSSI的值为-50.35 dB,写入到定位引擎为50.5。注意,未用的参考坐标必须用0.0作为RSSI值写入。如果仅有部分参数写入,定位引擎将不能正确工作。
所有的测量参数应写入RF寄存器MEASPARM中。在写入MEASPARM之前,寄存器LOCENG的第2位LOCENG.PARLD必须写入1,表示一组测量参数将被写入。一旦参数写入开始(LOCENG.PARLD=1),所有10个参数必须一次性全部写入。测量参数必须按照[A,n,rssi0,rssi1,…,rssi7]顺序写入MEASPARM寄存器,任何未使用的位必须写0。10个参数全部写完之后,LOCENG.PARLD必须写入0。
参数坐标和测量参数写入之后,通过把寄存器LOCENG第0位LOCENG.RUN写入1启动定位估计计算。通常,LOCENG.RUN被置1后的1 200个系统周期之后,LOCENG的第3位LOCENG.DONE被置1。此时,估计坐标可从LOCX和LOCY寄存器读出。定位引擎不产生任何中断请求。在新的结果被计算出来或下一次重新启动之前,估计坐标值在LOCX和LOCY中保持有效。
下面给出一个简单的定位引擎操作函数:
void CalculatePostition(LOC_REF_NODE refNodes[LOC_ENGINE_NODE_CAPA], uint a_val, uint n_index, uint *locX,uint *locY) {
uint i;//启动定位引擎
LOC_DISABLE();
LOC_ENABLE();//使能LOC_REFERENCE_LOAD,准备写入参考坐标
LOC_REFERENCE_LOAD(TRUE);//写入参考坐标
for(i=0;i<LOC_ENGINE_NODE_CAPACITY;i++) {
REFCOORD=refNodes[i].x;
RERCOORD=refNodes[i].y;
}//参考坐标写入完成
LOC_REFERENCE_LOAD(FALSE);//使能LOC_PARAMETER_LOAD,准备写入测量参数
LOC_PARAMETER_LOAD(TRUE);
MEASPARM=a_val;
MEASPARM=n_index;
for(i=0;i<LOC_ENGINE_NODE_CAPACITY;i++) {
MEASPARM=refNodes[i].rssi;
}//测量参数写入完成
LOC_PARAMETER_LOAD(FALSE);//启动定位估计计算
LOC_RUN();//等待完成后读出坐标值
while(!LOC_DONE());
*locX=LOCX;
*locY=LOCY;//关闭定位引擎
LOC_DISABLE();
}
定位引擎操作流程如图2所示。
图2定位引擎操作流程
3存在问题及改进
CC2431的无线定位引擎在应用中存在两个问题。首先,定位引擎可以处理最高达64 m的X、Y值,对实际应用来说这个区域太小,因此扩展区域非常必要。这可以通过简单的软件预处理算法得到,例如每个节点用2个字节的X、Y代表。因为精度为0.25 m,从而最大范围为16 384 m(214=16 384)。其次,定位引擎得到的只是二维坐标,如何区分不同的水平面,就只能通过软件方法处理。例如,可以首先确定最近的参考节点并读出此节点的水平值。这个水平值被假定为盲节点所在的层,之后盲节点要保证只有同层节点被输入到定位引擎当中。水平层用一个字节Z来表示,则可以区分256个不同的层。
结语
CC2431是一款针对无线传感器网络ZigBee/IEEE 802.15.4的片上系统(SoC)解决方案,其具备的硬件定位引擎具有硬件设备要求低、定位精度高的特点,很好地满足了需求。本文在详细讨论了定位引擎操作原理、使用方法的基础上,给出了可行的应用扩展方法。可以预见,CC2431的无线定位引擎将在无线网络定位方面具有更加优异的表现。