CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: platone76 con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: megthebest con ben 7 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 39 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

SensorManager, values[0] e compass

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Oct 2010
    Messaggi
    12

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    SensorManager, values[0] e compass

    Saaalve a tutti di nuovo.
    Questa volta ho un problema con la bussola e il SensorManager. Ho seguito uno dei tutorial (probabilmente uno dei più letti) per la realtà aumentata, e quello che sto cercando di fare è recuperare il mio azimut (la direzione in cui sta puntando la fotocamera espressa in gradi rispetto al Nord). Questo è il codice preso paro paro dal tutorial:

     
    1
     //...altro codice
    2
    3
    SensorEventListener listener = new SensorEventListener(){
    4
    5
       public void onAccuracyChanged(Sensor arg0, int 
    6
       {}
    7
    8
       public void onSensorChanged(SensorEvent evt)
    9
       {
    10
          float vals[] = evt.values;   
    11
          direction = vals[0];
    12
       }
    13
    };
    14
    15
    public static SensorManager sensorMan;
    16
    sensorMan = (SensorManager)ctx.getSystemService(Context.SENSOR_SERVICE);
    17
          sensorMan.registerListener(
    18
             listener, 
    19
             sensorMan.getDefaultSensor(
    20
                SensorManager.SENSOR_ORIENTATION), 
    21
             SensorManager.SENSOR_DELAY_FASTEST);
    22
    //...altro codice
    23


    Ovviamente il resto è tutto corretto. Questa è la porzione relativa al listener della bussola. Il problema è relativo al valore che il Listener mi ritorna, ovvero il valore dentro vals[0]. Ovunque trovo scritto che il valore al suo interno è già in gradi, mentre i valori che osservo io sono compresi fra -2 e 2 (circa). Pensavo fosse espresso in radianti, ma la cosa non avrebbe comunque senso.
    Come posso fare per avere il risultato in gradi? O meglio, in che unità di misura mi ritorna l'azimut?
    Grazie

  2.  
  3. #2
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Quegli angoli sono in gradi, da 0 a 360.

    Prova a tenere il cellulare attaccato al pc con adb logcat aperto su dos mentre esegui il programma modificato così:

    10
     
    1
     SensorEventListener listener = new SensorEventListener(){  
    2
       
    3
        public void onAccuracyChanged(Sensor arg0, int   
    4
        {}  
    5
       
    6
        public void onSensorChanged(SensorEvent evt)  
    7
        {  
    8
           Log.v("Valore in gradi registrato: ", ""+evt.values[0]);
    9
        }  
    10
     };  

  4. #3
    Baby Droid


    Registrato dal
    Oct 2010
    Messaggi
    12

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Si, avevo già controllato tramite Log (i valori li avevo presi da li). Ho scoperto che il problema è legato alla versione.
    SENSOR_ORIENTATION è ormai deprecato, così come TYPE_ORIENTATION. Dalla verionse 2.1 (API Level superiore a 8 mi sembra) bisogna utilizzare il metodo getOrientation() di SensorManager e lavorare con le matrici di rotazione.
    In effetti il valore ritornato dalla matrice di rotazione in values[0] è in radianti.
    Continuo comunque a riscontrare due problemi: getRotationMatrix() mi ritorna sempre "false", e sulle specifiche c'è scritto che questo valore dovrebbe ritornare solo se il cellulare fosse in caduta libera (e non credo di abitare in un aereo in picchiata).
    L'altro problema è che utilizzando il vecchio metodo in realtà riesco a fare la conversione in gradi, ma i valori (come detto prima) variano enormemente. Se punto il cellulare in una direzione fissa, mi aspetterei una variazione di al massimo 1-2 gradi (che non sono pochi), invece questi variano anche di un paio di decine di gradi (tipo da 10 a 28) in continuazione.
    Degli sbalzi così grandi mi rendono impossibile lavorare con questi dati. C'è un modo per settare "l'accuratezza" della bussola o altro?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy