《改进APIT节点定位系统软件软件文档.doc》由会员分享,可在线阅读,更多相关《改进APIT节点定位系统软件软件文档.doc(24页珍藏版)》请在三一办公上搜索。
1、改进APIT节点定位系统软件V1.0软件文档中国矿业大学2011年2月目 录1 运行环境12 改进APIT节点定位算法12.1 APIT原理12.2 APIT步骤12.3 网格扫描法22.4 APIT的改进42.4.1 引入计数器对APIT算法进行改进52.4.2 扩大邻居节点的定义范围52.4.3 迭代思想(unknown-to-anchor)52.5 改进APIT定位算法流程52.6 基于改进APIT算法的重心扫描法73 改进APIT节点定位算法仿真平台83.1 真实事件在仿真中的特殊处理93.1.1 节点的真实坐标与估计坐标93.1.2 分布式算法在单机上的实现93.1.3 节点通信机制
2、103.1.4 接收信号强度的表示103.2 核心数据结构104 软件模块设计124.1 文档模块134.2 显示模块134.3 控制模块144.4 关键算法实现函数:165 软件使用说明185.1“显示模块”操作说明185.2 节点操作185.3 “场景模式”操作195.4 “操作模式选择”操作205.5 “定位步骤”操作206 技术支持221 运行环境硬件环境:Windows XP及后续Windows操作系统上,硬件配置要求Pentium 4以上CPU,512M以上内存,80G以上硬盘。软件环境:Microsoft Visual C+ 6.0。2 改进APIT节点定位算法2.1 APIT原
3、理APIT利用网络中相对较高的节点密度来模拟节点移动,利用无线信号的传播特性来判断是否远离或靠近锚节点,通常在给定方向上,一个节点距离另一个节点越远,接收到的信号就越弱。邻居节点 通过交换各自接收到信号的强度,判断距离某一信标节点 的远近,从而模仿PIT中节点移动。APIT理论:如果M节点不存在同时远离或接近于A,B,C的邻居节点,则判定M位于ABC内部,否则的话,判定M位于ABC外部。2.2 APIT步骤APIT定位具体步骤:收集信息:未知节点收集邻居锚节点的信息,如位置、标识号、接收到的信号强度等等,邻居节点之间交换各自接收到的信标节点的信息;APIT:测试未知节点是否在不同的信标节点组成
4、的三角形内部;计算重叠区域:统计包含未知节点的三角形,计算所有三角形的重叠区域;计算未知节点位置:计算重叠区域的质心位置,作为未知节点的位置。图1是APIT节点定位算法流程图:图1 APIT节点定位算法流程图2.3 网格扫描法网格扫描算法是传统的APIT的定位方法。对于每一个参考节点,根据检测到的锚节点,采取不同的组合三角形,进行定位,判断节点在三角形的内部还是三角形的外部,然后不断重叠节点在三角形内的区域,区域会越来越窄,最后逼近到一个相对很小的区域,再取这个图形的质心作为未知节点的估计位置。图2 网格扫描法原理示意图在图2中,我们把这个侦听区域划分成许多网格,网格阵列代表节点可能存在的最大
5、区域,每个网格的初始值为0。如果判断出节点在三角形内,相应的三角形所在的网格区域的值加1;同样,如果判断出节点在三角形外,相应的三角形所在的网格区域的值减1。网格扫描算法的流程图如图3所示:图3 网格扫描算法流程图2.4 APIT的改进从定位精度角度讲,APIT定位流程又可以分为两大阶段:第一阶段是每个未知节点通过锚节点和未知节点广播消息来收集周围未知节点和锚节点的信息,然后通过APIT测试来建立自己的支持数据集;第二阶段是调用相应的扫描算法来对支持数据集进行扫描,并最终获得待定位节点的估计位置坐标。第一阶段,支持数据集的纯度主要取决于APIT测试算法;第二阶段,最终定位精度与扫描算法和InT
6、oOut错误与OutToIn错误直接相关。为了提高最终的定位精度,我们通过对APIT测试算法或扫描算法寻求相关的改进或是创新来实现。2.4.1 引入计数器对APIT算法进行改进关于APIT定位算法的性能改进主要是从APIT算法的两种错误和节点定位数目的两个方面出发考虑的我们将其命名为改进的APIT定位算法。.对于解决APIT定位算法固有的两种错误:InToOut错误和OutToIn错误,提出了在节点内部设置计数器的方法来尽量降低两种错误产生的概率,具体做法是:在节点内部设置两个计数器CounterA和CounterB,对于一组锚节点组成的三角形,根据邻居节点的信标交换,运用APIT定位思想进行
7、判决,如果根据接收信号强度SS判决未知节点在锚节点组成的这个三角形内部的邻居节点的数目是M,计数器CounterA等于M;如果判决未知节点在锚节点组成的这个三角形外部的邻居节点的数目是N,计数器CounterB等于N;如果MN,则我们认为未知节点在这三个锚节点组成的三角形的内部。然后采用相同的方法穷尽未知节点的所有锚节点组成的三角形区域。2.4.2 扩大邻居节点的定义范围通常APIT算法中所指的邻居节点仅仅是指与待定位节点邻近的普通节点,而不包括与待定位节点邻近的锚节点。这就意味着锚节点只是负责发送自己的位置信息以及ID值,而不需要记录周围通信范围内的锚节点的相关信息。这样,待定位节点只能与周
8、围的其他待定位节点交换信息,即:邻居节点的范围被限定为未知节点。然而,实际上从APIT测试的定义来看,只要锚节点存储了当前要进行测试的三角形区域的三个锚节点的信息,就完全有资格作为待定位节点的邻居节点参与测试。当然,前提是该锚节点并非当前三角形区域的顶点之一。因此,锚节点除了可以作为参考节点提供位置参考以外,还可以作为APIT测试阶段的邻居节点,用以向待定位节点提供其他锚节点的信号强度信息。2.4.3 迭代思想(unknown-to-anchor)为了使未知节点定位数据这个性能参数得到提高,我们引入了迭代的思想来考虑问题,未知节点在通过定位算法获得位置坐标以后,晋升锚节点,向周围邻居节点广播位
9、置信息并记录周围通信范围内的锚节点的相关信息。由于未知节点通过算法定位本省就存在误差,在晋升为锚节点之后可能造成误差的累积。为了不让“滚雪球”现象再重演,使得定位精度可以得到一定的保障,我们设计未知节点晋升为锚节点是只充当一次锚节点的较色,广播一次自身的位置信息,然后退出定位过程,进入休眠状态,来保留剩余能量。2.5 改进APIT定位算法流程改进APIT定位算法流程如图4所示:图4 改进APIT定位算法流程2.6 基于改进APIT算法的重心扫描法三角形重心扫描算法步骤如下:假设M节点从对C个三角形区域中得到了K个有效的三角形区域。则依次求出这K个三角形区域的重心坐标(x,y),(x,y。获得K
10、个重心坐标后,继续从这K个重心坐标中三个点一组组成新的一个三角形区域集合,如果K不能整除3的话,则剩下的1个或2个重心坐标直接保留,进入下一轮循环。这时,集合中三角形的个数为K%3个。再次对得到的K%3个三角形区域重复以上操作。最后,会得到1个或者2个坐标值。如果是1个坐标值的话,则直接将该坐标值作为估计坐标;如果是2个坐标值的话,将这两个坐标值的平均值作为估计坐标。三角形重心扫描算法的流程图如图5所示:图5三角形重心扫描算法流程图3 改进APIT节点定位算法仿真平台AD-Hoc无线传感器网络发展迅速,各种网络方案和协议日趋复杂,网络规模日趋庞大,对网络研究人员而言,掌握网络仿真的重要性不言而
11、喻。无线传感器网络仿真能够在一个可控制的环境里研究其应用,包括操作系统和网络协议栈,能够仿真数量众多的节点,能够观察由不可预测的干扰和噪声引起的难以琢磨的节点间的相互作用,获取节点间详细的细节,从而提高节点投放后的网络成功率,减少投放后的网络维护工作。 目前,无线传感器网络常用仿真工具有NS2、OPNET、OMNET+。为了验证和演示改进APIT定位算法的有效性,本设计用VC开发了一个改进APIT节点定位算法专用仿真平台。它能够运行APIT定位算法并对其进行演示。通过对仿真结果的分析,我们可以验证APIT定位算法的有效性,并在相关的细节寻求改进。平台基于MFC开发,使用了单文档视图结构。3.1
12、 真实事件在仿真中的特殊处理在对网络进行仿真设计的时候,常需要对客观世界中的一些物质和事件进行抽象化处理。例如,点到点的链路通常抽象表示为一个由带宽和延时组成的队列;而成帧(framing)、编码、调制、传输过程中的差错则会用简单的数学模型表示,甚至忽略不计。另一方面,某些客观存在的未知参数却又要在建立仿真模型的过程中事先给定,这就成了一个悖论:如何事先给定将要求解的参数?由于我们仿真的对象是无线传感器网络,而实验平台仅仅是一台计算机。因此,如何将无线传感器网络中的真实事件抽象成计算机语言,成为设计平台时遇到的一大难题。下面将一一说明对这些难题的解决方案。3.1.1 节点的真实坐标与估计坐标无
13、线传感器网络中总共有两类节点,锚节点和未知节点。锚节点的位置已知,而未知节点位置未知。我们定位的目的正是为了确定未知节点的估计坐标。然而,仿真中,如果我们不知道未知节点的坐标值,下面几个工作都无法进行:(1) 如何在显示界面中对未知节点进行显示。(2) 如何计算未知节点接收信号强度值?(3) 如何知道未知节点是否在某锚节点的通信范围内?第一项工作是节点实时显示的前提;第二项工作是APIT算法中进行APIT测试的关键前提;第三项工作是节点广播的前提。如果无法满足这三个前提的话,那么仿真便无法进行。为了解决上述问题,我们引入了节点的真实坐标与估计坐标这两个概念。由于任何一个节点的坐标值都是客观存在
14、的,这个客观存在值,我们称为节点的真实坐标。然而,对于未知节点来说,其客观存在值,在节点未完成定位前,对观察者来说是不可见的。定位的目的正是为了向观察者报告这个客观值的估计值,我们称之为节点的估计坐标。由于锚节点本身坐标已知,不需要进行定位。因此,为了方便处理,我们假设其真实坐标与估计坐标一致。而对于未知节点来说,在定位前,其真实坐标是存在的但是不可见的,其估计坐标值是不可知的。为了方便处理,在本平台中,我们将其初始值设为(0,0)。3.1.2 分布式算法在单机上的实现每个传感器节点都是一个微型化的嵌入式系统,多个节点可以并发的进行操作;而该仿真平台运行于单机上,若要仿真多个节点,只能以轮循的
15、方式让每个节点执行各自的任务,节点间存在同步的问题,虽然可以以每个节点一个线程的方式运行,仍无法从根本上解决问题。对此尚无好的解决方案,我们只能让每个节点作为一个节点类的实例,运行各自的方法,节点实例间通过消息机制来模拟节点间通信。3.1.3 节点通信机制在无线传感器网络中,节点间的通信均是通过广播实现的。然而,在仿真中去实现节点广播机制却并不容易。广播信息的发送与接送在软件中的实现都需要仔细考虑,用恰当的计算机语言去描述并实现。在无线传感器网络中,分布式的节点虽然各自独立,但是,它们所要进行的工作基本上都是一样的。如果对每个节点都创建一个线程,去模拟它们的并行工作状态,在资源有限的单机上并不
16、现实。我们可以考虑设立一个全局的管理者,由其负责对所有的节点进行广播消息,接收消息。在本软件平台中,所有的节点信息均是存在文档类对象的一个CobArray数组中。因此,由文档类对象实例来担当此管理者最为恰当。由于网络中所有节点均需要广播消息,因此,本平台中我们设计由全局管理者去负责激发各节点发送消息。在收发消息时,由于广播消息是面向所有节点的,所以,我们也设计由全局管理者负责每个节点的消息收发工作。我们利用了MFC的消息机制,在消息发送时,由节点调用SendMessage将信息发送给文档类对象(实际上消息是发给显示窗口,然后再在显示窗口中调用文档类对象进行处理)。文档类对象在消息响应函数对该消
17、息进行处理。对广播消息的处理主要是根据发送节点的类型,来更新接收节点的邻居节点以及参考节点的信息。具体原理见节点的数据结构。3.1.4 接收信号强度的表示在进行APIT测试时,待定位节点要与邻居节点通过交换从相同的三个参考节点接收到的信号强度值来作出是否位于三角形外部的判断。那么,如何在仿真平台中去表示节点所接收到的信号强度呢?通过上一章对APIT算法的介绍我们知道,APIT是基于信号强度在传播过程中单调减小的这样一个前提。也就是说,信号强度值与信号传播距离应该成反比。而对于编程者来说,任何一个节点的真实坐标都是已知的,所以,利用两个节点间的真实距离的相关函数去表示接收信号强度是可取的。我们可
18、以采用一个特定值与两点真实距离的商来表示接收节点所接收到的信号强度。本软件中,这个特定值设为20000. 即:对于相距为100的两个节点来说,接收节点所接收到的信号强度值为200.3.2 核心数据结构无线传感器网络的核心是节点。因此,如何用计算机语言描述一个节点的信息是设计本软件平台的一个关键。本软件平台中,节点类只负责储存定位所需的数据信息、定位结果和操作接口。定位算法的具体实现并不作为节点类的成员函数。Class CNode: public CObjectDECLARE_SERIAL(CNode) /串行化存储宏public:CNode();CNode(CPoint real,bool m
19、_IsAnchor,int ID);/重载构造函数virtual CNode();void CNode:AssertValid() const;virtual void Serialize(CArchive& ar);/串行化储存Private: /私有属性值int m_ID;/节点ID号NodeType m_Type;/节点类型CPoint m_Estimate2;/通过两种种不同算法得到的坐标估计值CPoint m_Real;/节点真实坐标int m_Range;/节点通信半径;public: /公有属性值:public:CObArray m_APIT_Area2; /经改进的APIT测试
20、后得到的所在三角形区域集,作为网格扫描和计算的参数Area1用来存储原算法的结果Area2用来存储改进后的结果 int InToOut2;/二维数组用来存储两种不同算法出现InToOut的错误数int OutToIn2;/索引对关系为:0:改进的APIT算法,1:原始APIT算法bool IsOriginaltested;/标识是否已经采用原始APIT算法进行过一轮测试bool IsCumtTested;/标识是否已经采用改进的APIT算法进行过一轮APIT测试CArray m_Ref_Array; /存储参考节点IDCArray m_Neighbor_Array;/存储邻居节点IDpubli
21、c:/访问接口int GetID(void) const;int GetRange(void) const;CPoint GetReal(void) const;CPoint GetEstimate(int index) const;NodeType GetType(void) const;/操作接口/1.普通设置接口void SetType(NodeType type);void SetEstimate(CPoint estimate,int index);void SetRange(int range);void SetReal(CPoint pt);/更改节点真实坐标/2.扩展操作int
22、 Count_Distance(CNode* pNode) ; /计算任意两个ID节点的真实距离(原理见论文)int Count_Strength(CNode* pNode) ; /计算所接收到的信号强度,可设为反比于距离int Count_Distance(CPoint& pt) const;/计算至某定点的距离int GetNeighborArrayIndex(int n_ID); /由ID判断是否已经加入邻居节点,并返回所在索引值,若不在,则返回-1;int GetRefArrayIndex(int n_ID); /由ID判断是否已经加入参考节点,并返回所在索引值,若不在,则返回-1;b
23、ool IsInRefArray(int ID);/判断是否位于参考节点内bool IsInNeighborArray(int ID);/判断是否位于邻居节点内void FlushAPITArea();/更新场景数据时用来清除原测试数据结果bool IsInTriangle(CPoint& pt1,CPoint& pt2,CPoint& pt3);/判断节点真实坐标是否位于指定三角形内,在计算InToOut以及OutToIn时被调用;NodeType是一个枚举类型,定义如下:enum NodeTypeAnchor=0,/锚节点Uncertain,/未定位节点NoValid,/不可定位节点Rou
24、ter/保留值;CAPITAREA类是用来存储节点完成APIT测试后所得到的三角形区域集合,其定义如下:class CAPITAREA: public CObject DECLARE_SERIAL(CAPITAREA)public:CAPITAREA();CAPITAREA(CPoint p1,CPoint p2,CPoint p3);virtual CAPITAREA(); virtual void Serialize(CArchive& ar);CPoint pt1;CPoint pt2;CPoint pt3;CobArray和CArray是MFC提供的动态数组类,前者可以储存从CObje
25、ct类派生的对象指针,支持串行化存储。CArray是普通数组类,仅支持一般类型。详细说明见MSDN。4 软件模块设计仿真平台主要分为三个模块,一个是用来储存场景节点数据的文档模块,其对应单文档视图结构中的文档类;一个是用来控制仿真流程的控制板模块;一个是显示模块,负责实时显示当前场景,并可对算法进行相应的演示。软件的界面效果如图6所示:图6 软件运行界面4.1 文档模块作为对网络中节点的全局管理者,文档模块负责存储网络中所有节点的指针,场景大小,当前活动节点ID,并负责为新创建的节点分配一个唯一ID。为了防止用户重复添加相同节点,文档类模块还要负责判断所要添加的新节点是否已经存在。为了方便用户
26、重复利用特定场景数据进行仿真,文档模块除了负责在程序运行期间维护所有仿真数据以外,还要负责在用户关闭程序时将当前仿真场景数据以文件的形式存存储至硬盘。文档模块存储的对象由程序员指定。本软件中,我们只将场景中的节点ID,真实坐标,通信范围,估计坐标值以及当前添加节点数存储至文件中。文件保存类型为 .api 格式。4.2 显示模块显示模块负责为用户显示当前仿真场景中的节点,坐标等,并允许用户通过鼠标方式动态添加节点。由于可能出现屏幕区域小于场景的情况,而导致用户无法在当前窗口范围外添加节点,我们设定显示模块CAPITView类直接从CScrollView类派生,支持窗口横向及纵向滚动。由于仿真结果
27、与坐标系无关,所以为了便于实现,显示模块采用的逻辑坐标系为WM_TEXT映射方式,即以客户区左上角为原点,向下Y增大,向右X增大。坐标单位为一个像素,与设备坐标系相同。显示模块界面如下图所示:图7 显示模块界面未知节点用黑色圆形区域标记,锚节点用红色圆形区域标记。首次添加的节点的填充区域较其他节点大。当鼠标进入到显示模块上方时,状态栏会实时显示鼠标当前所在的逻辑坐标。上图中的黑色框线是用来标识当前场景区域。用户添加节点时,只需要在想要添加节点的位置用左键单击一下,然后再单击右键,选择弹出菜单中的“添加至锚节点”或“添加至未知节点”便可实现节点的添加。由于可能出现当前视图大小不能够完全显示场景的
28、情况,所以,本软件中设置了两种显示模式:普通模式和完整模式。在普通模式下,可以实现添加节点、拖动节点、动态显示当前鼠标所在逻辑坐标以及绘图显示等功能。但其显示范围受限于当前窗口大小,用户可能无法完整查看场景。在完整模式下,当前视图可以通过压缩显示比例,以将当前仿真场景全部完整显示出来。这样可以方便用户查看当前场景中节点布置情况。需要注意的是,在完整模式下,普通模式下的一切与鼠标有关的功能都被屏蔽。为了方便用户添加节点,本显示模块增加了拖动功能。用户可以将鼠标置于节点上方时,鼠标光标形状会改变。用户如果摁下左键,然后在显示区域拖动鼠标,再至一个新的位置点松开左键,便可以实现将原节点移动到新位置。
29、需要注意的是,当用户移动一个节点时,会导致除未知节点的估计坐标以外的全部数据复位,以开始新的仿真测试。另外,如果鼠标移动的位置超出了当前的场景范围,则程序会锁定当前鼠标至合法的场景区域。4.3 控制模块控制模块主要完成以下三大功能:一是方便用户对定位流程进行控制,进而加深用户对APIT算法的定位流程的了解。二是提供给用户设置当前仿真场景以及仿真模式的选择。三是负责将当前场景中的节点信息归类显示到控制窗口的三个列表框当中。它们分别是:锚节点,待定位节点以及已定位节点。控制模块如图8所示:图8 控制模块界面当用户选中三个列表框中的某个节点时,程序会在控制模块的另一个列表框内显示当前选中节点的节点信
30、息。用户单击节点列表中某条内容时,程序会弹出一个对该节点进行重新设置的对话框,如图9所示:图9 设置对话框界面在该对话框中,可以对选中的节点进行修改节点的真实坐标,通信范围。如果需要的话,还可以删除当前节点。场景大小也可以在此重设。需要注意的是,任何对当前节点的数据的改变都会导致程序将除未知节点的估计坐标以外的全部数据复位,以开始新的仿真测试。为了方便用户操作,该对话框还可以一下同时重设所有锚节点和未知节点的通信范围。这在进行对比仿真时比较方便。为了满足用户不同的要求,本程序设定了两种操作模式供用户选择,一种是单节点操作模式,一种是集体操作模式。用户通过勾选复选框来确定自己的选择。在单节点操作
31、模式下,只有”锚节点广播消息”和”寻找邻居节点”这两项操作是针对场景中所有的节点。”APIT内点测试”以及”APIT区域标记按钮”以及”估计位置”这三个操作都是只针对当前未知节点。在集体操作模式下,除”APIT区域标记”这项操作以外,所有的操作都是针对所有的未知节点。设定这两种模式的出发点在于:有些用户只需要快速获得最后定位结果,对定位流程并不关心。4.4 关键算法实现函数:利用APIT算法实现定位的核心步骤总共有三步:第一步就是通过锚节点以及未知节点广播消息来更新各节点的邻居节点以及参考节点。第二步就是利用各节点的邻居节点以及参考节点信息进行APIT测试,更新每个节点的APITArea数据,
32、即通过APIT测试确定未知节点位于哪些参考节点组成的三角形区域内部。第三步就基于各节点更新后的APITArea数据,采用网络扫描算法来计算出未知节点的APITArea区域集的交集的中心位置,即未知节点的估计坐标值;或者采用自创的三角形中心扫描法(详细说明见),算出未知节点的估计位置。这三步顺序进行,前一步为后一步提供必要的计算数据。下面,我们将以核心步骤为线索,对软件中的一些关键算法实现进行说明。核心步骤第一步,主要通过以下两个函数来完成广播消息的发送。void CControlView:OnAnchorBroadCast()void CControlView:OnNeighborSearch
33、()这两个函数分别是对控制板上的“锚节点广播消息”按钮以及“寻找邻居节点”按钮的响应函数。在这两个响应函数中,均是通过获得文档类对象的指针(即网络节点的全局管理者),然后再利用该文档指针获得所有锚节点和未知节点的指针。LRESULT SendMessage( HWND hWnd, / handle of destination window UINT Msg, / message to send WPARAM wParam, / first message parameter LPARAM lParam / second message parameter);获得各节点指针后,直接调用Send
34、Message()函数,便实现了消息的广播。对于锚节点来说,其第二个参数类型为WM_MSG_Anchor,对于未知节点来说,其第二个参数类型为WM_MSG_Neighbor。第三个参数统一为节点的指针值。WM_MSG_Anchor以及WM_MSG_Neighbor的消息响应函数将分别由显示视图窗口CAPITView截获并作出相应的处理。两个消息响应函数分别为:LRESULT CAPITView:OnMyMsgAnchor(WPARAM wParam, LPARAM lParam)LRESULT CAPITView:OnMyMsgNeighbor(WPARAM wParam, LPARAM lP
35、aram)上文我们有说到,广播消息均发送到了文档类对象。而这里消息却是直接发送到了CAPITView窗口。我们这样处理的原因在于MFC提供的消息机制只允许将窗口消息发送给窗口类对象,而文档类对象并非窗口。所以,不得已,我们只有通过中转的方式,先将消息发送给CAPITView窗口,然后,再在CAPITView的消息响应函数中调用文档类对象来对该消息进行处理,从而间接地实现了将消息发送给文档类对象在OnMyMsgAnchor及OnMyMsgNeighbor函数中,均使用了循环的方式对各节点的邻居节点以及参考节点信息进行了更新。具体处理流程如下(为了说明方便,仅以OnMyMsgAnchor为例进行说
36、明):1.通过GetDocument获得文档类指针,然后再通过该指针获得所存储的所有节点的指针。2.依次对所有节点进行如下判断:A.根据OnOnMyMsgAnchor()传入的wParam参数,判断这个消息是否是自己发出的,如果是的话,则直接退出本轮循环,,否则继续判断。B.通过IsInAnchorArray()判断发出该消息的锚节点ID是否已经在储存本节点的参考节点ID数组中,如果是的话,退出本轮循环,否则继续判断。C.判断发出该消息的锚节点其通信范围是否大于本节点距该锚节点的真实距离。如果小于的话,则意味着该锚节点的广播消息不能到达本节点,直接退出本轮循环。否则,该锚节点的ID号添加至本节
37、点的参考节点数组中去。D.完成对一个节点的参考节点信息更新,跳至A继续判断下一个节点,直至完成对所有节点的参考节点信息的更新工作。对节点的邻居节点的更新工作的具体流程见代码,本文不再赘述。核心步骤第二步,主要通过以下函数完成对节点的APIT测试void CControlView:OnAPITTest()该函数是控制窗口上的APIT内点测试按钮的单击响应函数。该函数并无自己的实现代码,只是负责弹出一个测试算法选择对话框,然后根据用户选择的APIT测试算法,调用相应的测试函数进行测试。本软件集成了两种APIT测试算法,一种是原始APIT、算法,另一种是经过改进的APIT算法。核心步骤第三步,主要通
38、过以下函数完成对节点的位置估算。void CControlView:OnPosEstimate()该函数是对控制窗口类上的”位置估算”按钮的单击响应函数。它负责连续弹出两个对话框,让用户进行选择。首先弹出的是选择进行坐标估计的支持数据对话框。用户可以选择通过APIT原算法测试出的APITArea数据或是选择通过改进后的APIT测试算法测出的APITArea数据。选择好了支持数据后,紧接着就会弹出一个选择扫描算法的对话框。该对话框负责提示用户选择APIT算法的网格扫描算法,还是选择三角形重心扫描算法。5 软件使用说明5.1“显示模块”操作说明将光标移至显示模块界面,单击鼠标右键,出现如图10所示
39、,显示“添加至锚节点”、“添加至未知节点”和“切换到完整视图”,可分别完成添加红色的锚节点、黑色的添加未知节点和切换到完整视图三种功能,当切换到完整视图时,显示模块呈现全屏;当再次单击鼠标右键时,出现如图11所示,可以将显示模块恢复至普通视图。图10 普通视图下右键图图11 完整视图下右键图5.2 节点操作当双击显示模块上某个节点时,出现如图12所示场景,能够显示该节点ID,真实坐标和通信范围,锚节点的通信范围,未知节点的通信范围,场景大小等信息。在此模块中可以改变锚节点的通信范围、未知节点的通信范围和场景大小,通过单击“确定”或“取消”完成。当单击“删除本节点”时,出现如图13所示场景,通过
40、单击“确定”实现删除该节点。图12 设置对话框图13 删除节点操作5.3 “场景模式”操作在控制模块中有如图14所示的“配置场景模式”,该系统预设为长、宽各为500,可通过输入数值,单击确认改变场景大小,但是只能比原来的预设值大。当输入比预设值小时(如400),会出现如图15所示警告。图14 配置场景模式图图15 非法操作警告5.4 “操作模式选择”操作在控制模块中有如图16所示的“操作模式选择”,可单击“集体操作模式”右侧的选择框,实现集体节点定位,再次单击该选择框时,取消集体节点定位,实现单个节点定位过程。图16 操作模式选择图5.5 “定位步骤”操作在控制模块中有如图17所示的“定位步骤
41、”。单击“锚节点广播消息”,出现如图18所示提醒;单击“寻找邻居节点”,出现如图19所示提醒;单击“与邻居节点交换信息”实现信息交换功能;单击“APIT内点测试”,出现如图20所示测试算法选择,选择用户需要的测试算法,单击“确定”,出现如图21所示的提醒;单击图21中所示的“确定”出现如图22所示的提醒;当已经执行过一次APIT内点测试后,再次点击“APIT内点测试”,出现如图23所示的提醒。图17 定位步骤示意图图18 锚节点广播消息发送结束图19 未知节点广播消息发送结束图20 测试算法选择图21 开始进行APIT测试提醒图22 APIT测试结束提醒图23 Already tested 提醒当单击图17所示“定位步骤”中的“区域标记”时,必须事先选择一个未知节点,显示模块出现如图24所示场景。图24区域标记演示图当单击图17所示“定位步骤”中的“计算估计位置”时,出现如图20所示的“测试算法选择”,选择用户所需要的算法,单击“确定”,出现如图25所示的“扫描算法选择图”,然后选择用户需要的扫描算法,单击“确定”。图25 扫描算法选择图单击图17所示“定位步骤”中的“保存仿真数据”,可将定位结果存放在合适的位置。6 技术支持我们为本软件系统提供完善的技术服务。在使用本系统过程中,如果遇到问题或发现软件错误,请与我们联系:xiaocuiworld,我们会以最快的速度为您解决。