三邊定位基本原理
三邊定位算法的基本原理如下圖所示,假設我們要定位圖中電子標簽(紅色天線),圖中各基站的位置為已知。在計算標簽位置之前,我們先通過上一章介紹的測距方法,得到各基站到標簽的距離\(d_i\)。根據測距結果,我們以基站的位置為圓心,做半徑為\(d_i\)的圓。通過搜索空間中多個基站處繪制圓弧的焦點,我們可以最終求出標簽的位置。下圖展示了已知基站1,2,3的坐標以及標簽到基站的距離,通過三圓求交的方法得到標簽的位置。
三邊定位搜索圓弧交點的過程實際上等價於求解方程組:假設三個基站的坐標已知,分別記為\((x_1,y_1), (x_2,y_2), (x_3,y_3)\)。待定位標簽的坐標記為(x,y),到三個網關的距離分別為\(d_1\), \(d_2\), \(d_3\)。則我們可以聯立方程組:
通過求解上述方程組,可以得到標簽坐標。上述三邊定位算法可以很容易地推廣到三維場景。在進行三維定位時,我們只需要在測量出基站到節點的距離后,在每個基站處用圓球去建模,即以基站坐標和球心做半徑為d的圓球,標簽一定位於球面的某個點上。因此我們通過求多個球面的唯一交點,即可確定標簽在三維空間中的位置。
三邊定位的在實際系統中實現這一算法仍然面臨許多困難和挑戰:
-
考慮到測距誤差的存在,以不同基站為中心繪制的圓弧或球面可能不交於一點。實際上,由於測距算法只能得到實際距離在一定誤差范圍內的結果,給定一個基站坐標,我們通常只能假設標簽在以基站為中心的、具有一定寬度的圓環范圍內。這樣一來,如何設計坐標計算方法以最小化定位誤差就成了實際系統部署時必須考慮的問題。
-
在實際環境中,基站的數量可能多於三個,當基站數量多於坐標維度時,如何選擇最優基站也成為在定位時必須要解決的問題。
在實現時,為了解決測距誤差對定位的影響,我們通常采用最優化二乘法的方法求解目標標簽的坐標。不妨假設已知的基站坐標為\(P_{ai} (i=1,2,3...N)\),N為基站數量。待求解的目標標簽坐標為\(P_t\)。那么我們可以計算理論上標簽到各個基站的距離\(d_i\)。
同時我們知道測量得到的標簽到各個基站的距離\(d_i\),這樣我們就可以根據已有的信息,把理論值和測量值最接近的位置P作為最后的定位結果:
下面我們展示一種解上述最優化方程的解法示例。先回憶一下最朴素的坐標求解方法,由於標簽位置\((x,y)\)在基站位置\((x_i,y_i)\)的定位圓的交點上,標簽到各基站測量對應的距離分別為\(d_i\)。最朴素的做法是解下面的方程組(一共n個基站)直接得到標簽坐標:
但由於測量誤差的存在,基於基站的定位圓並不會剛好交於一點。因此,在計算時,我們需要對其進行近似求解。常見方法有加權法、最小二乘法、質心法等。這里我們使用最小二乘法進行計算,在上式的基礎上,我們將前n-1個方程減去第n個方程,得到線性化方程:\(AX=b\)。其中:
則,利用最小二乘法可以解得:
上述最小二乘解法的MATLAB實現代碼如下
nodeNumber = 3; %定位信標的數量
nodeList = [0, 0; 2, 0; 1, 1.732]; %三個定位信標的坐標
disList = [1.155, 1.155, 1.155]; %定位目標點到三個定位信標的距離
A = [];
B = [];
xn = nodeList(nodeNumber, 1);
yn = nodeList(nodeNumber, 2);
dn = disList(nodeNumber);
for i=1:nodeNumber-1
xi = nodeList(i, 1);
yi = nodeList(i, 2);
di = disList(i);
A = [A; 2 * (xi - xn), 2 * (yi - yn)];
B = [B; xi * xi + yi *yi - xn * xn - yn * yn + dn * dn - di * di];
end %計算線性方程組的參數A和B
X = inv(A'*A)*A'*B %根據最小二乘法公式計算結果X
上述代碼中,nodeList表示基站的位置坐標,nodeNumber表示基站的數量,disList表示標簽到各基站的距離。分別求得A和B以后,根據
即可求得定位點的坐標X。
在實際應用中,我們需要根據實際情況選擇更合適的方法,代替最小二乘法實現位置的近似計算,實現更高的定位精度。對於某些近似方法,可能無法實現對方程的直接求解,或是直接求解方程很困難,此時可以使用數值方法進行近似求解,常見的方法有梯度下降法等。