2008-10-13 8 views
19

Моя цель - распознать простые жесты из акселерометров, установленных на солнце. Жест может быть таким же простым, как вращение устройства или перемещение устройства в нескольких разных движениях. В настоящее время устройство имеет только акселерометры, но мы рассматриваем возможность добавления гироскопов, если это облегчит/уточнит.Как распознать жест с помощью акселерометров

У кого-нибудь есть рекомендации по тому, как это сделать? Любые доступные библиотеки в Java? Примеры проектов, которые вы рекомендуете проверить? Документы, которые вы рекомендуете?

Солнечное пятно - это платформа Java, которая поможет вам быстро создавать прототипы систем. Он запрограммирован с использованием Java и может передавать команды обратно на базовую станцию, подключенную к компьютеру. Если мне нужно объяснить, как работает оборудование, оставьте комментарий.

ответ

21

Акселерометры будут регистрировать постоянное ускорение из-за силы тяжести, а также любое ускорение, которое устройство подвергается пользователю, плюс шум.

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

Осознайте, что, когда устройство не ускоряется пользователем, единственное усилие происходит из-за силы тяжести, и поэтому вы можете deduce its attitude в космосе. Более того, когда общее ускорение сильно варьируется от 1 г, это должно быть связано с ускорением пользователем устройства; вычитая последнюю известную оценку силы тяжести, вы можете примерно оценить, в каком направлении и на сколько пользователь ускоряет устройство, и поэтому получать данные, которые вы можете начать сопоставлять со списком известных жестов.

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

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

+0

Спасибо, что это было действительно полезно. – smaclell 2008-10-13 21:20:15

+0

Действительно ли они регистрируют постоянное ускорение из-за силы тяжести? Я имею в виду логически, что они должны, но это просто кажется интуитивным :-) – 2008-10-13 23:51:06

+2

Да, они это делают. Подумайте о них как о массах на пружинах, причем «ускорение» сообщается на самом деле о количестве растяжения/сжатия; то это довольно интуитивно. – moonshadow 2008-10-14 07:45:54

1

Добавление точки Moonshadow в о том, чтобы сбросить базовый уровень для гравитации и вращения ...

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

5

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

Посмотрите на скрытые марковские модели. Это, по-видимому, самый популярный подход, но использование их не является тривиальным. Обычно выполняется шаг предварительной обработки. Сначала сделайте STFT и скопируйте результирующий вектор в словарь, а затем загрузите его в HMM. Посмотрите на jahmm в коде google для java lib.

7

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

http://www.wiigee.org/

Предназначенный для использования с Wiimote, wiigee является реализация на основе с открытым исходным кодом Java для сопоставления с шаблоном основанный на показаниях акселерометра. Это достигается с помощью Скрытые марковские модели [1].

Это, по-видимому используется для большого эффекта от компании, Thorn Technologies, и они уже упоминали их опыт здесь: http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition/

В качестве альтернативы можно рассмотреть FastDTW (https://code.google.com/p/fastdtw/). Он менее точен, чем обычный DTW [2], но также и в плане вычислительных затрат, что немаловажно, когда речь заходит о встроенных системах или мобильных устройствах.

[1] https://en.wikipedia.org/wiki/Hidden_Markov_model
[2] https://en.wikipedia.org/wiki/Dynamic_time_warping

EDIT: OP упомянул в одном из комментариев, что он завершил свой проект, с 90% точностью в поле и суб-миллисекунды вычислительного времени , используя вариант $1 Recognizer. Он также упоминает, что ротация не была критерием в его проекте.