关于APIT定位算法的讨论

关于APIT定位算法的讨论

【摘要】   无线传感器网络节点定位机制的研究中,基于距离无关的定位技术得到快速发展,其中基于重叠区域的APIT定位技术在实际环境中的定位精度高,被广泛研究和应用。

【关键词】 无线传感器网络;定位算法;APIT;

【正文】

在传感网络中的许多应用中,用户一般都会关心一个重要问题,即特定时间发生的具体位置或区域。例如,目标跟踪,入侵检测,环境监控等,若不知道传感器自身的位置,感知的数据是没有意义的。因此,传感器网络及诶单必须知道自身所在的位置,才能够有效地说明被检测物体的位置,从而实现对外部目标的定位,跟踪等。

作为一种全新的技术,无线传感器网络具有许多挑战性的研究课题,定位技术就是其中之一,定位也是大多数应用的基础和前提。

目前定位技术主要有两个类型:给予测距的定位技术和基于非测距定位技术。

基于测距的定位技术涉及几何中的图形问题,已知节点的位置,求另几个节点的位置,比较常用的方法是三边定位和角度定位,这类算法比较简单,实现容易,但是他们受到电磁干扰,多径干扰等因素的影响。

基于非测距定位技术,无需利用这些基础设施来测量位置节点同信标节点之间的距离和角度这些信息,只需要根据未知节点是否连通,或者未知节点之间的跳数来度量。极大地降低了对环境的依赖性。在这篇文章中,我选取了其中具有代表性的APIT定位算法来进行讨论。

APIT定位算法

1.   初始

APIT(Approximate PIT) 定位算法的理论基础是最佳三角形内点测试法PIT(Perfect Point-In-Triangulation Test)。

PIT理论为判断某一点M是否在三角形ABC内,假如存在一个方向,沿着这个方向M点会同时远离或者接近三角形ABC的三个顶点,那么M位于三角形ABC,否则位于三角形ABC外。

2.   优化

但是无线传感网络中大部分节点是静止的,不可能随意的像上述一样通过移动节点测试是否在三角形中,为了在静态网络中执行PIT测试,定义了APIT测试。

APIT定位算法最关键的步骤是测试未知节点是否在三个信标节点所组成的三角形内部。APIT算法是基于PIT测试原理的改进,可以领用WSN较高的节点密度和无线信息的传播特性来判断是否远离和靠近信标节点。通常在给定方向上,一个节点距离信标节点越远,接收信号的强度越弱。通过与邻居节点信息交换,来效仿PIT测试的节点移动。例如:

图a中,位置未知节点M通过与邻居节点1交换信息,得知自身如果运动到节点1,将远离信标B和C,但是会接近信标节点A,同样通过与邻居节点2,3,4交换信息,最终确定自身位于三角形ABC中。

图b中,当节点通过邻居节点2得知,将会同时远离信标节点ABC,故判断自身不在三角形ABC中。

3.   确认

在APIT算法中,一个未知节点任选三个相邻信标节点,若通过测试发现自己位于他们所组成的三角形中,则认为该三角形的质心即为未知节点的位置,然后进一步选用不同信标节点的组合重复测试,直到穷尽所有组合或者达到所需定位精度为止;最后计算包含目标节点所有三角形的交集质心,并以此为未知节点的最终位置。

源码分析

本次实验均用matlab程序编写:

1.   初始化布局

C_random(area,node n,anchors_n,GPS_error):

参数:区域,节点数,信标节点,GPS误差。

function C_random(area,nodes_n,anchors_n,GPS_error)

% deploy the nodes over a C-shaped region

% area: the sensing region [200 40 40 160]

%   the side is 200m-long, x=40,y=40,y=160: the edge of C-shaped region

% nodes_n: the number of nodes

% anchors_n: the number of anchors

%   if anchors_n<1, it means the ratio;

%   if anchors_n>1, it means the number

% GPS_error:the max location error of anchor raised by GPS, default is 0;

%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

% C_random([200 40 40 160],150,0.1)

C_random([1000,100,1000,0],240,0.2);

240个节点,其中48个锚节点

红色*表示锚节点,蓝色O表示未知节点

2.   计算未知节点坐标

if neighboring_anchor_n>=3

            gridmap=zeros(row_n,col_n);

            grid_covered_flag=zeros(row_n,col_n);

            for a=1:neighboring_anchor_n-2

                for b=a+1:neighboring_anchor_n-1

                    for c=b+1:neighboring_anchor_n

                        % 判断未知节点i是否在三角形abc内部

                        % Approximate P.I.T Test: "If no neighbor of M is further from/close to all three anchors A, B and C simultaneously,

                        % M assumes that it is inside triangle abc. Otherwise,M assumes it resides outside the triangle."

                        neighboring_node_index=setdiff(find(neighbor_matrix(i,:)==1),neighboring_anchor_index([a b c]));

                        neighboring_node_rss_of_abc=neighbor_rss(neighboring_node_index,neighboring_anchor_index([a b c]));

                        in_out_judge=neighboring_node_rss_of_abc>repmat(neighbor_rss(i,neighboring_anchor_index([a b c])),length(neighboring_node_index),1);

                        if any(sum(transpose(in_out_judge))==0|sum(transpose(in_out_judge))==3)%outside                       

                            Grid_in_triangle_abc=inpolygon(centroid_x,centroid_y,all_nodes.estimated(neighboring_anchor_index([a b c]),1),all_nodes.estimated(neighboring_anchor_index([a b c]),2));%被三角形abc覆盖到网络

                            gridmap=gridmap-Grid_in_triangle_abc;                             

                        else%inside

                            Grid_in_triangle_abc=inpolygon(centroid_x,centroid_y,all_nodes.estimated(neighboring_anchor_index([a b c]),1),all_nodes.estimated(neighboring_anchor_index([a b c]),2));%被三角形abc覆盖到网络

                            gridmap=gridmap+Grid_in_triangle_abc;                           

                        end

                        grid_covered_flag=grid_covered_flag|Grid_in_triangle_abc;

                    end

                end

            end

3.   定位误差

红色*表示锚节点

蓝色O表示未知节点的估计位置

黑色O表示不能被定位的未知节点

蓝色-表示未知节点的定位误差(连接未知节点的估计位置和真实位置)

一共300个节点:60个锚节点,240个未知节点,0个不能被定位的未知节点

定位误差为0.17819

算法总结

APIT定位的具体步骤如下所示:

l  收集信息:未知节点收集邻近信标节点的信息。

l  APIT测试:测试未知节点是否在不同的信标节点组合的三角形内部。

l  计算重叠区域:统计包含未知节点的三角形,计算所有三角形的重叠区域。

l  计算未知节点位置:计算重叠区域的质心位置,作为位置节点的位置。

展望与发展

在整个无线传感器网络的边缘地区,传感器的数量相对比较少,信标节点较少,这样组成的三角形的数量也会降低。在进行APIT测试定位时,会出现由于重叠区域过大而造成实际位置与定位位置偏差过大的现象。如图所示,是运用APIT定位误差较大的一种情况。

为了提高无线传感器网络的定位精度,APIT算法需要继续改进,现已有很多专家学者进行过讨论,这里只举例其中两种:

l  将三角形进行中垂线分割成4个或者6个小区间,通过对各个目标节点收到目标节点信号的强度进行比较,判断目标节点位于哪一个小区间中。

l  通过任意一个信标节点对另外两个信标节点所在直线作垂线得到垂直交点,通过比较这个信标点到交点的距离和他与位置节点的距离的关系,初步判断未知节点未知,同时,通过加权质心定位算法得到未知节点的精确估计。

参考文献

【1】      刘伟荣,何云. 物联网与无线传感器网络

【2】      唐明虎,张长宏. 无线传感器网络APIT定位算法

【3】      张冬冬,常用定位技术的实现

【4】      海子,www.cnblogs.com/dolphin0520

【5】      戴天虹,李昊,基于改进APIT算法的无线传感器网络节点定位

【6】      杨凌云,冯友宏,垂直交点APIT定位改进算法

原文地址:https://www.cnblogs.com/TreeDream/p/9241167.html

时间: 2024-11-05 14:59:15

关于APIT定位算法的讨论的相关文章

[CLPR] 定位算法中常见的几种思路

一. 引言 如何从一副图片中找到车牌? 这是机器视觉的一个应用. 理所当然地, 思考的角度是从车牌本身的信息入手, 为了讨论方便, 下面均以长窄型蓝白车牌为例. 下图就是这样一张车牌的基本信息. 一眼看过去, 可以得到的信息有: 长宽比 - 3.14, 字符数 - 7, 第一个字符是汉字, 第二个字符是字母, 之后为5个字母/数字混合等距排列. 同时还可以大致了解到, 一个清晰的车牌应该拥有足够多的边缘信息, 换句话说, 边缘信息足够密集地聚集在一个3.14:1的矩形中. 所以今天介绍的算法,

两点定位算法

基于RSSI的精确室内定位算法 基于系统识别的RSSI定位算法 无线定位算法综述 一种用于室内人员定位的RSSI定位算法 ZigBee技术中基于RSSI测距的定位算法研究 Zigbee定位测量 zigbee定位的概念笔记(2)(cc2431定位引擎)

Trilateration三边测量定位算法

转载自Jiaxing / 2014年2月22日 基本原理 Trilateration(三边测量)是一种常用的定位算法: 已知三点位置 (x1, y1), (x2, y2), (x3, y3) 已知未知点 (x0, y0) 到三点距离 d1, d2, d3 以 d1, d2, d3 为半径作三个圆,根据毕达哥拉斯定理,得出交点即未知点的位置计算公式: ( x1 - x0 )2 + ( y1 - y0 )2 = d12 ( x2 - x0 )2 + ( y2 - y0 )2 = d22 ( x3 -

定位算法及算法导论小结

一.电子围栏定位算法: 还是决定不做定位算法了,原因有下: 1.文献[1]中利用线性算法解决了TDOA问题(四个观测点以上),文献[2]中将AOA算法的形式也纳入进来.多个直线的交点就是待测点的位置.如果考虑单点是否在围栏内部,之前做的假设是,定位单点的算法复杂度高,但这两篇文献中说明的是:理论上是线性的,很简单.根据四个及以上观测量可将问题变成线性问题求解的后续扩展思路是,1结合新的应用场景和实际数据,得到算法应用的结果测试,像文献[3]就在车联网中应用了这个定位算法,但是实测数据我现在很难拿

[转]基于TDOA声源定位算法仿真--MATLAB仿真

原文链接:https://blog.xxcxw.cn/2019/08/10/%e5%9f%ba%e4%ba%8etdoa%e5%a3%b0%e6%ba%90%e5%ae%9a%e4%bd%8d%e7%ae%97%e6%b3%95%e4%bb%bf%e7%9c%9f-matlab%e4%bb%bf%e7%9c%9f/ 转自:http://t.cn/AiTjYCqD 声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUSIC和DOA算法并不适用该场景,本仿真主要用TDOA算法进行定位.

图像特征提取:SIFT定位算法关键步骤的说明

1. SIFT算法中一些符号的说明 $I(x,y)$表示原图像. $G(x,y,\sigma)$表示高斯滤波器,其中$G(x,y,\sigma) = \frac{1}{2\pi\sigma^2}exp(-(x^2+y^2)/2\sigma^2)$. $L(x,y,\sigma)$表示由一个高斯滤波器与原图像卷积而生成的图像,即$L(x,y,\sigma) = G(x,y,\sigma)\otimes I(x,y)$.一系列的$\sigma_i$,则可以生成一系列的$L(x,y,\sigma_i)

逆向分析之定位算法的一些经验

当开始逆向分析一个300M的图像处理软件的一个功能时,才发现之前玩逆向都是小打小闹,一个多月的奋斗,终于搞定了.很希望遇到问题,因为这样才能学到新的东西,事实上确实遇到了不少问题,也学到了很多经验. 之前的逆向都是直接扔到OD就开始调试,而现在知道在虚拟机里运行,因为这么大的软件不是一两个小时就可以搞完的,在虚拟机里直接快照拍摄,就像游戏存档一样,这样可以避免每次运行软件的注册激活,避免重复之前的分析,避免内存地址动态变化等等,好处多多. 分析算法的难点之一是定位核心算法.对于有软件保护的软件就

基于朴素贝叶斯的定位算法

1 定位背景介绍 一说到定位大家都会想到gps,然而gps定位有首次定位缓慢(具体可以参考之前的博文<LBS定位技术>).室内不能使用.耗电等缺陷,这些缺陷大大限制了gps的使用.在大多数移动互联网应用例如google地图.百度地图等,往往基于wifi.基站来进行定位. 一般APP在请求定位的时候会上报探测到的wifi信号.基站信号.以wifi为例,手机会探测到周围各个wifi(mac地址)对应的信号强度(RSSI),即收集到信号向量(<WF1, RSSI1> <WF2, R

一种高效的可变行高列表行定位算法

列表控件是数据显示时使用的一种常用的控件. 一般情况下列表中的行是等高的,这种情况下无论列表包含多少行,都能够在O(1)的时间定位到指定行. 但是当显示的内容格式不一致时,使用相等的行高可能就意味着显示空间的浪费,也意味说用户需要更多的滚动操作,影响用户体验. 要实现一个支持可变行高的列表控件,首先要解决的问题就是快速定位列表行. 假定一个列表中的表项按照下面的高度排列: 1,2,3,1,2,3,1,2,3,1,2,3,4,5 可以知道总高度为:33 程序员需要解决从一个随机的[0,32]的值(