Определение координат робота по расстояниям до маяков, измеренным с одинаковым отклонением

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск

Постановка задачи

Имеем в плоскости 3 маяка с известными координатами (x1,y1), (x2,y2), (x3,y3) и замеренные расстояния до них (z1,z2,z3) известные с точностью до неизвестного одинакового отклонения (z). Требуется определить наиболее вероятные координаты робота (x,y) и соответственно одинаковое отклонение (z), зависящее от смещения часов робота относительно часов маяков.


Источник задачи - система локализации на базе (ультра)звуковых маяков, которые могут быть рассинхронизированы по часам с автономным роботом.

Решение численным методом Ньютона

Решенее предложил mandigit

Запишем уравнение для расстояния ri от i-го маяка до робота:

zi=sqrt((xi-x)^2+(yi-y)^2)+z

Продифференцировав это равенство получим:

dzi = ((xi-x)dx+(yi-y)dy)/sqrt((xi-x)^2+(yi-y)^2)+dz = ((xi-x)dx+(yi-y)dy)/(zi-z)+dz, умножив на (zi-z), получим:

(zi-z)dzi = (xi-x)dx + (yi-y)dy + (zi-z)dz

При известных dzi три таких равенства представляют собой систему линейных уравнений относительно неизвестных dx,dy,dz.

Примем d0=sqrt(dx^2+dy^2+dz^2), далее имея все эти выкладки запускаем следующий итерационный алгоритм.

  1. Инициализация x(0)=(x1+x2+x3)/3, y(0)=(y1+y2+y3)/3, z(0)=0;
  2. Шаг алгоритма №n (n>=1):
    1. Вычисляем zi' исходя из координат x(n-1), y(n-1), z(n-1);
    2. Находим их отклонение dzi=zi'-zi от реально измеренных zi;
    3. Решаем систему линейных уравнений и находим dx,dy,dz, добавляем их к x(n-1),y(n-1),z(n-1) и получаем x(n),y(n),z(n);
    4. Если d0 меньше некоторого epsilon, тогда останавливаемся и считаем найденные x(n),y(n),z(n) достаточно хорошим решением, которое невозможно уже значительно улучшить без серьезных времязатрат.

ВНИМАНИЕ! В решении есть проблема - непонятно почему для сходимости dz надо не добавлять, а отнимать от z(n-1).

Решение аналитическим методом

Решенее предложил boez

Тут будет решение :)