3D трилатерация с использованием заданных расстояний неизвестных фиксированных точек - PullRequest
1 голос
/ 11 февраля 2011

Я новичок в этом форуме и не являюсь носителем английского языка, поэтому, пожалуйста, будьте любезны!:)

Вот проблема, с которой я сталкиваюсь в данный момент: я хочу вычислить (приблизительные) относительные координаты еще неизвестных точек в трехмерном евклидовом пространстве на основе набора заданных расстояний между двумя точками,В моем первом подходе я хочу игнорировать возможные множественные решения, просто выбирая первое случайным образом.

Например: данный набор расстояний: (Я думаю, что это создает пирамиду с прямоугольным треугольником какбаза)

P1-P2-расстояние

  • 1-2-30
  • 2-3-40
  • 1-3-50
  • 1-4-60
  • 2-4-60
  • 3-4-60

Step1: Теперь, как рассчитать относительные координаты для этих точек?
Я понял, что первая точка достигает 0,0,0, а вторая - 30,0,0.
После этого третьи точки могут бытьрассчитывается путем нахождения пересечения 2 окружностей из точек 1 и 2 с их расстояниями до точки 3 (50 и 40 соответственно).Как мне сделать это математически?(хотя я взял эти простые числа для легкого представления ситуации в моем уме).Кроме того, я не знаю, как получить правильный ответ математически, третья точка находится в 30,40,0 (или 30,0,40, но я буду игнорировать это).
Но получить четвертую точку нетак просто, как это.Я думал, что мне нужно использовать 3 сферы для вычисления пересечения, чтобы получить точку, но как мне это сделать?

Шаг 2: После того, как я понял, как рассчитать этот "простой" примерЯ хочу использовать больше неизвестных точек ... Для каждой точки есть как минимум 1 заданное расстояние до другой точки, чтобы «связать» ее с другими.Если координаты не могут быть рассчитаны из-за их степеней свободы, я хочу игнорировать все возможности, кроме одной, которую я выбираю случайно, но в отношении известных расстояний.

Шаг 3: Теперь окончательный вариантЭтап должен быть следующим: каждое измеренное расстояние немного некорректно из-за реальной жизненной ситуации.Таким образом, если для данной пары точек имеется более 1 расстояния, расстояния усредняются.Но из-за неточных расстояний могут возникнуть трудности при определении точного (относительного) местоположения точки.Поэтому я хочу усреднить различные возможные местоположения до «оптимального».

Можете ли вы помочь мне пройти мою задачу шаг за шагом?

Ответы [ 3 ]

1 голос
/ 14 февраля 2011

Сначала я предположу, что вы знаете расстояния между всеми парами точек.

Как вы говорите, вы можете выбрать одну точку (A) в качестве начала координат, ориентируя вторую точку (B)) вдоль оси x и поместите третью точку (C) вдоль плоскости xy.Вы можете решить для координат C следующим образом:

given: distances ab, ac, bc
assume
A = (0,0)
B = (ab,0)
C = (x,y)  <- solve for x and y, where:
  ac^2 = (A-C)^2 = (0-x)^2 + (0-y)^2 = x^2 + y^2
  bc^2 = (B-C)^2 = (ab-x)^2 + (0-y)^2 = ab^2 - 2*ab*x + x^2 + y^2

-> bc^2 - ac^2 = ab^2 - 2*ab*x
-> x = (ab^2 + ac^2 - bc^2)/2*ab
-> y = +/- sqrt(ac^2 - x^2)

Чтобы это работало правильно, вам следует избегать случаев, когда точки {A,B,C} находятся на прямой линии или близко к ней.

Решение для дополнительных точек в трехмерном пространстве аналогично - вы можете расширить формулу Пифагора для расстояния, отменить квадратичные элементы и решить полученную линейную систему.Тем не менее, это не поможет вам напрямую с вашими шагами 2 и 3 ...

К сожалению, я не знаю и точного решения для шагов 2 и 3.Ваша общая проблема обычно будет чрезмерно ограниченной (из-за конфликтующих шумных расстояний) и недостаточной (из-за отсутствующих расстояний).

Вы можете попробовать итеративный решатель: начните со случайного размещения всех ваших точекСравните текущие расстояния с заданными и используйте их, чтобы скорректировать свои очки таким образом, чтобы улучшить соответствие.Это техника оптимизации, поэтому я бы посмотрел книги по численной оптимизации.

1 голос
/ 11 февраля 2011

Вам необходимо использовать тригонометрию, в частности, «правило косинуса».Это даст вам углы треугольника, что позволит вам решить 3-ю и 4-ю точки.

Правила гласят, что

c^2 = a^2 + b^2 - 2abCosC

, где a, b и c - длинысторон, а C - это угол, противоположный стороне c.

В вашем случае мы хотим угол между 1-2 и 1-3 - угол между двумя линиями, пересекающимися в (0,0,0).Это будет 90 градусов, потому что у вас есть треугольник 3-4-5, но давайте докажем:

50^2 = 30^2 + 40^2 - 2*30*40*CosC
CosC = 0
C = 90 degrees

Это угол между линиями (0,0,0) - (30,0,0) и (0,0,0) - точка 3;Протяните вдоль этой линии длину стороны 1-3 (которая равна 50), и вы получите свою вторую точку (0,50,0).

Найти вашу 4-ю точку немного сложнее.Самый простой алгоритм, который я могу придумать, - это сначала найти (x, y) компонент точки, а оттуда компонент z является прямым с использованием Пифагора.

Учтите, что на плоскости (x, y, 0) есть точка, которая находится «под» вашей точкой 4 - назовите эту точку 5. Теперь вы можете создать 3 прямоугольных треугольника 1-5-4, 2-5-4 и 3-5-4.

Вы знаете длины 1-4, 2-4 и 3-4.Поскольку это прямоугольные треугольники, отношение 1-4 : 2-4 : 3-4 равно 1-5 : 2-5 : 3-5.Найдите точку 5, используя тригонометрические методы - «правило синуса» даст вам углы между 1-2 и 1-4, 2-1 и 2-4 и т. Д.

«Правило синуса» утверждает, что (в прямоугольном треугольнике)

a / SinA = b / SinB = c / SinC

Так что для треугольника 1-2-4, хотя вы не знаете длины 1-4 и 2-4, вы знаете соотношение 1-4 : 2-4.Точно так же вы знаете отношения 2-4 : 3-4 и 1-4 : 3-4 в других треугольниках.

Я оставлю вас, чтобы решить пункт 4. После того, как вы получите эту точку, вы можете легко решить компонент z из 4 с помощью Пифагора'- у вас будут стороны 1-4, 1-5, а длина 4-5 будет компонентом z.

0 голосов
/ 13 февраля 2011

Если вы знаете расстояние между узлами (фиксированная часть системы) и расстояние до тега (мобильный), вы можете использовать трилатерацию, чтобы найти положение x, y.

Я сделал это с помощью радиомодулей Nanotron, которые имеют возможность ранжирования.

Привет

...