GPS坐标的多点定位 [英] Multilateration of GPS Coordinates

查看:247
本文介绍了GPS坐标的多点定位的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 N GPS坐标ñ距离,给我希望确定一个未知的位置。

I have N GPS coordinates with N distances given to an unknown position which I wish to determine.

我的第一个方法是使用只有三个点,三边测量,严格按描述<一个href="http://stackoverflow.com/questions/2813615/trilateration-using-3-latitude-and-longitude-points-and-3-distances%5d">here.这种做法已经相当准确的(最好的错误〜5公里),但我想,以改善这一点,并增加了耐用性。 由于给定的距离都不是很准确的,首先,我想过用多次测量和多点。 然而,事实证明,这种做法是远远不够准确(最好误差〜100公里),尽管我提供了超过3分/距离(最多6个测试),现在我要问,如果有人有一个想法是什么,我可以有做了错事。

My first approach was to use just three points and trilateration, exactly as described here. This approach was already quite accurate (best error~5km), but I would like to improve this and increase the robustness. Because the given distances are not very accurate to begin with, I thought about using multiple measurements and multilateration. However, it turned out that this approach is by far less accurate (best error~100km) although I provide more than 3 points/distances (tested with up to 6) and now I am asking, if someone has an idea what I could have done wrong.

总之,我的做法的多点如下:

In short, my approach for multilateration is as follows:

  1. 在转换所有坐标到ECEF
  2. 在构建矩阵中Eq.7在维基描述
  3. 使用SVD找到最小化
  4. 随着溶液仅达按比例的,我使用的求根方法来确定归一化,使得坐标转换回LLA结果为0的高度(我的初始假设是,所有的坐标在零高度)
  5. 在转换回LLA
  1. Convert all coordinates into ECEF
  2. Build a matrix as described in Eq.7 at wikipedia
  3. Use SVD to find the minimizer
  4. As the solution is only up to scale, I use a root-finding approach to determine a normalization so that the coordinates converted back into LLA result in a height of 0 (my initial assumption is that all coordinates are at zero height)
  5. Convert back into LLA

LLA / ECEF转换为双核对无误。步骤2和3我已经与欧几里得坐标(和详细的距离)检查,并正确显示。我来到了第4步由我自己,我不知道这是否是一个好办法可言,所以建议是欢迎的。

LLA/ECEF conversion is double-checked and correct. Step 2 and 3 I've checked with euclidean coordinates (and exact distances) and appear correct. I came up with step 4 by myself, I have no clue if this is a good approach at all, so suggestions are welcome.

+++更新

我已经把样品code在Python来说明这个问题 一些地面实况。三边变得亲如400米,而 多点的范围在10-130km这里。 由于篇幅的,我已经把它在 ideone

I've put together sample code in python to illustrate the problem with some ground truth. Trilateration gets as close as 400m, while Multilateration ranges at 10-130km here. Because of length, I've put it at ideone

推荐答案

最后,我理解了它自己 - 或者至少显著提高精度

Eventually, I figured it out myself - or at least improve the accuracy significantly.

在维基百科(Eq.7)中描述的方法是显然不是很适合于这种应用,但在这种情况下,它已经是一个容易得多。

The approach described at wikipedia (Eq.7) is apparently not very suited for this application, but in this case it is already a lot easier.

考虑式。 6维基百科,我们可以把它简化了很多: R_0 可以猜测为地球半径,为ECEF坐标系的原点在于地球的中心。因此,没有必要转移一切使一个点的来源,我们可以使用所有 N 公式。

Considering Eq. 6 from wikipedia, we can simplify it a lot: R_0 can be guessed as the earth radius, as the origin of ECEF coordinates lies in the center of earth. Therefore, there is no need to shift everything to make one Point the origin and we can use all N equations.

在Python中,与 P ECEF坐标的数组和 dists中的距离这些点之前,都到

In python, with P an array of ECEF coordinates and dists the distances to these points, it all boils down to

R = 6378137 # Earth radius in meters
A = []
for m in range(0,len(P)):
    x = P[m][0]
    y = P[m][1]
    z = P[m][2]
    Am = -2*x
    Bm = -2*y
    Cm = -2*z
    Dm = R*R + (pow(x,2)+pow(y,2)+pow(z,2)) - pow(dists[m],2)
    A += [[Am,Bm,Cm,Dm]]
# Solve using SVD
A = numpy.array(A)
(_,_,v) = numpy.linalg.svd(A)
# Get the minimizer
w = v[3,:]
w /= w[3] # Resulting position in ECEF

通过这种方式,我形容的步骤4 的不再是必要的。事实上,它甚至使得该解决方案更差。

With this approach, what I described as Step 4 is no longer necessary. In fact, it even makes the solution worse.

现在,准确性2公里,再275米的范围 - 在大多数情况下比最佳三边拥有4.64亿的误差更好

Now, accuracy ranges between 2km and 275m -- in most cases better than the "optimal" trilateration with an error of 464m.

这篇关于GPS坐标的多点定位的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆