Вы можете использовать значения ускорения от акселерометра для измерения скорости и расстояния.Есть действительно хорошая статья ( Реализация алгоритмов позиционирования с использованием акселерометров ), в которой объясняются ошибки, которые вы получаете от акселерометра, и методы получения скорости и положения из значений ускорения.
Некоторый псевдокод:
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 см.Я еще не тестировал большие расстояния.