Возможно, вам придется пойти с «мертвым расчетом».По сути, мертвый расчет - это метод навигации, который использует подтвержденное начальное местоположение плюс точную скорость и время для расчета нового местоположения.Имейте в виду, что скорость сама по себе является комбинацией курса и скорости и что курс должен быть истинным курсом.В самолете направление компаса должно сочетаться со скоростью и направлением ветра, чтобы получить истинное направление.Я не думаю, что вы должны учитывать дрейф в метро, но вам придется учитывать различную ориентацию устройства, когда пользователь перемещается или использует само устройство.Кроме того, только потому, что заголовок обычно является компасным, не означает, что он должен быть.Вы можете выполнить работу, используя только акселерометры и таймер.
Правильное использование подсчета мертвых предметов также требует частых «перезагрузок» в известные местоположения по мере их достижения, чтобы ошибки не могли появитьсяслишком плохоДля этого приложения, я бы сказал, что обнаружение кривой и остановки может использоваться как сброс.Вы можете получить ложные срабатывания для «сервисных» остановок, которые слишком близки к реальным остановкам, но они могут быть достаточно редкими, чтобы их игнорировать.На самом деле, если это не была остановка на выходе, это может не иметь значения, потому что вы все еще можете быть достаточно точными для предупреждения о следующей остановке, и если это была остановка на выходе, это не будет иметь значения, потому что поездка окончена.
Подводя итог: вы должны быть уверены, что у вас есть хорошая начальная отправная точка;вам нужно компенсировать переориентацию устройства, чтобы получить истинный курс;вам нужно знать среднюю скорость между изменениями курса и временем нахождения на курсе для расчета расстояния на курсе.Вы можете улучшить общую точность путем сброса на известных ориентирах.
Редактировать: я не знаю, приближает ли это вас к ответу, но Крис Страттон поднял интересный вопрос о суммировании векторов акселерометра.Можно ли достаточно точно отслеживать ориентацию устройства, чтобы иметь надежный, независимый от ориентации вектор гравитации?Можете ли вы сохранить это из вашей векторной суммы?Может ли это обеспечить полезное ускорение вдоль полезного независимого от ориентации вектора?Если это так, то отслеживание продолжительности ускорения даст вам среднюю скорость для этой продолжительности и окончательную скорость для конца ускорения.При отсутствии ускорения скорость останется постоянной.Объединение всего этого может накапливать неточность на вершине неточности до точки бесполезности.