发明内容
本发明的目的是克服现有技术的不足,提供一种大量离散节点的并行定位方法。
大量离散节点的并行定位方法的步骤如下:
1)大量离散节点中的每个离散节点分配一个唯一的自身编号,统计参与定位的离散节点总点数;
2)各离散节点根据自身编号和参与定位的离散节点总点数分别计算出第一层定位过程中自身所在的定位组号;
3)第一层定位过程中的每个定位组独立进行三点法定位,定位组之间并行工作,获得每个定位组定位数据的相对坐标;
4)第一层定位过程中的所有定位组两两配对整合至第二层定位过程,将第一层定位过程中的每一个定位组包含的所有点的坐标转换到整合成的第二层定位过程的某一定位组的相对坐标系中;
5)重复步骤4)直到整合到顶层定位过程,顶层定位过程只包含一个定位组,所有离散节点的坐标都整合到顶层定位过程中的定位组的相对坐标系中,则定位过程完成。
步骤2)所述各离散节点根据自身编号和参与定位的离散节点总点数分别计算出第一层定位过程中自身所在的定位组号,步骤为:
a) 根据参与定位的离散节点总点数图表确定定位总层数n,再根据公式
来确定第一层定位过程中所含有的定位组数,最后通过自身编号与第一层定位过程总定位组数相除计算得到本点所在的第一层定位过程定位组号,以及对总定位组数求余获得本点在第一层定位过程此定位组中的身份。
步骤3)所述第一层定位过程中的每个定位组独立进行三点法定位,定位组之间并行工作,获得每个定位组定位数据的相对坐标,步骤为:
b) 在本定位组的全部离散节点中,任选一对离散节点作为主节点备选节点和X节点备选节点;
c) 寻找距离主节点备选节点和X节点备选节点构成的X轴距离最远的离散节点作为翻转节点备选节点;
d) 测量主节点备选节点、X节点备选节点以及翻转节点备选节点三者之间的相互距离;
e) 如果X节点备选节点和翻转节点备选节点之间的距离大于主节点备选节点与X节点备选节点之间距离,则交换X节点备选节点和翻转节点备选节点的身份;
f) 如果X节点备选节点和翻转节点备选节点进行交换,则以主节点备选节点和X节点备选节点定位组成X轴,抛弃翻转节点备选节点,寻找离X轴垂直距离最远的点作为翻转节点备选节点;
g) 重复步骤e)到步骤f),从所有离散节点中选出的主节点备选节点、X节点备选节点和翻转节点备选节点变为主节点、X节点和翻转节点;
h) 主节点、X节点以及翻转节点构成饱满三角形,形成区域定位相对坐标系;
i) 从此定位组的有效区域内,选择主节点、X节点和翻转节点之外的离散节点;
j) 测量选择的离散节点与主节点、X节点以及翻转节点之间的距离;
k) 在饱满三角形构成的相对坐标系中,计算选择的离散节点在饱满三角形构成相对坐标系中的位置,用如下公式计算选择的离散节点在饱满三角形构成的相对坐标系中的位置,
X坐标
Y坐标
其中L1为选择的离散节点与主节点之间的距离,L2为选择的离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为选择的离散节点在相对坐标系中的x坐标,y为选择的离散节点在相对坐标系中的y坐标;
l) 计算离散节点到相对坐标系的X轴垂直距离,如果离散节点到相对坐标系的X轴垂直距离与主节点和X节点之间距离比在10%以内,对加入饱满三角形构成的相对坐标系的离散节点位置进行修正,离散节点到相对坐标系的X轴垂直距离计算公式如下
其中L1为离散节点与主节点之间的距离,L2为离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为离散节点在相对坐标系中的x坐标,y的绝对值为离散节点到相对坐标系的X轴垂直距离;
m) 如果步骤l)中需要对加入饱满三角形构成的相对坐标系的离散节点位置进行修正,交换X节点和翻转节点的身份,获得X轴和相对坐标系,在相对坐标系中计算加入饱满三角形构成的相对坐标系的离散节点位置,计算离散节点在相对坐标系中位置使用公式如下
其中L1为离散节点与主节点之间的距离,L2为离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为离散节点在相对坐标系中的x坐标,y为离散节点在相对坐标系的y坐标;
n) 如果步骤l)中需要对加入饱满三角形构成的相对坐标系的离散节点定位进行修正,并且在完成步骤m)后,以X节点和翻转接点的连线作为X轴,主节点变成翻转节点,构成相对坐标系,在相对坐标系中计算加入饱满三角形构成的相对坐标系的离散节点位置,计算离散节点位置使用的公式如下
其中L1为离散节点与主节点之间的距离,L2为离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为离散节点在相对坐标系中的x坐标,y的绝对值为离散节点到相对坐标系的X轴垂直距离;
o) 如果步骤l)中需要对加入饱满三角形构成的相对坐标系的离散节点定位进行修正,并且完成步骤m)和步骤n)后,加权加入饱满三角形构成的相对坐标系的离散节点在步骤m)和步骤n)相对坐标系中位置,完成对加入饱满三角形构成的相对坐标系的离散节点坐标的修正。
步骤4)所述第一层定位过程中的所有定位组两两配对整合至第二层定位过程,将第一层定位过程中的每一个定位组包含的所有点的坐标转换到整合成的第二层定位过程的某一定位组的相对坐标系中,步骤为:
p)将步骤3)第一层定位过程中每两个定位组中各抽出三个节点合成一个六点的第二层定位组,重复步骤3)给每一个第二层的定位组定位,利用第一层定位过程定位组抽出的三个点在第二层定位组中经历定位过程之后得到的坐标和第一层定位过程定位组抽出的三个点在步骤3)中相对坐标之间的关系,来计算两坐标系之间的平移和旋转量,从而将第一层定位过程定位组的所有离散节点的坐标转换到第二层定位组中的相对坐标系中,将第一层定位过程中的每两个定位组的所有离散点加入到第二层的一个定位组的相对坐标系中。
本发明具有工作并行,每离散节点承担工作量少、工作量平均的优点,更具有时间复杂度小的优点。
在大量离散节点的并行定位中,本方法收敛迅速,且对误差不敏感,具有很好的鲁棒性。
具体实施方式
大量离散节点的并行定位方法的步骤如下:
1)大量离散节点中的每个离散节点分配一个唯一的自身编号,统计参与定位的离散节点总点数;
2)各离散节点根据自身编号和参与定位的离散节点总点数分别计算出第一层定位过程中自身所在的定位组号;
3)第一层定位过程中的每个定位组独立进行三点法定位,定位组之间并行工作,获得每个定位组定位数据的相对坐标;
4)第一层定位过程中的所有定位组两两配对整合至第二层定位过程,将第一层定位过程中的每一个定位组包含的所有点的坐标转换到整合成的第二层定位过程的某一定位组的相对坐标系中;
5)重复步骤4)直到整合到顶层定位过程,顶层定位过程只包含一个定位组,所有离散节点的坐标都整合到顶层定位过程中的定位组的相对坐标系中,则定位过程完成。
步骤2)所述各离散节点根据自身编号和参与定位的离散节点总点数分别计算出第一层定位过程中自身所在的定位组号,步骤为:
a) 根据参与定位的离散节点总点数图表确定定位总层数n,再根据公式
来确定第一层定位过程中所含有的定位组数,最后通过自身编号与第一层定位过程总定位组数相除计算得到本点所在的第一层定位过程定位组号,以及对总定位组数求余获得本点在第一层定位过程此定位组中的身份。
步骤3)所述第一层定位过程中的每个定位组独立进行三点法定位,定位组之间并行工作,获得每个定位组定位数据的相对坐标,步骤为:
b) 在本定位组的全部离散节点中,任选一对离散节点作为主节点备选节点和X节点备选节点;
c) 寻找距离主节点备选节点和X节点备选节点构成的X轴距离最远的离散节点作为翻转节点备选节点;
d) 测量主节点备选节点、X节点备选节点以及翻转节点备选节点三者之间的相互距离;
e) 如果X节点备选节点和翻转节点备选节点之间的距离大于主节点备选节点与X节点备选节点之间距离,则交换X节点备选节点和翻转节点备选节点的身份;
f) 如果X节点备选节点和翻转节点备选节点进行交换,则以主节点备选节点和X节点备选节点定位组成X轴,抛弃翻转节点备选节点,寻找离X轴垂直距离最远的点作为翻转节点备选节点;
g) 重复步骤e)到步骤f),从所有离散节点中选出的主节点备选节点、X节点备选节点和翻转节点备选节点变为主节点、X节点和翻转节点;
h) 主节点、X节点以及翻转节点构成饱满三角形,形成区域定位相对坐标系;
i) 从此定位组的有效区域内,选择主节点、X节点和翻转节点之外的离散节点;
j) 测量选择的离散节点与主节点、X节点以及翻转节点之间的距离;
k) 在饱满三角形构成的相对坐标系中,计算选择的离散节点在饱满三角形构成相对坐标系中的位置,用如下公式计算选择的离散节点在饱满三角形构成的相对坐标系中的位置,
X坐标
Y坐标
其中L1为选择的离散节点与主节点之间的距离,L2为选择的离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为选择的离散节点在相对坐标系中的x坐标,y为选择的离散节点在相对坐标系中的y坐标;
l) 计算离散节点到相对坐标系的X轴垂直距离,如果离散节点到相对坐标系的X轴垂直距离与主节点和X节点之间距离比在10%以内,对加入饱满三角形构成的相对坐标系的离散节点位置进行修正,离散节点到相对坐标系的X轴垂直距离计算公式如下
其中L1为离散节点与主节点之间的距离,L2为离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为离散节点在相对坐标系中的x坐标,y的绝对值为离散节点到相对坐标系的X轴垂直距离;
m) 如果步骤l)中需要对加入饱满三角形构成的相对坐标系的离散节点位置进行修正,交换X节点和翻转节点的身份,获得X轴和相对坐标系,在相对坐标系中计算加入饱满三角形构成的相对坐标系的离散节点位置,计算离散节点在相对坐标系中位置使用公式如下
其中L1为离散节点与主节点之间的距离,L2为离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为离散节点在相对坐标系中的x坐标,y为离散节点在相对坐标系的y坐标;
n) 如果步骤l)中需要对加入饱满三角形构成的相对坐标系的离散节点定位进行修正,并且在完成步骤m)后,以X节点和翻转接点的连线作为X轴,主节点变成翻转节点,构成相对坐标系,在相对坐标系中计算加入饱满三角形构成的相对坐标系的离散节点位置,计算离散节点位置使用的公式如下
其中L1为离散节点与主节点之间的距离,L2为离散节点与X节点之间的距离,L3为主节点和X节点之间的距离,x为离散节点在相对坐标系中的x坐标,y的绝对值为离散节点到相对坐标系的X轴垂直距离;
o) 如果步骤l)中需要对加入饱满三角形构成的相对坐标系的离散节点定位进行修正,并且完成步骤m)和步骤n)后,加权加入饱满三角形构成的相对坐标系的离散节点在步骤m)和步骤n)相对坐标系中位置,完成对加入饱满三角形构成的相对坐标系的离散节点坐标的修正。
步骤4)所述第一层定位过程中的所有定位组两两配对整合至第二层定位过程,将第一层定位过程中的每一个定位组包含的所有点的坐标转换到整合成的第二层定位过程的某一定位组的相对坐标系中,步骤为:
p)将步骤3)第一层定位过程中每两个定位组中各抽出三个节点合成一个六点的第二层定位组,重复步骤3)给每一个第二层的定位组定位,利用第一层定位过程定位组抽出的三个点在第二层定位组中经历定位过程之后得到的坐标和第一层定位过程定位组抽出的三个点在步骤3)中相对坐标之间的关系,来计算两坐标系之间的平移和旋转量,从而将第一层定位过程定位组的所有离散节点的坐标转换到第二层定位组中的相对坐标系中,将第一层定位过程中的每两个定位组的所有离散点加入到第二层的一个定位组的相对坐标系中。
实施例
1)大量离散节点中的每个离散节点分配一个唯一的自身编号,统计参与定位的离散节点总点数;
大量离散节点组织无线网络,无线网络建立的同时统计离散节点个数,分配给每一个离散节点一个网络中唯一的编号。
2)各离散节点根据自身编号和参与定位的离散节点总点数分别计算出第一层定位过程中自身所在的定位组号;
根据参与定位的离散节点总点数图表确定定位总层数n,再根据公式
来确定第一层定位过程中所含有的定位组数,最后通过自身编号与第一层定位过程总定位组数相除计算得到本点所在的第一层定位过程定位组号,以及对总定位组数求余获得本点在第一层定位过程此定位组中的身份。
定义数据结构如下
以5层定位过程为例
struct cake
{
int TotalPointNum;
int Layer1[NUMBER][2];// Layer1[i][0]编号为i的点的定位组号。
Layer1[i][1] 编号为i的点在定位组中的身份:1,主节点;2,X节点;3,翻转节点;0,普通节点
int Layer2[NUMBER][2];
int Layer3[NUMBER][2];
int Layer4[NUMBER][2];
int Layer5[NUMBER][2];
double L1[NUMBER][2];// L1[i][0] 编号为i的点的x坐标值。
L1[i][1] 编号为i的点的y坐标值
double L2[NUMBER][2];
double L3[NUMBER][2];
double L4[NUMBER][2];
double L5[NUMBER][2];
};
3)第一层定位过程中的每个定位组独立进行三点法定位,定位组之间并行工作,获得每个定位组定位数据的相对坐标;
三点定位算法封装之后的c函数如下:
Void Base_enhance_Three_points_Location(double a[MAX_ANCHORS][MAX_ANCHORS],int num,double *coordinate_realtime,int turn,int mainp,int xp)代码详见附件1
函数参数及功能说明如下:a[MAX_ANCHORS][MAX_ANCHORS]为存储所有离散节点之间的距离信息,即a[i][j]为i点和j点的实测距离信息;num为离散节点个数;*coordinate_realtime为输出坐标数组指针,将定位完成的坐标信息输出到所指数组;turn为定位图景翻转量,第一次定位过程需要人为指定,也即是翻转节点在一二象限turn值为1,在三四象限turn值为0;mainp为主节点编号;xp为X节点编号。
4)第一层定位过程中的所有定位组两两配对整合至第二层定位过程,将第一层定位过程中的每一个定位组包含的所有点的坐标转换到整合成的第二层定位过程的某一定位组的相对坐标系中;
首先在第二层每定位组中进行三点定位;
第二层的每一个定位组都是第一层定位过程的两个定位组中抽出三个主要节点所组成的,所抽出的三个主要节点是经过三点定位算法的健壮三角形选择,一定是不共线且十分饱满的。
由几何知识知道空间中确定一个平面所需要三个不共线点,所以需要将一个第一层定位过程中的两个定位组中的所有点的坐标整合到第二层中的一个定位组的坐标系中需要每个第一层定位过程中的定位组抽取三个不共线节点。
在获得了第二层定位组坐标系下这三个主要节点的定位信息之后需要计算两个坐标转换量:坐标系平移量,坐标系旋转量。
坐标系平移量x=新定位组中主节点的x坐标 - 0
坐标系平移量y=新定位组中主节点的y坐标 – 0
其中xx为第二层定位组坐标系下第一层定位组中X节点的x坐标值,mx为第二层定位组坐标系下第一层定位组中主节点的x坐标值,xy为第二层定位组坐标系下第一层定位组中X节点的y坐标值,my为第二层定位组坐标系下第一层定位组中主节点的y坐标值。
如第一层定位过程中有节点(x,y)欲转换为第二层定位组中坐标系点(x_New, y_New)。
做法如下:
其中mx,my为坐标系平移量
转换过程重复多次,直到第一层定位过程中两个定位组中所有离散节点的坐标都转换到第二层定位组的坐标系中
在第一层定位过程定位组的定位时假定turn值为1,合并至第二层定位组的坐标转换中假定第二层定位过程定位组的坐标系的turn值为1,以此来修正第一层定位过程定位组中的turn值。
具体做法如下:在第二层定位组中的定位时,将第一层定位过程的定位组中的翻转节点在第二层定位过程定位组中的坐标反向转换到第一层定位过程定位组的相对坐标系中,观察其y坐标值的正负性。
如果y为正数,则不用修正;如果y为负数,则将第一层定位过程定位组定位时假定的turn值由1改为0。
如果turn值修正为0,则在定位组整合的过程之前将第一层定位过程定位组中的所有节点的y坐标值乘-1。
如果没有修正turn值,则在正常进行定位组整合过程。
turn为定位图景翻转量,也即是翻转节点在一二象限turn值为1,在三四象限turn值为0。
5) 重复步骤4)直到整合到顶层定位过程,顶层定位过程只包含一个定位组,所有离散节点的坐标都整合到顶层定位过程中的定位组的相对坐标系中,则定位过程完成;
处理步骤5)的函数为void Judge_and_Turn(),代码详见附件2
若重复步骤4),每向上一层就将本层的两个定位组整合为上一层的一个定位组。
这样进行到最顶层只有一个定位组。
最后所有参与定位的离散节点的坐标都整合到一个相对坐标系中,且turn值为1。
最后的turn值可以人为转换。
turn为定位图景翻转量,也即是翻转节点在一二象限turn值为1,在三四象限turn值为0。
关于turn的操作见函数void Judge_and_Turn(),代码详见附件2。