Autore Topic: Uso accelerometro per riconoscere fermo / camminata / corsa  (Letto 1186 volte)

Offline AntonioE.

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Microsoft Windows 7 x64
Uso accelerometro per riconoscere fermo / camminata / corsa
« il: 07 Luglio 2013, 12:32:27 CEST »
0
Salve gente, devo scrivere un'applicazione che deve riconoscere se una persona è ferma, sta camminando, o sta correndo. Il movimento nel senso di spostamenti di metri / km li rilevo col gps, ma dal momento che ho sbattuto a lungo la testa su come riconoscere quando un tizio è fermo o sta correndo ( visto che le coordinate gps variano anche col telefono fermo sul tavolo ) ho deciso di gestire questa situazione non con il gps, bensì con l'accelerometro.

L'idea alla base è questa:
Un tizio che corre col telefono in mano, o sul braccio, o in tasca, nel marsupio ecc ecc sottoporrà il telefono ad una certa accellerazione, che è di certo molto superiore all'accellerazione a cui è sottoposto lo stesso smartphone in mano, sul braccio ... di un tizio fermo a chiacchierare.

Dunque se l'idea funziona, basterebbe capire quale sia questa "soglia" da usare ... avete esperienza / proposte / perplessità in merito?

Vi riporto il codice del mio metodo onSensorChanged ( abbozzato in 5 minuti dal concepimento dell'idea, quindi molto rudimentale per ora ... )

Citazione

public void onSensorChanged(SensorEvent event) {
      // TODO Auto-generated method stub
      xField = (TextView) findViewById(R.id.xfield);
      yField = (TextView) findViewById(R.id.yfield);
      zField = (TextView) findViewById(R.id.zfield);
      totField = (TextView) findViewById(R.id.totfield);
      state = (Button) findViewById(R.id.stateButton);
      
      /*
       * Dalla documentazione ufficiale:
       *  All values are in SI units (m/s^2) and measure contact forces.
         values[0]: force applied by the device on the x-axis
         values[1]: force applied by the device on the y-axis
         values[2]: force applied by the device on the z-axis
       *
       *
       */
      
      // il valore di confronto
      float soglia = 12;
      float x = Math.abs(event.values[0]);
      float y = Math.abs(event.values[1]);
      float z = Math.abs(event.values[2]);
                //dal calcolo vettoriale il modulo ( valore ) dell'accelerazione A = sqrt( Ax^2 + Ay^2 + Az^2)
      float tot = x*x + y*y + z*z;
      tot = (float) Math.sqrt(tot);
      
      xField.setText("Accelerazione x : " + x);
      yField.setText("Accelerazione y : " + y);
      zField.setText("Accelerazione z : " + z);
      totField.setText("Accelerazione tot : " + tot);
      
      if(tot > soglia)
      {
         state.setText("In movimento");
         state.setBackgroundColor(Color.GREEN);
      }
      else
      {
         state.setText("Stazionario");
         state.setBackgroundColor(Color.YELLOW);
      }
   }

« Ultima modifica: 07 Luglio 2013, 12:34:39 CEST da AntonioE. »
Non c'è cattivo più cattivo di un buono che diventa cattivo

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Uso accelerometro per riconoscere fermo / camminata / corsa
« Risposta #1 il: 07 Luglio 2013, 14:35:07 CEST »
+1
Con l'update del Google I/O hanno aggiunto questa funzionalità nei Play Services, non c'é bisogno di implementarla tu.
ActivityRecognitionClient | Android Developers
Postate il LogCat LogCat LogCat LogCat LogCat

Offline AntonioE.

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Microsoft Windows 7 x64
Re:Uso accelerometro per riconoscere fermo / camminata / corsa
« Risposta #2 il: 08 Luglio 2013, 09:55:14 CEST »
0
wow, grazie ci darò subito un'occhiata

Edit: non so quanto lo stato del progetto sia affidabile, col telefono fermo su un tavolo mi rileva spostamenti di tipo "in vehicle"ed "unknow" in numero estremamente maggiori di "still" ... mah
« Ultima modifica: 08 Luglio 2013, 17:22:03 CEST da AntonioE. »
Non c'è cattivo più cattivo di un buono che diventa cattivo

Offline Giak

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    transformer tf101
  • Sistema operativo:
    ubuntu 12.10
Re:Uso accelerometro per riconoscere fermo / camminata / corsa
« Risposta #3 il: 28 Luglio 2013, 19:08:09 CEST »
0
se uno corre a velocità costante l'accellerazione che subisce il telefono è la stessa che se fosse fermo. l'accellerazione per definizione è la derivata della velocità rispetto al tempo, ergo misura il cambiamento di velocità. devi integrare i risultati dell'accellerometro e porre una soglia sulla velocità non sull'accellerazione.