Autore Topic: Sensori e realtà aumentata  (Letto 3457 volte)

Offline enos

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Sensori e realtà aumentata
« il: 16 Novembre 2010, 10:31:18 CET »
0
Ciao a tutti,
sto lavorando ad un'applicazione di realtà aumentata ed utilizzo la bussola ed i sensori del telefono per realizzare il tutto.
L'applicazione è progettata per funzionare esclusivamente in modalità landscape.

Usando la classe SensorEvent, ottengo l'angolo della direzione in cui punta il telefono (sempre in landscape) sommando 90° al values[0] (Sensor.TYPE_ORIENTATION) e correggendo opportunamente il valore quando supera 360°.

Tutto funziona al meglio, almeno finchè non inizio a muovere il telefono come il volante di un'automobile: in questo caso - giustamente - l'applicazione si comporta come se stesse cambiando l'angolo di orientazione del dispositivo.

E' da un po' che rifletto su come risolvere questo problema, ma non ho ancora trovato una soluzione.
Qualcuno ha già affrontato questa problematica?

Grazie  :-)

Offline areo

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Sensori e realtà aumentata
« Risposta #1 il: 16 Novembre 2010, 11:24:06 CET »
0
interesserebbe anche a me la soluzione di questo problema.
mi ero messo anch'io a smanettare con i valori pitch roll e azimuth credendo inizialmente piu' facile la gestione dei 360 gradi in qualsiasi posizione del telefono, e invece tanto facile (almeno per me) non lo e'. Poi vedi dei programmi come 3dLevel che funzionano egregiamente sfruttando i sensori e non capisci come cavolo hanno fatto e ti (mi) sento scemo a non venirne a capo


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:Sensori e realtà aumentata
« Risposta #2 il: 16 Novembre 2010, 12:01:46 CET »
0
Tutto funziona al meglio, almeno finchè non inizio a muovere il telefono come il volante di un'automobile: in questo caso - giustamente - l'applicazione si comporta come se stesse cambiando l'angolo di orientazione del dispositivo.

E' da un po' che rifletto su come risolvere questo problema, ma non ho ancora trovato una soluzione.
Qualcuno ha già affrontato questa problematica?

Premetto che non ho mai provato a "giocare" con i sensori di orientazione, per cui ti faccio una domanda: il tuo è solo un problema trigonometrico? Cioè: ti serve sapere come fare a ricavare l'orientazione sul piano, quando muovi il telefono nelle 3 dimensioni?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline enos

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:Sensori e realtà aumentata
« Risposta #3 il: 16 Novembre 2010, 12:06:38 CET »
0
Premetto che non ho mai provato a "giocare" con i sensori di orientazione, per cui ti faccio una domanda: il tuo è solo un problema trigonometrico? Cioè: ti serve sapere come fare a ricavare l'orientazione sul piano, quando muovi il telefono nelle 3 dimensioni?
Ciao bradipao,
se tengo il dispositivo perfettamente orizzontale e mi giro intorno il tutto funziona alla perfezione.

Il problema è solo legato al comportamento indesiderato che si verifica quando si muove il telefono "a volante": se inclino il telefono verso sinistra si comporta come se mi ruotassi con il busto verso sinistra.

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:Sensori e realtà aumentata
« Risposta #4 il: 16 Novembre 2010, 13:09:58 CET »
0
Il problema è solo legato al comportamento indesiderato che si verifica quando si muove il telefono "a volante": se inclino il telefono verso sinistra si comporta come se mi ruotassi con il busto verso sinistra.

Appunto, a me sembra un problema trigonometrico. A te serve la "proiezione a terra" della direzione in cui è rivolto il telefono, mentre probabilmente (ma qui serve il codice) tu stai usando uno solo degli assi pitch/roll/azimuth.

Può essere questa la ragione?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline enos

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:Sensori e realtà aumentata
« Risposta #5 il: 16 Novembre 2010, 13:18:43 CET »
0
Appunto, a me sembra un problema trigonometrico. A te serve la "proiezione a terra" della direzione in cui è rivolto il telefono, mentre probabilmente (ma qui serve il codice) tu stai usando uno solo degli assi pitch/roll/azimuth.

Può essere questa la ragione?
Allora scusami, ma non ti avevo capito.
E' esattamente come dici: io uso l'asse azimuth (opportunamente modificato) ed è per questo che ho questo problema.

Eccoti un po' di codice:

Codice (Java): [Seleziona]
                @Override
                public void onSensorChanged(SensorEvent event) {
                       
                        synchronized(this){
                    if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
                        setDirezione(event.values);
                    }
                    else if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER ) {
                        setAboveOrBelow(event.values);
                    }
                        }      
                        aggiornaSchermata(false);
           
                }
                }

                public void setDirezione(float[] values) {
                orientationValues = values;
                direzione=90+orientationValues[0];
                if (direzione>360) direzione=direzione-360;
               
                inclinazione=90-orientationValues[2];
                }


Hai idea di come potrei ottenere questa "proiezione a terra"?
« Ultima modifica: 16 Novembre 2010, 13:26:16 CET da enos »

Offline areo

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Sensori e realtà aumentata
« Risposta #6 il: 16 Novembre 2010, 13:26:37 CET »
0
(mi inserisco, spero possiate dare una mano anche a me)

immagina di avere il telefono appoggiato in orizzontale sul tavolo (in landscape).
ora alza la parte sinistra del cell lasciando appoggiata la parte destra. fa il contrario. ora stai leggendo i valori del pitch (roll e azimuth sono rimasti inalterati)
ora metti il telefono in verticale, sempre in landscape. fa lo stesso movimento di prima. usa la mano destra sul bordo del telefono per fare perno e muovi la parte sinistra verso di te e al contrario. ora il roll (se tenuto in verticale e fermo) resta uguale, il pitch resta uguale, il valore che cambia e' l'azimuth.
ora io vorrei utilizzare questi valori per gestire la rotazione in x y z, solo che mi sono fermato, e non posso associare il roll a x, pitch a z e azimuth a y, perche' appunto dipende da come e' orientato il telefono

non ho capito se e' lo stesso problema di Enos, se lo e' scusate, seguiro' piu' attentamente :D

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:Sensori e realtà aumentata
« Risposta #7 il: 16 Novembre 2010, 13:42:16 CET »
0
Hai idea di come potrei ottenere questa "proiezione a terra"?

Ok, ce la facciamo.  :-)

Poichè non sono pratico di questa parte dell'SDK, mi ci vuole un attimo libero per leggermi come escono pitch/roll/azimuth e poi ti scrivo qualche esperimento da fare. Se poi qualcuno più pratico arriva prima di me, meglio ancora.  :-P

areo, poi vediamo anche il tuo problema, serve solo un po' di pazienza  ;-)


EDIT: ho studiato un po'  :-P

Mi sono letto un po' di documentazione ed ho fatto qualche esperimento con alcune app per riprodurre il problema di ENOS (che eventualmente mi confermerà).  Metto le mani avanti perchè sto affrontando solo adesso questo argomento, per cui potrei prendere cantonate.

Installata una app bussola, mi sono messo con il telefono verticale puntato in direzione NORD (lettera N alla simmità). Girando il telefono come un volante la lettera del NORD ruota rispetto all schermo, per rimanere appunto in direzione NORD (sullo schermo si posizionano dal lato sinistro o destro a seconda del verso di rotazione).

Più in dettaglio, mi sono scritto i valori di P,R,A nelle tre posizioni, con schermo verticale.

Schermo verticale in direzione nord P:-90° R:0° A: 0°
Rotazione a sx come un volante P: 0° R: 90° A: 270°
Rotazione a dx come un volante P: 0° R: -90° A: 90°

Con schermo orizzontale (ruotato di 90°) ho notato che l'applicazione che ho usato scambia pitch e roll, giustamente), ma non l'azimuth. Per cui il NORD risulta essere a 270° (penso sia per questo che enos usandolo in landscape deve correggere con +90, confermi?).

Una possibile soluzione per ENOS: Una soluzione molto semplificata (cioè geometricamente un rozza) al tuo problema potrebbe essere compensare il valore di azimuth con il roll, cioè usa:

Codice (Java): [Seleziona]
direzione=90+orientationValues[0]+orientationValues[2]
Può darsi serva aggiustare il segno e/o usare orientationValues[1], è da provare direttamente sulla tua app.

Sono curioso di sapere se risolve qualcosa o se è un buco nell'acqua.  :D
« Ultima modifica: 16 Novembre 2010, 18:35:21 CET da bradipao »
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MMarko

  • Utente junior
  • **
  • Post: 128
  • Respect: +5
    • MarcoMatarazzi
    • Mostra profilo
    • La Rocchetta Bed And Breakfast
  • Dispositivo Android:
    HTC Legend
  • Play Store ID:
    MarcoMatarazzi
Re:Sensori e realtà aumentata
« Risposta #8 il: 21 Novembre 2010, 15:09:56 CET »
0
Mi intrometto nella discussione per chiedere ad Enos se può consigliare qualche articolo da leggere (magari quelli che hai utilizzato).

Grazie :P

Offline enos

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:Sensori e realtà aumentata
« Risposta #9 il: 23 Novembre 2010, 10:09:21 CET »
0
Mi intrometto nella discussione per chiedere ad Enos se può consigliare qualche articolo da leggere (magari quelli che hai utilizzato).

Grazie :P
Ciao MMarko,
gli articoli che ho letto riguardano per lo più l'acquisizione dei dati dai sensori del telefono; per la "costruzione" della realtà aumentata mi sono messo carta e penna e ho fatto da me (ma prova a cercare, magari sono stato sfortunato io!).
Ad ogni modo per avere una prima idea del da farsi ti consiglio questo articolo.

Mentre per i dati dei sensori ho usato questo utilissimo tutorial di Scarface III.

In bocca al lupo e se hai bisogno ovviamente siamo a disposizione!  ;-)

Offline MMarko

  • Utente junior
  • **
  • Post: 128
  • Respect: +5
    • MarcoMatarazzi
    • Mostra profilo
    • La Rocchetta Bed And Breakfast
  • Dispositivo Android:
    HTC Legend
  • Play Store ID:
    MarcoMatarazzi
Re:Sensori e realtà aumentata
« Risposta #10 il: 23 Novembre 2010, 11:14:14 CET »
0
Grazie mille per la disponibilità, appena avrò del tempo mi ci dedicherò sicuramente! ;)

Offline bobo78

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
  • Sistema operativo:
    Win XP
Re:Sensori e realtà aumentata
« Risposta #11 il: 02 Dicembre 2010, 11:29:06 CET »
0
Ciao a tutti. Come procede questo progetto?
Per la scena dell'applicazione cosa usi?

Io vorrei fare un'applicazione di questo tipo.

Vorrei riprodurre una stanza in openGL (non so ancora come fare) e poi girando su me stesso a 360 gradi con il telefono in mano vorrei vedere le diverse pareti della stanza.
Ad esempio come si fa in doom se si sta fermi in un punto e si preme ad esempio la freccia a sinistra.

Sapreste aiutarmi a fare una cosa del genere? Qualche indicazione o tutorial?

Grazie mille a tutti!

Offline enos

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:Sensori e realtà aumentata
« Risposta #12 il: 02 Dicembre 2010, 11:40:14 CET »
0
Ciao a tutti. Come procede questo progetto?
Per la scena dell'applicazione cosa usi?

Ciao bobo,
come "scena" uso la fotocamera del telefono, quindi non saprei proprio come aiutarti in questo!

Ammazza! Mi ero perso tutto l'edit di bradipao!!  :-o
Corro a studiarmelo...

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
Re:Sensori e realtà aumentata
« Risposta #13 il: 29 Dicembre 2010, 13:35:08 CET »
0
ciao a tutti , a inizio post areo
Citazione
Poi vedi dei programmi come 3dLevel che funzionano egregiamente sfruttando i sensori e non capisci come cavolo hanno fatto e ti (mi) sento scemo a non venirne a capo

se puo essere ancora utile vi consiglio di cliccare sul link (sito ufficiale del produttore 3dlevel) http://www.dr-fischer.org/android/ li si trova il codice sorgente disponibile ... ciao

EDIT: Di nulla  :-)
« Ultima modifica: 29 Dicembre 2010, 19:18:07 CET da ALEX88-ANDR0!D »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline areo

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Sensori e realtà aumentata
« Risposta #14 il: 29 Dicembre 2010, 14:49:25 CET »
0
wow wow grazie mille!!!