Autore Topic: Precisione sensori  (Letto 2736 volte)

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Precisione sensori
« il: 21 Novembre 2014, 18:16:08 CET »
0
Ciao a tutti, sto realizzando un'app di test per un amico che mi ha chiesto un favore.
In pratica devo registrare tutte le variazioni dell'accelerometro in un determinato lasso di tempo ma prima di procedere vorremmo capire la precisione del tutto.

Ho fatto dei test, che però sono abbastanza empirici e non capisco se stia andando nella direzione giusta o no.

Un primo test l'ho fatto su un countdown usando la libreria android.os.CountDownTimer e seguendo l'esempio di questa guida: Learn About CountDownTimer in Android Using Android Studio


Ho adattato l'applicazione per farla girare 10 secondi con intervalli di 1 millisecondo e come test faccio incrementare di 1 un contatore in "onTick", teoricamente dovrebbe restituire 10000 (un incremento di 1 ogni millisecondo per 10000 millisecondi) ma mi viene restituito un valore poco superiore a 5000, facendo girare l'app via adb, senza quindi compilarla e installarla.

Un altro test simile l'ho fatto registrando i tre valori dell'accelerometro (x, y, z) con precisione di 1 millisecondo ma anche qui non ottengo 10000 righe.

La cosa che mi fa più strano è l'app del conto alla rovescia, è possibile che il mio telefono non abbia abbastanza risorse per registrare tutti gli incrementi del contatore?

Sto usando librerie lollipop su Nexus 5 lollipop.

Dimenticavo, non sono molto esperto in questo ambito, ho fatto altre app ma solo con appinventor!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Precisione sensori
« Risposta #1 il: 21 Novembre 2014, 19:40:06 CET »
0
Passare per il countdown timer non credo sia la scelta giusta.

Parti dalle basi dei sensori (sul sito ufficiale android.com):
Sensors Overview | Android Developers

Scendendo un po' trovi come controllare il sampling rate, che è l'intervallo di campionamento dei valori, e che puoi controllare con una grana al microsecondo.

PS: In ogni caso lavorare sulla griglia dei millisecondi non è una cosa banale e non conta quasi niente la velocità del processore. Ci sono in ballo latenze ben superiori che devono essere accuratamente evitate, per esempio se nella routine al millisecondo crei regolarmente anche solo un oggetto String, potrebbe crollare tutto, ma basta non creare oggetti.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Precisione sensori
« Risposta #2 il: 21 Novembre 2014, 20:35:00 CET »
0
Grazie mille, avevo un sentore di fare la cosa sbagliata!
Mi studio un po' le classi che mi hai consigliato e faccio qualche prova.

Visto che ci sono chiedo una delucidazione sul fatto di non creare alcun oggetto all'interno della routine: da una lettura veloce mi sembra di capire che ci sia già qualcosa di predisposto alla registrazione dei dati, quello dovrebbe bastare, no?
Ora capisco anche perchè l'app di test che registra le oscillazioni produce meno risultati del previsto, questo perchè aggiornavo tre TextView a ogni cambiamento, in pratica dovrei non far fare altro all'app durante la registrazione.

Offline tonno16

  • Utente storico
  • *****
  • Post: 1224
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Precisione sensori
« Risposta #3 il: 21 Novembre 2014, 21:59:05 CET »
0
Se eri dell' idea di usare un countdown che facesse da "thread", bhe. Sensor e SensorManager ti offrono tutto il necessario.

Per ricavare i tre valori x y z sono sufficienti veramente poche righe.

Se guardi la documentazione ufficiale, viene spiegato molto ma MOLTO bene i dati che fornisce l'accellerometro. Gli stessi 3 valori combinati secondo diverse formule riescono a trasformrsi in dei dati più elaborati e magari molto più utili delle semplici tre coordinate

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Precisione sensori
« Risposta #4 il: 22 Novembre 2014, 14:10:36 CET »
0
Molto bene, mi metto a studiare! E' inutile che chieda altre informazioni prima di testare qualcosa, vedendo la documentazione effettivamente non dovrei avere grossi problemi.

Grazie, vi farò sapere!!!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1224
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Precisione sensori
« Risposta #5 il: 22 Novembre 2014, 15:23:09 CET »
0
Guardati i tutorial di vogella. Sono ottimi

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Precisione sensori
« Risposta #6 il: 22 Novembre 2014, 15:30:53 CET »
0
Grazie! Sono su questo forum?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1224
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Precisione sensori
« Risposta #7 il: 22 Novembre 2014, 15:33:19 CET »
0
No. È un tipo che fa ottimini tutorial in inglese. Non ricordo di tutorial in ITA sui sensori su tale forum

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Precisione sensori
« Risposta #8 il: 22 Novembre 2014, 16:54:51 CET »
0
Forse intendi questi Android Development

Effettivamente c'è tanta roba, grazie del consiglio, mi tornerà sicuramente utile per approfondire le mie poche conoscenze!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1224
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Precisione sensori
« Risposta #9 il: 22 Novembre 2014, 17:00:59 CET »
0

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Precisione sensori
« Risposta #10 il: 24 Novembre 2014, 17:35:22 CET »
0
Ciao,

L'intervallo fra i sample è quello che richiedi, c'è scritto ben chiaro, che può essere lontano da quallo che ottieni.

Se ti serve un campionamento stretto ti posso dire:

- campiona in un thread diverso da quelli della UI.
Codice (Java): [Seleziona]
        mSensorsThread = new HandlerThread("SensorThread");
        mSensorsThread.start();
        Handler handler = new Handler( mSensorsThread.getLooper() );

        mSensorManager.registerListener(this, mAccelerometerSensor, SensorManager.SENSOR_DELAY_FASTEST, handler );

Per piazzare i tuoi campioni nel "tempo" uso il valore di event.timestamp.

Prova ad usare il campionamento a "batch" mode, non l'ho mai usato ma dovrebbe permetterti di avere campionamenti più fitti.

Ciao.

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Precisione sensori
« Risposta #11 il: 24 Novembre 2014, 18:01:28 CET »
0
Mi sento un po' in imbarazzo davanti a queste risposte perchè sono proprio all'inizio dello sviluppo android!
Ti ringrazio comunque della risposta, e ti chiedo: in un altro thread come? In una nuova schermata?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1224
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Precisione sensori
« Risposta #12 il: 24 Novembre 2014, 18:07:22 CET »
0
Fallo prima senza thread separato....che comunque funziona discretament . Poi guardati i thread. Poi unisciy

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Precisione sensori
« Risposta #13 il: 25 Novembre 2014, 13:41:00 CET »
0
Mi sento un po' in imbarazzo davanti a queste risposte perchè sono proprio all'inizio dello sviluppo android!
Ti ringrazio comunque della risposta, e ti chiedo: in un altro thread come? In una nuova schermata?

Ti incollato un pezzo di codice... è sufficiente quello perché la "onSensorChanged" venga chiamata in un altro thread.
Però se non hai idea di come sia la programmazione multi-thread ti sconsiglio di cominciare ad usarla così... c'è da avere le idee un po' più chiare per usarla...

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Precisione sensori
« Risposta #14 il: 25 Novembre 2014, 14:25:44 CET »
0
Grazie infinite, siete addirittura troppo gentili! Devo ancora trovare il tempo di studiare e voi mi aiutate a priori, siete davvero un ottimo forum, cosa rara ormai! ;-)