Skip to content

Prueba de algoritmos

Algoritmo 1

Se ha procedido a evaluar diferentes situaciones. Como primeras pruebas, el parámetro de colisión se ha configurado a 2gs (valor 38).

Caída desde 30 cm partiendo de una posición horizontal, en la que los acelerómetros no marcan nada:

30 cm desde posición horizontal

Caída desde 30 cm sobre cojín

Como se puede observar, en ambos casos la colisión se detecta como aceleraciones mayores de 2g en alguno de los ejes.

Si la caída se realiza con el acelerómetro en vertical, se puede apreciar la caída como un valle que tiende hacia 0gs, y la posterior colisión marcada en rojo:

Caída en posición "vertical" sobre cojín.

Así mismo, las caídas desde 90cm presentan unos resultados similares:

Caída desde 90cm partiendo de posición horizontal

Las siguientes gráficas muestan actividades normales que conllevan cierto movimiento, teniendo el monitor a la altura de la cadera pegado al cuerpo. En este caso, una caída sobre el suelo (golpe realista):

Caída realista sobre el suelo

Como se puede observar en la gráfica anterior, el movimiento supuestamente normal no se ha detectado, y sin embargo la colisión con el suelo sí.

Ahora se muestra el efecto de sentarse en una silla más o menos como peso muerto:

Sentarse como peso muerto

Afortunadamente no se ha considerado caída por no llegar a 2gs, pero parece que está cerca. Tal vez habría que considerar caída a los 2,5gs si resulta que esto da falsos positivos.

Caminando:

Caminando

Barriendo:

Barriendo

Algoritmo 2

Como se puede observar en todas las capturas del algoritmo 1, las situaciones habrían dado el mismo resultado en el caso de tratarse del algoritmo 2.

Como prueba para el algoritmo 2 se han utilizado como parámetros los siguientes:

  • timesteps: 15
  • aceleración: 2g (38)

Se puede observar cómo no hay diferencia con respecto al algoritmo 1 en cuanto a la detección de caídas desde 30 y 90 centímetros sobre un cojín:

Caída desde 30 centímetro sobre cojín

Caída vertical 90 cm sobre cojín

Las zonas marcadas en rojo como colisión son más grandes porque considera colisión lo que corresponde a una ventana de tamaño configurado (en este caso, 15 timesteps). Se puede apreciar sobre todo en la  última imagen cómo la ventana puede que sea demasiado grande, y comprobamos que tal vez para colisiones sea suficiente una ventana de 7 timesteps (o incluso menos).

Durante las pruebas de este algoritmo se ha dado un caso de interés en la prueba de caminar. Al ser este el segundo algoritmo, no se ve afectado por el hecho de que el eje Y esté siendo bastante afectado por la gravedad. En realidad es una simple aceleración de 1g en el mismo sentido de la gravedad, por lo que el algoritmo 1 lo detectaría como colisión. Esta es la captura:

Caminando. Falso positivo.

Como se puede ver es un falso positivo inevitable (por la aceleración debida a la gravedad) en el algoritmo 1, pero totalmente evitable en el algoritmo 2. La causa se muestra en la siguiente captura:

Causa del falso positivo

Viendo la gráfica, en verde está marcada la ventana de aceleración. Disminuyendo a la mitad la ventana (7 timesteps) ya no se detectaría este falso positivo, y sí los verdaderos positivos de los ejemplos anteriores, en los que también se sugería una reducción de los timesteps. Además, aumentar la aceleración a 2,2 gs, o incluso 2,5gs proporcionaría todavía mayor robustez.

Nuevos parámetros:

  • timesteps: 7
  • aceleración: 2,5gs (48)

Los resultados de las pruebas han sido los siguientes.

Sentándose en una silla callendo como “peso muerto” (es decir, si te sientas en una silla un poco bruscamente):

Sentándose en una silla. Algoritmo 2 con los nuevos parámetros.

Se puede observar que hay un pico en el eje Y, pero que no se considera colisión (el algoritmo1 sí que lo consideraría) ya que la caída ha sido de casi 2,5gs, y aún asi, la ventana de tiempo es de sólo 7 timesteps. Como se puede observar en el siguiente análisis:

Era una caída poco peligrosa

En verde está la mayor caída, que en la ventana de 7 timesteps es de unos 2gs. En azul la recuperación, que en la ventana de 7 timesteps es de 1,5gs. Concluimos que la caida no era muy peligrosa (y es que, efectivamente, no era peligrosa).

La prueba de caminar dio el siguiente resultado:

Caminando

Sin ningún problema. Vemos cómo el algoritmo 1 habría dado una colisión en el pico prominente que supera los -2gs, y es posible que el algoritmo 2 con los parámetros anteriores también lo considerase colisión (la diferencia parece ser de unos 2gs, aunque tal vez por poco no lo sea). Esta vez no aparece ese falso positivo.

Por último, una caída real sobre unos cojines, pero caída:

Caída de verdad.

El algoritmo 2 con los últimos parámetros parece afinar bastante.

Conclusión

Sin ninguna duda, el algoritmo 2 con los últimos parámetros (timesteps:7 y aceleración: 2,5gs) parace ser un algoritmo aceptable para detectar colisiones genéricas sin que se vea afectado por tareas normales.

Aún sin pretender ser repetitivo, es necesario recordar que para usos concretos siempre estaría bien considerar otros algoritmos más específicos para la situación de trabajo.

Post a Comment

Your email is never published nor shared. Required fields are marked *