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事件放到事件循环表中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值