Pregunta

Mi objetivo es reconocer gestos simples de acelerómetros montados en una mancha solar. Un gesto podría ser tan simple como rotar el dispositivo o mover el dispositivo con diferentes movimientos. Actualmente, el dispositivo solo tiene acelerómetros, pero estamos considerando agregar giroscopios si fuera más fácil / más preciso.

¿Alguien tiene recomendaciones sobre cómo hacer esto? ¿Alguna biblioteca disponible en Java? ¿Proyectos de muestra que recomiendas que revise? ¿Papeles que recomiendas?

The Sun Spot es una plataforma Java para ayudarlo a crear prototipos rápidos de sistemas. Se programa utilizando Java y puede transmitir comandos a una estación base conectada a una computadora. Si necesito explicar cómo funciona más el hardware, deje un comentario.

¿Fue útil?

Solución

Los acelerómetros registrarán una aceleración constante debido a la gravedad, más cualquier aceleración a la que el usuario esté sujeto, más el ruido.

Deberá filtrar las muestras con paso bajo para eliminar el ruido irrelevante que pueda. Lo peor del ruido generalmente será una frecuencia más alta que cualquier posible aceleración inducida por el hombre.

Tenga en cuenta que cuando el usuario no acelera el dispositivo, la única fuerza se debe a la gravedad y, por lo tanto, puede deduce su actitud en el espacio. Además, cuando la aceleración total varía mucho de 1 g, debe deberse a que el usuario acelera el dispositivo; Al restar la última estimación de gravedad conocida, puede estimar aproximadamente en qué dirección y en qué medida el usuario está acelerando el dispositivo, y así obtener datos que puede comenzar a comparar con una lista de gestos conocidos.

Con un único acelerómetro de tres ejes puede detectar el cabeceo y balanceo actuales, y también la aceleración del dispositivo en línea recta. La aceleración integrada menos la gravedad le dará una estimación de la velocidad actual, pero la estimación se alejará rápidamente de la realidad debido al ruido; Tendrá que hacer suposiciones sobre el comportamiento del usuario antes / entre / durante los gestos, y guiarlos a través de su interfaz de usuario, para proporcionar puntos donde el dispositivo no se está acelerando y puede restablecer sus estimaciones y estimar de manera confiable la dirección de la gravedad. Es poco probable que la integración de nuevo para encontrar una posición proporcione resultados utilizables durante un período de tiempo útil.

Si tiene dos acelerómetros de tres ejes a cierta distancia, o uno y algunos giroscopios, también puede detectar la rotación del dispositivo (comparando los vectores de aceleración o directamente de los giroscopios); La integración del momento angular durante un par de segundos le dará una estimación del desvío actual en relación con eso cuando comenzó a integrar, pero nuevamente esto se desviará rápidamente de la realidad.

Otros consejos

Dado que nadie parece haber mencionado las bibliotecas existentes, según lo solicitado por OP, aquí va:

http://www.wiigee.org/

Diseñado para su uso con Wiimote, wiigee es una implementación de código abierto basada en Java para la coincidencia de patrones basada en lecturas de acelerómetro. Esto se logra utilizando Modelos ocultos de Markov [1].

Aparentemente fue utilizado con gran efecto por una empresa, Thorn Technologies, y han mencionado su experiencia aquí: http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition/

Alternativamente, podría considerar FastDTW ( https://code.google.com / p / fastdtw / ). Es menos preciso que el DTW [2] normal, pero también es menos costoso desde el punto de vista informático, lo que es un gran problema cuando se trata de sistemas integrados o dispositivos móviles.

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

EDITAR: El OP ha mencionado en uno de los comentarios que completó su proyecto, con una precisión del 90% en el campo y un tiempo de cálculo de menos de milisegundos, utilizando una variante de Reconocimiento de $ 1 . También menciona que la rotación no era un criterio en su proyecto.

Lo que no se ha mencionado aún es el reconocimiento real de gestos. Esta es la parte difícil. Después de haber limpiado sus datos (filtro de paso bajo, normalizado, etc.) aún tiene la mayor parte del trabajo por hacer.

Echa un vistazo a los modelos ocultos de Markov. Este parece ser el enfoque más popular, pero usarlos no es trivial. Generalmente hay un paso de preprocesamiento. Primero haciendo STFT y agrupando el vector resultante en un diccionario, luego introduciéndolo en un HMM. Eche un vistazo a jahmm en el código de google para una lib de java.

Agregando al punto de sombra de luna sobre tener que restablecer su línea de base para la gravedad y la rotación ...

A menos que se espere que el dispositivo tenga momentos estables de descanso (donde la única fuerza que actúa sobre él es la gravedad) para restablecer su línea de base de medición, su sistema eventualmente desarrollará un equivalente de vértigo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top