Уважаемые посетители сайта! Вы на сайте компании First Line Software. Мы просто обновили наш логотип.

Понятно, спасибо!
Одной из важных задач, актуальных для носимых устройств, является подсчет числа шагов, сделанных пользователем. Эти данные могут быть использованы для расчета числа затраченных пользователем калорий, пройденного пути, навигации внутри помещений (весьма перспективное и востребованное направление), и прочих задач.

Рассмотрим возможные способы решения более подробно.  MEMS-сенсоры для шагомеров.

Еще в Древнем Риме для измерения расстояний использовался прибор, изобретенный Марком Витрувием. Этот прибор представлял собой тележку, к оси которой была подсоединена система зубчатых колес, через каждую милю в коробку падал камень, по числу которых и определялся пройденный путь. Современные гаджеты не имеют такого колеса, так что измерять пройденный путь и число шагов они могут лишь косвенно. Единственный способ сделать это — использование данных MEMS (Microelectromechanical systems) датчиков, гироскопов или акселерометров. Методы различных производителей имеют свои закрытые know how, но общий принцип остается неизменным: расчет осуществляется благодаря колебаниям устройства при ходьбе. Рассмотрим один из способов решения этой задачи на примере обработки данных датчика LIS331DLH компании STMicroelectronics.

Исходные данные
Датчик LIS331DLH представляет собой 3х-осевой акселерометр, позволяющий получать данные по 3м осям (x, y и z). Для примера рассмотрим график данных, получаемых с оси Х акселерометра, при ходьбе пользователя:

Снимок-экрана-2014-02-11-в-15.36.41-1024x219

Как можно видеть, показания значений вполне четко соответствуют шагам пользователя во время движения. К сожалению, сами датчики конструктивно неидеальны, и видна явная «зашумленность» значений, проявляющихся в достаточно резких пиках поверх графика. Это необходимо учитывать при построении алгоритма. Более того, собственный шум акселерометра присущ всем моделям (у некоторых больше, у некоторых меньше), для примера можно привести график устройства, неподвижно лежащего на столе:

Снимок-экрана-2014-02-11-в-15.56.23-copy

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

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

Обработка результатов
В качестве одного из варианта обработки, можно рассмотреть простой но эффективный метод — усреднение данных от всех трех осей. Как показывает практика, такой способ вполне применим, что хорошо видно на графике:

Снимок-экрана-2014-02-11-в-15.46.45-copy-1024x229

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

В качестве еще одного примера реализации можно привести другой метод — вычисление угла между векторами ускорения текущего и предыдущего значений. Т.к. данные с акселерометра приходят в равные моменты времени, по углу между двумя значениями можно судить об угловой скорости наклона устройства. Угол между векторами расчитывается по известной формуле:
Снимок-экрана-2014-02-11-в-16.12.53

Очевидно, что неподвижному устройству (разница углов = 0) соответствует значение 1 на оси графика, чем больше отклонение, тем больше изменение угла. Эти данные неплохо кореллируют с шагами пользователя, как можно видеть на следующем графике:

Снимок-экрана-2014-02-11-в-16.08.57-1024x242

Однако следует заметить большую чувствительность алгоритма к шумам, что видно в некоей «раздробленности» пиков.

Возможные модификации алгоритмов
Очевидно, каждый алгоритм не является идеальным. На качество распознавания числа шагов влияет большое число как известных (например, шум акселерометра), так и трудно предсказуемых параметров. Даже место расположения носимого устройства (на руке, в кармане одежды, брюк и пр) сильно влияет на получаемые результаты. Для примера можно сказать, что все из протестированных программ-шагомеров для смартфонов iOS и Android дали различные показатели, аналогичная ситуация была и со специализированными устройствами (Nike, Fitbit и др).

Существует несколько способов улучшения получаемых данных:

  • Усреднение данных. Самый простой способ, позволяющий избавиться от самых грубых ошибок.
  • Использование цифровых фильтров. Большинство шумовых факторов представляют собой высокочастотный шум, и могут быть отсечены с помощью фильтра низких частот (ФНЧ) с определенной частотой среза (для шагов вполне достаточным является частота среза около 10 Герц). Программная реализация фильтров первого или второго порядка является достаточно несложной и легко выполнимой даже на носимых устройствах с небольшим энергопотреблением.
  • Использование комплексных инерциальных систем (Inertial Measurement Unit)‎. Возможно использование систем с большим количеством данных, что позволит определять параметры более точно. Для примера, возможно комбинировать данные с акселерометра и компаса, или акселерометра и гироскопа. Это позволит минимизировать число «ложных срабатываний». Более того, используя дополнительные данные (например от GPS) можно вполне интеллектуально корректировать параметры алгоритма, например рассчитать примерную длину шага пользователя, и тем самым косвенно определить даже его рост.

Что касается «железа», то для улучшения качества работы могут использоваться датчики большей точности (например, хорошие результаты дают MPU-6000, специально созданные для смартфонов и носимых устройств), но к сожалению, для устройств уже выпущенных на рынок, изменение их аппаратные характеристики уже невозможно.

Интересно отметить решение от Apple — использование отдельного motion-сопроцессора Apple M7. Все алгоритмы, подобные вышеописанным, имеют один недостаток: они требуют постоянной работы приложения для подсчета данных, что при работе на смартфоне негативно сказывается как на расходе батареи, так и на общей загрузке ОС. Поэтому инженеры Apple пошли по вполне логичному пути — вынесению подобных расчетов в отдельный ARM Cortex-M3-совместимый сопроцессор, который может самостоятельно вычислять, хранить и обрабатывать данные, выдавая их приложению по необходимому запросу. Данные этого процессора доступны для разработчиков iOS с помощью Core Motion Framework. Пользователю доступны такие функции, как Motion Activity (определение вида движения — ходьба, бег, движение в автомобиле) и Step Counter (подсчет числа шагов), причем пользователь может не только видеть текущие данные, но и запросить данные за определенные периоды времени.

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

Дмитрий Елисеев

Request documents

Leave us an email and we'll send instructions

ХОТИТЕ УЗНАТЬ БОЛЬШЕ?

Заполните форму, чтобы связаться с нами

Владимир Литошенко
Старший вице-президент