¿Qué algoritmo se utiliza en la aplicación ‘Walk Me Up’?

Hola,
Soy uno de los 2 desarrolladores de Walk Me Up! Reloj despertador de la aplicación.
Nos tomó bastante tiempo poner el algoritmo en buen estado y, obviamente, no podemos revelar el algoritmo desarrollado por nosotros, pero quizás pueda despejar algunas dudas
La respuesta de Nithin Nayagam hace un buen trabajo al cubrir las formas en que se podrían contar los pasos.

1. GPS: Hubiera sido muy fácil para nosotros si pudiéramos usar el GPS. Pero hay algunas restricciones con GPS –

yo. No funciona en interiores. Necesita una línea de visión clara con el cielo.

ii. No funciona para distancias cortas. Entonces, incluso si el usuario camina 10 pasos, no se detectará ningún cambio.

iii. Los 2 puntos anteriores individualmente fueron suficientes para descartar el uso del GPS en Walk Me Up !. Incluso cuando los 2 anteriores no son una preocupación para los desarrolladores por sus casos de uso, el GPS puede agotar bastante la batería y, por lo tanto, no es una forma preferida de obtener la ubicación de un usuario.

2. Triangulación de la torre del teléfono celular: tal vez la forma más preferida de obtener la ubicación del usuario, ya que la carga de la batería es mínima. Pero, una vez más, la precisión es de unos 50 m, lo que nos impide utilizar este método para detectar distancias cortas.

3. Detector de pasos: ¡ Por el momento Walk Me Up! fue lanzado, Google y Apple ni siquiera habían anunciado esta característica. Ambos gigantes introdujeron, con razón, un chip especial de baja potencia con el único fin de detectar pasos. Resolvimos un problema de hardware utilizando solo el software y, por lo tanto, los pequeños márgenes de error. Esto nos habría resultado muy útil, pero incluso ahora solo está disponible en el Nexus 5 de Google y en el iPhone 5S de Apple en adelante.

4. Acelerómetro: este es un sensor que se encuentra en casi todos los teléfonos inteligentes. Detecta cualquier movimiento en el auricular. Hemos hecho un uso juicioso del acelerómetro para detectar los pasos tomados por un usuario y también para detectar sacudidas.

El Esfuerzo y Proceso

Cuando conceptualizamos la aplicación, asumimos que sería un caso simple de integrar el código del podómetro con el código de alarma y el trabajo se haría. Sin embargo, cuando empezamos a usar las mejores aplicaciones de podómetro, nos decepcionó mucho ya que eran altamente inexactas. Un simple empujón contaría hasta 5-6 pasos.

Entonces, decidimos escribir nuestro propio algoritmo de detección de pasos . Muy pronto pusimos en marcha un algoritmo básico, pero como era de esperar, no fue mejor que las aplicaciones de podómetro que probamos. Luego leímos varios artículos de investigación sobre detección de pasos, pero nuevamente todos utilizaron dispositivos de hardware especiales como podómetros. Comenzamos a probar el algoritmo día tras día e hicimos una serie de pequeños cambios incrementales al algoritmo con respecto al comportamiento del acelerómetro.

Aunque hubo mejoras y el algoritmo ya era mucho mejor que las mejores aplicaciones de podómetro, los resultados distaron mucho de ser satisfactorios para nuestro uso.

Ahora aquí es donde se pone interesante.

Ya que habíamos terminado de recopilar una gran cantidad de datos de prueba, pensamos por qué no tratar de averiguar si hay un patrón en los datos. Tomamos todos los datos que habíamos recopilado y los representamos visualmente de muchas maneras diferentes utilizando Matlab . Empezamos a ver algunos patrones, pero eliminar el ruido estaba resultando difícil.

Nos dimos cuenta de que las imágenes parecían ondas de audio. Así es como surgió la idea de utilizar los principios del procesamiento de señales digitales . Se puso muy interesante en este punto. Leemos sobre métodos para reducir el ruido en las señales digitales y utilizamos esos métodos en nuestros datos. También leímos sobre los filtros y también usamos algunos filtros.

Entonces, en general, fue un proceso que nos llevó 2 meses. Impulsamos 17 actualizaciones en los primeros 2 meses y finalmente llegamos a un algoritmo bastante preciso y estable.

Hay maneras diferentes de hacer esto:

  1. GPS : siga agregando la distancia GPS entre 2 puntos cada X segundos (por ejemplo, 10 segundos). Compruebe AndroidLocation.distanceTo o distanceBetween. La aplicación Check My Tracks, es de código abierto. El GPS no está disponible en interiores y podría tener un error si el usuario cambia de dirección con mucha frecuencia (lea cada 1-2 segundos)
  2. Acelerómetro : busque el código / biblioteca para la detección de pasos usando el acelerómetro. La distancia viene de la doble integración de la aceleración, los errores pueden sumarse muy rápidamente aquí.
  3. Detector de pasos : incorporado en el Nexus 5. Google debe haberse ocupado de los errores del acelerómetro en la medida de lo posible. Esta es una computación basada en hardware, consume menos batería pero no está disponible en la mayoría de los teléfonos a la fecha.

Fuente: ¿Cómo calcular la distancia mientras se camina en Android?