Что такое хороший способ определить значительное движение с помощью акселерометра iOS?

Сначала я начал думать, что могу использовать CoreLocation для отслеживания скорости, чтобы определить движение. Это не сработало, так как я не хочу, чтобы батарея разрядилась, а при более низких значениях скорости и показания местоположения далеки от точной. Затем я перешел к использованию акселерометра для отслеживания движения следующим образом: http://blogs.oreilly.com/iphone/2008/06/iphone-as-pedometer.html

Это работает на удивление хорошо, но это не так хорошо, как хотелось бы. Большая проблема возникает, когда вы держите телефон, глядя на него во время ходьбы. В этом случае вышеуказанный связанный код не работает. Если это в кармане или на руке, это отличный трекер движения.

Итак, со всем сказанным, существуют ли какие-либо методы для псевдошагометра с использованием акселерометра iOS (а не M7), который будет доступен для не математического wiz?

Спасибо!

Ответы

Ответ 1

Ну, люди, как правило, держат свой телефон неподвижно, когда они идут. Он не может быть идеальным, без шагомера. Вам придется довольствоваться тем, что он не обновляется, когда они держат устройство, которое, если они идут, они не должны делать многого. Вы могли бы попытаться найти средний темп, и пока блокировка бодрствования отключена (I.E они смотрят на экран), то увеличивайте счет на основе среднего темпа?

Ответ 2

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

Возможно, вы можете использовать акселерометр в качестве счетчика шагов, подсчитать шаг, который пользователь ходит, и использовать GPS с низкой точностью (или GPS с высокой точностью), чтобы обнаружить среднее расстояние шага, объединить эти два данных, вы можете приблизительно измерить расстояние от пользователя, пройденного при использовании небольшой батареи.

Когда вы обнаруживаете, что пользователь путешествует быстро, он не может ходить, тогда вы можете использовать только GPS с низкой точностью.

Ответ 3

Я рекомендую вам посмотреть сессию 307 WWDC 2013, связанную с CoreLocation.

https://developer.apple.com/wwdc/videos/

Они говорили о вещах, похожих на вашу задачу, используя деффелированные обновления.

Особенно они охватывали такие вещи, как маломощное состояние.

Краткий обзор:

  • Задайте тип активности CLActivityTypeFitness
  • Вызов startUpdatingLocations
  • Используйте метод - (void)allowDeferredLocationUpdatesUntilTraveled:(CLLocationDistance)distance timeout:(NSTimeInterval)timeout; для управления пройденным расстоянием. Насколько я понимаю, он просто просыпается после того, как определенные условия были удовлетворены, поэтому чип GPS может передать собранные местоположения непосредственно в CoreLocation, и он уведомит ваше приложение о новых местах, и вы будете обрабатывать и анализировать их, используя некоторые вычисления, чтобы отображать, сколько путешествовал пользователь расстояния, и др.

Ответ 4

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

Это потому, что есть только два способа интерпретировать данные акселерометра, оба из которых являются ошибочными:

  • Инерционная навигация
  • шагомер

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

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

Лучшее, что вы можете сделать, это улучшить общую точность, например, разрешив пользователю откалибровать шагомер. Один из способов сделать это - позволить ему пройти известное расстояние несколько раз с различной скоростью и записать прошедшее время и количество шагов для каждого прогона. Эти измерения позволят вам рассчитать длину шага и даже выполнить регулировки для разных шагов - и его просто очень простые математические модели.