Вы можете использовать значения ускорения от акселерометра для измерения скорости и расстояния. Существует действительно хорошая бумага (Implementing Positioning Algorithms Using Accelerometers), которая объясняет ошибки, которые вы получаете от акселерометра, и методы получения скорости и положения от значений ускорения.
Некоторые псевдо-код:
velocity[i] = (acceleration[i] + acceleration[i-1])/2 * interval + velocity[i-1]
distance[i] = (velocity[i] + velocity[i-1])/2 * interval + distance[i-1]
interval
время между acceleration/velocity[i]
и acceleration/velocity[i-1]
, которая связана с частотой обновления акселерометра.
Для повышения точности вам необходимо отфильтровать значения ускорения в переднем крае. Я реализовал такой алгоритм на iPhone 3GS, и он работал очень хорошо. Акселерометр позволяет измерять расстояния 30 см с погрешностью около 1 см. Я еще не тестировал большие расстояния.
Если я правильно понимаю это, вам придется отслеживать статическое ускорение от земной гравитации, так как физическая ориентация устройства может измениться. Бросать его по воздуху заставляло бы его падать, меняя «вниз». Я не уверен, правильна ли моя интерпретация, но я думаю, что единственная «калибровка», описанная в документе, предполагает постоянную ориентацию устройства. –
Правильно, этот подход предполагает, что ориентация устройства не изменяется во время движения. – brutella
@brutella не могли бы вы предоставить свой алгоритм? –