Как посчитать количество шагов с помощью акселерометра - PullRequest
4 голосов
/ 23 января 2010

Я хочу знать, как рассчитать шаги, сделанные с помощью акселерометра. На самом деле я рассчитываю ускорение и использую этот код для подсчета шага

length = sqrt(x * x + y * y + z * z);
if(length>=2){
   stepcount+=1;
}

где длина рассчитывает ускорение с использованием acceleration.x, acceleration.y, acceleration.z Но моя главная проблема при запуске приложения - количество шагов дает правильное значение шага, но со временем его значение становится неправильным.

Ответы [ 2 ]

5 голосов
/ 23 января 2010

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

Во-первых, вы должны убедиться, что в конечном итоге вы делаете выборки акселерометра достаточно часто, чтобы не пропустить шаг. Затем вам нужно убедиться, что вы правильно угадываете, каким должен быть ваш порог.

Это потребует много проб и ошибок.

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

Но, тем не менее, это никогда не будет точным. Я думаю, что единственный способ точно измерить шаги - с помощью датчика каблука в обуви.

2 голосов
/ 23 января 2010

Редактировать : Кажется, я неправильно понял проблему. См. Всезнающий ответ, который является более подходящим.


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

  • Установите расстояние (скаляр) и скорость (вектор) на 0, чтобы начать с.
  • В каждый временной интервал добавляйте текущий вектор ускорения к вектору скорости, чтобы вычислить обновленный вектор скорости.
  • На каждом временном интервале добавляйте величину вектора скорости к расстоянию, чтобы накапливать пройденное расстояние.
  • Если эти интервалы не являются интервалами единица в любой системе координат времени, которую вы используете, то масштабируйте векторы ускорения и скорости соответствующим образом. Например, если ускорение выражено в м / с ^ 2, а интервал выборки составляет 100 мс, то масштабируйте вектор ускорения на 0,1, прежде чем добавить его к вектору скорости. Аналогично при накоплении скорости на расстоянии.

Например, предположим, что вы немного ускоряетесь, а затем движетесь с постоянной скоростью, вектор ускорения будет равен 0. Однако, поскольку некоторая скорость возросла, пройденное расстояние должно постоянно увеличиваться.

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

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

...