码迷,mamicode.com
首页 > 其他好文 > 详细

zigbee定位

时间:2015-07-29 14:02:53      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:zigbee   算法   

定位算法:

1、RSSI转距离的拟合公式

Zigbee信号强度RSSI与距离之间的转换关系:

公式1 : RSSI(d) = - (10nlgd+A)     求出d转换成公式2

公式2 : d=10^((ABS(RSSI)-A)/(10*n))

A=45---49          需根据多次测试得出

n=3.25----4.5        需根据多次测试得出

其中A为1米处的信号强度。由于信号强度与距离的的关系系数A,n直接影响测量的精度,因此需要多次测量不同距离的信号强度,以确定A,n的值,确保测量的精度.

再细讲一下。多次测量1米处的信号强度值的平均值为A。

然后多设定几个距离 d 代入A 求n。  看看n取几个比较准确。

 

2、极大似然估计法(Maximum likelihood estimation)

技术分享

技术分享

技术分享

先每个zigbee节点发送自己的坐标位置到data,然后根据rssi值计算出d

根据d和坐标位置(x,y)得到矩阵:

A = [

{2(x(1)-x(n)),2(y(1)-y(n))},

{2(x(1)-x(n)),2(y(1)-y(n))},

...

{2(x(n-1)-x(n)),2(y(n-1)-y(n))}

]

b = [

x(1)^2-x(n)^2+y(1)^2-y(n)^2+d(n)^2-d(1)^2

...

x(n-1)^2-x(n)^2+y(n-1)^2-y(n)^2+d(n)^2-d(n-1)^2

]

X = [

x

y

]

AX =b;

最终的小车的坐标:X = (A^T * A)^(-1) * A^T * b;

 

 

3、协调器怎样区分不同的zigbee节点的数据?

网络ID,

/*发送的数据包*/

typedef struct ZB_BUF{

float x;//储存zigbee节点x坐标

float y;//储存zigbee节点y坐标

uint16 myNWK[4];//储存本节点的网络地址

}ZB;

uint16 nwk;

nwk = NLME_GetShortAddr();//获取本节点的网络地址

To_string(ZB.myNWK,(uint8 *)&nwk,2);//转化为二进制转换为16进制

Hal_UARTWrite(0,ZB.myNWK,2);//串口发送到协调器

 

MAC地址是全球唯一的。

 

4、osal操作系统轮询原理

Osal轮询查询任务是否是有事件发生,一旦有事件发生,跳出循环,

do{

If(taskEvents[idx])

{break;};

}while(++idx <taskCnt)(idx为任务id)不为0,

记下发生的事件,找到对应的任务处理函数进行处理。

Events = taskEvents[idx];

taskEvents[idx] = 0;

Events = (taskArr[idx])(idx,events);

taskEvents[idx] |= events;

 

利用函数设置一个事件时,发生了什么?例:

osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT))

{...

taskEvents[GenericApp_TaskID] = SEND_DATA_EVENT;

...}

其实质是将SEND_DATA_EVENT事件放到事件循环表中。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

zigbee定位

标签:zigbee   算法   

原文地址:http://blog.csdn.net/bobsweetie/article/details/47126585

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!