Добраться до путевой точки с помощью GPS/компаса/акселерометра - Алгоритм?

В настоящее время у меня есть робот с некоторыми датчиками, такими как GPS, акселерометр и компас. То, что я хотел бы сделать, это чтобы мой робот достиг GPS-координаты, которую я ввожу. Я задавался вопросом, существует ли уже какой-либо алгоритм для этого. Мне не нужен исходный код, в котором нет никакого смысла, мне нужна только процедура, которой должен следовать мой робот, чтобы я мог понять, что я делаю... На данный момент давайте представим, что я может получать доступ к координатам GPS каждый раз, поэтому фильтр Калмана не нужен. Я знаю, что это нереально, но я хотел бы запрограммировать это шаг за шагом, а Калман — это следующий шаг.

Если у кого есть идея...


person Community    schedule 14.05.2011    source источник


Ответы (4)


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

bearing=mod(atan2(sin(lon2-lon1)*cos(lat2),(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)),2*pi)

Примечание. Углы, вероятно, должны быть в радианах, в зависимости от вашего пакета математических вычислений.

Но для небольших расстояний вы можете просто рассчитать, сколько метров в одном градусе широты и долготы в вашем местоположении, а затем рассматривать их как плоские координаты X, Y.

Для типичных 45 градусов широты это около 111,132 км/градус широты, 78,847 км/градус долготы.

person Martin Beckett    schedule 28.06.2011

1) направьте своего робота к месту назначения.

2) Двигайтесь вперед, пока расстояние между вами и пунктом назначения не увеличится, после чего вы должны вернуться к 1)

3) НО... если вы находитесь достаточно близко (под порогом), считайте, что вы прибыли в пункт назначения.

person Vincent Cantin    schedule 14.05.2011
comment
Привет, спасибо за ваш ответ. Мне было интересно, как рассчитать азимут по GPS-координатам роботов и их пункту назначения. Я думаю, что есть некоторые расчеты с долготой и широтой, но я не могу найти их в Google. - person ; 14.05.2011

Вы можете использовать класс Location. Эта функция BearingTo вычисляет пеленг, по которому вы должны следовать, чтобы добраться до другого места.

person Zelig    schedule 28.06.2011

Существует очень хорошая страница, объясняющая формулы между вычислением расстояния, пеленга и т. д. на основе GPS, которые я использовал:

http://www.movable-type.co.uk/scripts/latlong.html

В настоящее время я пытаюсь выполнить эти расчеты самостоятельно и только что обнаружил, что в ответе Мартина Бекета есть ошибка. Если вы сравните информацию с этой веб-страницы, вы увидите, что часть в середине:

(lat1)*sin(lat2)

на самом деле должно быть:

cos(lat1)*sin(lat2)

Оставил бы комментарий, но репутации пока нет...

person Dainius    schedule 08.05.2017