计算节点位置的基本方法
在传感器节点定位过程中,通常根据未知节点(被监测节点)相对相邻信标节点的距离、角度进行计算位置。通常采用三边测距法、三角测距法或极大似然估计法进行计算。
三边测距法(Trilateration)
三边测距法的原理如下,已知未知节点D ( x , y ) (x, y) (x,y)与相邻的三个信标节点 A ( x 1 , y 1 ) 、 B ( x 2 , y 2 ) 、 C ( x 3 , y 3 ) A(x_1, y_1)、B(x_2, y_2)、C(x_3, y_3) A(x1,y1)、B(x2,y2)、C(x3,y3)间的距离分别为 d a 、 d b 、 d c d_a、d_b、d_c da、db、dc,其示意图如下所示:

根据距离公式可罗列如下方程式:
{ ( x a − x ) 2 + ( y a − y ) 2 = d a ( x b − x ) 2 + ( y b − y ) 2 = d b ( x c − x ) 2 + ( y c − y ) 2 = d c \begin{cases} \sqrt{(x_a-x)^2 + (y_a-y)^2} = d_a \\ \sqrt{(x_b-x)^2 + (y_b-y)^2} = d_b \\ \sqrt{(x_c-x)^2 + (y_c-y)^2} = d_c \\ \end{cases} ⎩⎪⎨⎪⎧(xa−x)2+(ya−y)2=da(xb−x)2+(yb−y)2=db(xc−x)2+(yc−y)2=dc
求得结果如下:
[ x y ] = [ 2 ( x a − x c ) 2 ( y a − y c ) 2 ( x b − x c ) 2 ( y b − y c ) ] − 1 [ x a 2 − x c 2 + y a 2 − y c 2 + d c 2 − d a 2 x b 2 − x c 2 + y b 2 − y c 2 + d c 2 − d b 2 ] \begin{bmatrix}x \\ y\end{bmatrix} = \begin{bmatrix} 2(x_a-x_c) & 2(y_a-y_c) \\ 2(x_b-x_c) & 2(y_b-y_c) \\ \end{bmatrix}^{-1} \begin{bmatrix} x_a^2 - x_c^2 + y_a^2 - y_c^2 + d_c^2 - d_a^2 \\ x_b^2 - x_c^2 + y_b^2 - y_c^2 + d_c^2 - d_b^2 \\ \end{bmatrix} [xy]=[2(xa−xc)2(xb−xc)2(ya−yc)2(yb−yc)]−1[xa2−xc2+ya2−yc2+dc2−da2xb2−xc2+yb2−yc2+dc2−db2]
三角测距法(Triangulation)
三角测距法的原理如下,已知未知节点O ( x , y ) (x, y) (x,y)与相邻的三个信标节点 A ( x 1 , y 1 ) 、 B ( x 2 , y 2 ) 、 C ( x 3 , y 3 ) A(x_1, y_1)、B(x_2, y_2)、C(x_3, y_3) A(x1,y1)、B(x2,y2)、C(x3,y3)之间的夹角分别为 ∠ A O C 、 ∠ A O B 、 ∠ B O C ∠AOC、∠AOB、∠BOC ∠AOC、∠AOB、∠BOC,可唯一确定 △ A O B \triangle AOB △AOB、 △ A O C \triangle AOC △AOC、 △ B O C \triangle BOC △BOC的外接圆 O 1 、 O 2 、 O 3 O_1、O_2、O_3 O1、O2、O3。
其示意图如下所示:

为确定外接圆圆心坐标 O 1 ( x O 1 , y O 1 ) O_1(x_{O_1}, y_{O_1}) O1(xO1,yO1)及其半径 r 1 r_1 r1,根据余弦公式、距离公式可罗列如下方程式:
{ ( x O 1 − x 1 ) 2 + ( y O 1 − y 1 ) 2 = r 1 ( x O 1 − x 2 ) 2 + ( y O 1 − y 2 ) 2 = r 1 ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 = 2 r 1 2 − 2 r 1 2 ⋅ cos A O 1 B ∠ A O 1 B = 2 π − ∠ A O B \begin{cases} \sqrt{(x_{O_1}-x_1)^2 + (y_{O_1}-y_1)^2} = r_1 \\ \sqrt{(x_{O_1}-x_2)^2 + (y_{O_1}-y_2)^2} = r_1 \\ (x_1 - x_2)^2 + (y_1 - y_2)^2 = 2r_1^2 - 2r_1^2\cdot\cos{AO_1B} \\ ∠AO_1B = 2\pi - ∠AOB \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧(xO1−x1)2+(yO1−y1)2=r1(xO1−x2)2+(yO1−y2)2=r1(x1−x2)2+(y1−y2)2=2r12−2r12⋅cosAO1B∠AO1B=2π−∠AOB
同理,对于外接圆圆心坐标 O 2 ( x O 2 , y O 2 ) 、 O 3 ( x O 3 , y O 3 ) O_2(x_{O_2}, y_{O_2})、O_3(x_{O_3}, y_{O_3}) O2(xO2,yO2)、O3(xO3,yO3)及其半径 r 2 、 r 3 r_2、r_3 r2、r3,可以罗列类似方程求出。最后,再利用三边测距法即可计算处节点 O ( x , y ) O(x, y) O(x,y)的坐标。
{ ( x O 1 − x ) 2 + ( y O 1 − y ) 2 = r 1 ( x O 2 − x ) 2 + ( y O 2 − y ) 2 = r 2 ( x O 3 − x ) 2 + ( y O 3 − y ) 2 = r 3 \begin{cases} \sqrt{(x_{O_1}-x)^2 + (y_{O_1}-y)^2} = r_1 \\ \sqrt{(x_{O_2}-x)^2 + (y_{O_2}-y)^2} = r_2 \\ \sqrt{(x_{O_3}-x)^2 + (y_{O_3}-y)^2} = r_3 \\ \end{cases} ⎩⎪⎨⎪⎧(xO1−x)2+(yO1−y)2=r1(xO2−x)2+(yO2−y)2=r2(xO3−x)2+(yO3−y)2=r3
求得结果如下:
[ x y ] = [ 2 ( x O 1 − x O 3 ) 2 ( y O 1 − y O 3 ) 2 ( x O 2 − x O 3 ) 2 ( y O 2 − y O 3 ) ] − 1 [ x O 1 2 − x O 3 2 + y O 1 2 − y O 3 2 + r 3 2 − r 1 2 x O 2 2 − x O 3 2 + y O 2 2 − y O 3 2 + r 3 2 − r 2 2 ] \begin{bmatrix}x \\ y\end{bmatrix} = \begin{bmatrix} 2(x_{O_1}-x_{O_3}) & 2(y_{O_1}-y_{O_3}) \\ 2(x_{O_2}-x_{O_3}) & 2(y_{O_2}-y_{O_3}) \\ \end{bmatrix}^{-1} \begin{bmatrix} x_{O_1}^2 - x_{O_3}^2 + y_{O_1}^2 - y_{O_3}^2 + r_3^2 - r_1^2 \\ x_{O_2}^2 - x_{O_3}^2 + y_{O_2}^2 - y_{O_3}^2 + r_3^2 - r_2^2 \\ \end{bmatrix} [xy]=[2(xO1−xO3)2(xO2−xO3)2(yO1−yO3)2(yO2−yO3)]−1[xO12−xO32+yO12−yO32+r32−r12xO22−xO32+yO22−yO32+r32−r22]
极大似然估计法(Maximum Likelihood Estimation)
极大似然估计法原理如下,已知未知节点 D ( x , y ) D(x, y) D(x,y)附件存在n个信标节点,其坐标分别为 ( x 1 , y 1 ) 、 ( x 2 , y 2 ) 、 ( x 3 , y 3 ) … … ( x n , y n ) (x_1, y_1)、(x_2, y_2)、(x_3, y_3)……(x_n, y_n) (x1,y1)、(x2,y2)、(x3,y3)……(xn,yn)且各信标节点到未知节点的距离分别为 d 1 、 d 2 、 d 3 … … d n d_1、d_2、d_3……d_n d1、d2、d3……dn。
其示意图如下所示:

根据距离公式,可以罗列出如下方程式:
{ ( x 1 − x ) 2 + ( y 1 − y ) 2 = d 1 2 ( x 2 − x ) 2 + ( y 2 − y ) 2 = d 2 2 … … ( x n − x ) 2 + ( y n − y ) 2 = d n 2 \begin{cases} (x_1 - x)^2 + (y_1 - y)^2 = d_1^2\\ (x_2 - x)^2 + (y_2 - y)^2 = d_2^2\\ ……\\ (x_n - x)^2 + (y_n - y)^2 = d_n^2 \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧(x1−x)2+(y1−y)2=d12(x2−x)2+(y2−y)2=d22……(xn−x)2+(yn−y)2=dn2
对上述方程式,分别用每一个方程减去最后一个方程,可得到如下形式的方程式:
{ 2 ( x 1 − x n ) x + 2 ( y 1 − y n ) y = x 1 2 − x n 2 + y 1 2 − y n 2 − d 1 2 + d n 2 2 ( x 2 − x n ) x + 2 ( y 2 − y n ) y = x 2 2 − x n 2 + y 2 2 − y n 2 − d 2 2 + d n 2 … … 2 ( x n − 1 − x n ) x + 2 ( y n − 1 − y n ) y = x n − 1 2 − x n 2 + y n − 1 2 − y n 2 − d n − 1 2 + d n 2 \begin{cases} 2(x_1 - x_n)x + 2(y_1 - y_n)y = x_1^2 - x_n^2 + y_1^2 - y_n^2 - d_1^2 + d_n^2\\ 2(x_2 - x_n)x + 2(y_2 - y_n)y = x_2^2 - x_n^2 + y_2^2 - y_n^2 - d_2^2 + d_n^2\\ ……\\ 2(x_{n-1} - x_n)x + 2(y_{n-1} - y_n)y = x_{n-1}^2 - x_n^2 + y_{n-1}^2 - y_n^2 - d_{n-1}^2 + d_n^2\\ \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧2(x1−xn)x+2(y1−yn)y=x12−xn2+y12−yn2−d12+dn22(x2−xn)x+2(y2−yn)y=x22−xn2+y22−yn2−d22+dn2……2(xn−1−xn)x+2(yn−1−yn)y=xn−12−xn2+yn−12−yn2−dn−12+dn2
将方程式转换为 A X = b AX=b AX=b形式,则:
A = [ 2 ( x 1 − x n ) 2 ( y 1 − y n ) 2 ( x 2 − x n ) 2 ( y 2 − 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 1 2 + d n 2 x 2 2 − x n 2 + y 2 2 − y n 2 − d 2 2 + d n 2 … … x n − 1 2 − x n 2 + y n − 1 2 − y n 2 − d n − 1 2 + d n 2 ] , X = [ x y ] A = \begin{bmatrix} 2(x_1 - x_n) & 2(y_1 - y_n) \\ 2(x_2 - x_n) & 2(y_2 - y_n) \\ …&…\\ 2(x_{n-1} - x_n) & 2(y_{n-1} - y_n) \end{bmatrix},b = \begin{bmatrix} x_1^2 - x_n^2 + y_1^2 - y_n^2 - d_1^2 + d_n^2 \\ x_2^2 - x_n^2 + y_2^2 - y_n^2 - d_2^2 + d_n^2 \\ ……\\ x_{n-1}^2 - x_n^2 + y_{n-1}^2 - y_n^2 - d_{n-1}^2 + d_n^2 \end{bmatrix},X = \begin{bmatrix} x \\ y \end{bmatrix} A=⎣⎢⎢⎡2(x1−xn)2(x2−xn)…2(xn−1−xn)2(y1−yn)2(y2−yn)…2(yn−1−yn)⎦⎥⎥⎤,b=⎣⎢⎢⎡x12−xn2+y12−yn2−d12+dn2x22−xn2+y22−yn2−d22+dn2……xn−12−xn2+yn−12−yn2−dn−12+dn2⎦⎥⎥⎤,X=[xy]
通过标准最小均方差估计可以计算得出未知节点D的坐标: X ^ = ( A T A ) − 1 A T b \hat{X} = (A^TA)^{-1}A^Tb X^=(ATA)−1ATb


















