Autore Topic: Ricavare nuova posizione tramite accelerometro  (Letto 8064 volte)

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Ricavare nuova posizione tramite accelerometro
« il: 18 Maggio 2012, 10:04:21 CEST »
0
Ciao, siccome non ho il giroscopio sono costretto a usare l'accelerometro...praticamente vorrei determinare la nuova posizione rispetto all'asse x del cell quando viene spostato.
Siccome il programma che sto facendo prevede piccoli movimenti ho deciso di provare a considerare l'accellerazione costante e andare per la formula

newx = oldx + v*t +1/2*a*(t^2)
il problema è v che non conosco...inoltre mi sembra cmq macchinoso, avete qualche idea?

Ho anche il sensore ROTATION VECTOR di cui ho letto qualcosa (senza capirci molto in tutta onestà!) non so se è più adatto a questa problematica...

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #1 il: 18 Maggio 2012, 12:35:52 CEST »
0
Non so se ho capito bene, ma con l'accelerometro non puoi calcolare lo spostamento e la velocità di spostamento, per quello ti serve il GPS. L'accelerometro ti segna solo l'inclinazione del telefono e appunto se "accelera" o "rallenta".

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #2 il: 18 Maggio 2012, 20:15:40 CEST »
0
Ma il gps mi permetterebbe di ottenere spostamenti di pochi centimetri?
Cmq so che l'accellerometro è fatto per le variazioni di velocità, ma contavo su quella formula per ricavarmi lo spostamento....che mi dici invece del VECTOR?

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #3 il: 18 Maggio 2012, 22:01:38 CEST »
0
Ma il gps mi permetterebbe di ottenere spostamenti di pochi centimetri?
Cmq so che l'accellerometro è fatto per le variazioni di velocità, ma contavo su quella formula per ricavarmi lo spostamento....che mi dici invece del VECTOR?

Come detto, l'accelerometro non ti rileva la distanza di spostamento, ma appunto che "è" stato spostato. Anzi, se avessi la mano superultraferma, saresti in grado di spostare il telefono senza farlo scattare, ma siccome è TROPPO sensibile....non ce la fai.

Per lo spostamento come intendi tu, non credo sia possibile. Per MISURARE lo spostamento temo tu debba affidarti al GPS...ma se sono soli pochi cm, non ce la fa. Non ne sono sicuro al 100%, ma poco ci manca.

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #4 il: 18 Maggio 2012, 23:01:45 CEST »
0
Quella formula è la soluzione di una equazione differenziale con l'ipotesi di una accelerazione uniforme conoscendo la velocità iniziale e la posizione di partenza.

Col telefono non hai una accelerazione costante, quindi devi risolvere l'equazione differenziale generica senza ipotesi di semplificazione ma manca la velocità iniziale e la posizione di partenza, la soluzione non è determinata quindi 3 accelerometri su 3 assi ortogonali non possono in nessun modo sostituire un giroscopio.

Il GPS (se i satelliti sono in vista) senza assistenza ha un errore medio sul 95% del tempo compreso tra i circa 3 e 15 metri sulla latitudine e longitudine, quindi una precisione nell'ordine di un centimetro è impossibile.
adb logcat | tee /tmp/logcat | grep TAG

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #5 il: 19 Maggio 2012, 10:11:37 CEST »
0
La posizione iniziale non è un problema, assumendola uguale a zero, inoltre siccome sono piccoli spostamenti veloci mi sono messo nell'ipotesi di accellerazione costante ma il problema in effetti è la velocità...il giroscopio invece è diverso?Purtroppo non ce l'ho ma a questo punto mi piacerebbe conoscere la differenza.

Offline agenio

  • Utente junior
  • **
  • Post: 77
  • Respect: +11
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Sistema operativo:
    Windows 8.1
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #6 il: 19 Maggio 2012, 11:28:37 CEST »
0
Considerando l'accelerazione costante e conoscendo il tempo ... potresti provare con una derivazione numerica .... v = a*t.

Il tempo lo potresti prendere con due timestamp: prima di prendere il dato dell'accelerazione e dopo averlo preso e fai la differenza.

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #7 il: 19 Maggio 2012, 11:57:21 CEST »
0
Ora provo, ma ho questo dubbio: per ogni singolo evento dovrei:
1)Prendere il tempo
2)Ricavare la velocità
3)Ricavare la nuova posizione

il telefono (nel mio caso 800Mhz di processore) ci riesce in un tempo accettabile, insomma praticamente nullo per l'utente?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #8 il: 19 Maggio 2012, 12:54:05 CEST »
0
derivazione numerica .... v = a*t.

E' un integrale non una derivata ma l'ipotesi di accelerazione uniforme non è fattibile, nessuno muove il telefono con una accelerazione costante e manca la velocità iniziale.

Ripeto è impossibile simulare un giroscopio con gli accelerometri, è per questo motivo che i telefoni di ultima generazione (di solito di fascia alta) hanno in aggiunta il giroscopio tra i sensori.

Qui potete vedere alcune foto di come sono fatti i giroscopi a semiconduttori (MEMS):

iPhone 4 Gyroscope Teardown - iFixit

In questo video spiega molto bene tutti gli aspetti dei sensori di accelerazione, giroscopio e bussola presenti nei telefoni (è in inglese):

http://www.youtube.com/watch?feature=player_embedded&v=C7JQ7Rpwn2k
adb logcat | tee /tmp/logcat | grep TAG

Offline agenio

  • Utente junior
  • **
  • Post: 77
  • Respect: +11
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Sistema operativo:
    Windows 8.1
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #9 il: 19 Maggio 2012, 14:20:12 CEST »
0
E' un integrale non una derivata ma l'ipotesi di accelerazione uniforme non è fattibile, nessuno muove il telefono con una accelerazione costante e manca la velocità iniziale.

a = spazio/t^2 ---> v=spazio/t ... ops hai ragione ... integrazione :). La velocità iniziale ipotizzando di partire da fermi la si potrebbe assumere pari a zero

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #10 il: 19 Maggio 2012, 16:13:19 CEST »
0
Ipotizziamo di muovere per un tratto rettilineo il telefono a velocità uniforme, l'accelerazione è uguale a zero, per gli accelerometri i dati sono zero (tranne il dato sulla gravità) ma il telefono si è spostato.  Gli accelerometri non possono distinguere il caso di telefono fermo o di telefono in moto rettilineo a velocità uniforme. Non c'è soluzione, con i soli accelerometri non puoi ricavare un dato assoluto o relativo certo sullo spostamento.
adb logcat | tee /tmp/logcat | grep TAG

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #11 il: 07 Luglio 2012, 13:16:13 CEST »
0
Ipotizziamo di muovere per un tratto rettilineo il telefono a velocità uniforme, l'accelerazione è uguale a zero, per gli accelerometri i dati sono zero (tranne il dato sulla gravità) ma il telefono si è spostato.  Gli accelerometri non possono distinguere il caso di telefono fermo o di telefono in moto rettilineo a velocità uniforme. Non c'è soluzione, con i soli accelerometri non puoi ricavare un dato assoluto o relativo certo sullo spostamento.
Scusate perché riporto su questo thread.

Capisco il senso ma non sono d'accordo. Il telefono é fermo poi lo sposti (ed hai una accelerazione) e prosegui a velocità costante (e risulta "fermo").... ma tu hai avuto una accelerazione prima!!!!!

Quello che voglio dire é che in teoria sommando le accelerazioni/decelerazioni dovresti poter tracciare il movimento, se conosci la posizione iniziale e assumi di aver fatto partire la "registrazione" a riposo.

Avevo fatto delle prove in tal senso, giusto 10 minuti.... nulla di che. La pratica dice che almeno il galaxy s2 non torna esattamente a riposo, troppo poco preciso.

Quindi confermo che non é fattibile in pratica, ma in teoria secondo me si.

 :-P

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #12 il: 07 Luglio 2012, 14:37:40 CEST »
0
Io ho descritto il comportamento di un telefono in base alla fisica newtoniana (escludo il caso di telefono con velocità prossima a quella della luce).

Io non ho scritto che se prosegui a velocità costante risulta fermo, ho scritto un corpo in moto rettilineo a velocità uniforme la sua accelerazione è nulla.

Da quello che scrivi non tieni conto della velocità e se ti sposti hai in qualche modo una accelerazione. In base alla tua teoria ti basta solo l'accelerazione per sapere la posizione. Sono curioso di sapere come risolvi il problema conoscendo solo la posizione iniziale nello spazio e l'andamento nel tempo delle accelerazioni, come ricavi la posizione nel tempo, ipotizzando anche di avere precisione infinita nei calcoli.



adb logcat | tee /tmp/logcat | grep TAG

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:Ricavare nuova posizione tramite accelerometro
« Risposta #13 il: 07 Luglio 2012, 16:33:03 CEST »
0
Con numerose condizioni ideali (non reali) sarebbe anche possibile: occorre sapere la posizione iniziale e la velocità iniziale, occorre avere un campionamento infinitamente fitto delle accelerazioni lineari, occorre che gli accelerometri siano calibrati in modo da dare valori assoluti di accelerazione, occorre sapere in ogni momento la direzione della gravitá per scorporarla (cosa in generale impossibile con i soli accelerometri lineari).

In base a queste premesse, integrando sui tre assi le accelerazioni lineari, si ottiene la velocitá istantanea su ciascun asse. E integrando le velocitá istantanee si ottiene lo spazio, sempre sui tre assi.

Sono tante e tali le non idealitá da rendere veramente impossibile tale approccio.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Ricavare nuova posizione tramite accelerometro
« Risposta #14 il: 07 Luglio 2012, 21:06:29 CEST »
0
Io ho descritto il comportamento di un telefono in base alla fisica newtoniana (escludo il caso di telefono con velocità prossima a quella della luce).

Io non ho scritto che se prosegui a velocità costante risulta fermo, ho scritto un corpo in moto rettilineo a velocità uniforme la sua accelerazione è nulla.
Si quello l'avevo capito, siamo d'accordo che a velocità costante o in posizione di riposo l'accelerazione è nulla. Quello che dico io è che tra la posizione di riposo e la velocità costante ci sono delle situazioni "intermedie" con accelerazione non nulla.

Citazione
Da quello che scrivi non tieni conto della velocità e se ti sposti hai in qualche modo una accelerazione. In base alla tua teoria ti basta solo l'accelerazione per sapere la posizione. Sono curioso di sapere come risolvi il problema conoscendo solo la posizione iniziale nello spazio e l'andamento nel tempo delle accelerazioni, come ricavi la posizione nel tempo, ipotizzando anche di avere precisione infinita nei calcoli.
Ma infatti dico che in pratica non si può, come ha spiegato correttamente bradipao. ;-)