首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于距离的无线传感器网络(WSN)定位的Java观测器模式

基于距离的无线传感器网络(WSN)定位的Java观测器模式
EN

Stack Overflow用户
提问于 2014-11-30 10:36:45
回答 1查看 273关注 0票数 1

我正在建立一个基于距离的无线传感器网络定位(WSN)仿真。基于距离的无线传感器网络由测量距离的传感器组成.在这个阶段,传感器的技术细节并不重要。

传感器有两种状态:局部性和非局部性。

我需要实现一个观察员模式,原因如下:

传感器具有相邻的,即在其范围内的其他传感器。每当它被本地化时,它就必须向它的邻居广播它的位置。注意,这是一个递归操作。如果它的任何邻居是本地化的,它也会广播它的位置。

一个传感器可以本地化当且仅当它可以确定它的位置使用距离三个本地化邻居。

我有两个问题:

1)我是否应该将Sensor类实现为

代码语言:javascript
复制
public class Sensor extends Observable implements Observer

2)如果是这样,如何模拟boradcast()函数?

到目前为止,我已经尝试过:

代码语言:javascript
复制
void broadcastPosition()
{
    for(Sensor s : neighbors)
        s.neighborLocalized(this);
}

void neighborLocalized(Sensor s)
{
    if(!neighborList.contains(s))
        throw new IllegalArgumentException("This is not a neighbor");
    localizedNeighbors.add(s);
    if(localizeSelf()) \\ returns true if the sensor is able to localize itself
        broadcastPosition();
}

但是,这种方法失败了,因为它进入了一个无限循环。

也许我应该使用wait()notify()

总之,我有一个设计问题,我寻求您的帮助,以解决这个问题。

我在Aspnes等人的论文中给出了算法的截图。2008年

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-30 14:28:21

我能想到两件事:

给你所有的感应器一个身份证,并把它放在博罗阿德广播信息。当您收到消息时,请检查发件人id,如果它是您自己的id,则忽略该消息。

2-在传感器类中保留一个成员,类似bool mAlreadyLocalized。第一次本地化时,将其设置为真并广播。下次收到消息时,检查是否已经在本地化时广播,如果已经广播,则不要再次广播。

代码语言:javascript
复制
if(localizeSelf() && !mAlreadyLocalized) 
        broadcastPosition();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27212307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档