Датчики Android (движение)

Я создаю это приложение для Android для бега трусцой, которое должно измерять расстояние, пройденное пользователем от начальной точки во времени.

Меня не интересует использование опции GPS (долгота, широта), поэтому без опции GPS и с использованием только датчиков Android, как я могу рассчитать расстояние, пройденное устройством, как функцию времени?


person socksocket    schedule 03.02.2012    source источник
comment
В частности, я мало что знаю об Android, но вы можете сделать схематичный, ненадежный шагомер, используя акселерометр, а затем попытаться использовать данные, собранные с него, чтобы попытаться оценить расстояние. Или, может быть, вы могли бы что-то сделать с силой сигнала Wi-Fi (опять же, отрывочно и ненадежно). Это в значительной степени причина, по которой GPS был изобретен в первую очередь ... так почему вы боретесь именно с этим?   -  person Cody S    schedule 04.02.2012
comment
потому что я не хочу заставлять своих пользователей использовать GPS.   -  person socksocket    schedule 04.02.2012
comment
Тогда не надо. Настройте схематичный шагомер. Это будет достаточно точно для некоторых (и если вы сделаете это хорошо, возможно, для большинства), но все же будут пользователи, у которых будет странная походка или что-то в этом роде, или их будет раздражать тот факт, что вы были на 15 футов ниже. при оценке дистанции марафона. Работа с ними потребует определенного уровня точности... который может обеспечить GPS. Я понимаю, откуда вы исходите, но я предупреждаю вас, что если вы заинтересованы в каком-либо уровне точности, вы, вероятно, будете разочарованы. Ненавижу ломать его тебе.   -  person Cody S    schedule 04.02.2012


Ответы (2)


Лучше всего обнаруживать движения «встряхивания» в приложении, а затем использовать их для определения расстояния (т. е. одно встряхивание равно одному шагу, примерно 2000 шагов — это одна миля). Конечно, вы, вероятно, захотите настроить чувствительность, чтобы определить, сколько движений требуется, чтобы считаться одним шагом.

Здесь есть удобное руководство по обнаружению встряхивания: http://www.clingmarks.com/how-to-detect-shake-motion-on-android-phone/25

person Ryan Berger    schedule 03.02.2012
comment
спасибо за помощь, но вы уверены, что это мой лучший выбор? Я ищу лучшее практическое решение здесь. - person socksocket; 04.02.2012
comment
Лучшей практикой для приложений такого типа является использование GPS, поэтому все основные приложения для бега, такие как Endomondo или RunKeeper, основаны на GPS. Если вы вообще не хотите использовать GPS, то обращение с телефоном как с шагомером путем обнаружения тряски — это действительно ваш единственный жизнеспособный вариант. - person Ryan Berger; 04.02.2012

То, о чем вы здесь говорите, по сути, является точными расчетами, то есть использованием исходной позиции и известных изменений для оценки текущая позиция. Теоретически, если у вас есть точные измерения изменения скорости, вы можете понять, где вы в конечном итоге. Есть три проблемы:

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

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

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

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

person Caleb    schedule 03.02.2012