Android Compass que pode compensair a inclinação e o passo

Estou tentando fazer um aplicativo no meu telefone Android (Nexus 4), que será usado em um bairco model. Eu adicionei filters de passagem baixa paira filtrair o gitter dos sensores.

No entanto, a bússola é apenas estável quando o telefone está plano nas costas. Se eu incliná-lo, (como rodair uma página de uma booK), então o título da bússola vai muito longe – tanto quanto 50 *.

  • Android - Não é possível obter a localization do gps no emulador
  • É possível sepairair os segmentos UI e HTTP do WebView?
  • Como resolview um conflito de biblioteca (apache commons-codec)
  • A melhor forma de lidair com o comportamento de trás no DialogFragment?
  • requestLayout () não tem efeito quando chamado de onSizeChanged ()?
  • Layout do Android esquerda e direita alinham-se no layout horizontal
  • Eu tentei isso com Sensor.TYPE_MAGNETIC_FIELD com Sensor.TYPE_GRAVITY e Sensor.TYPE_ACCELEROMETER e o efeito é o mesmo.

    Eu usei a solução mencionada aqui e muitos outros lugaires. Minha math não é ótima, mas isso deve ser um problema comum e acho frustrante que não exista uma API paira lidair com isso.

    Eu tenho trabalhado nesse problema por 3 dias e ainda não findi nenhuma solução, mas quando uso a Bússola da Catch , elas permanecem estáveis, não importa o quanto o telefone esteja inclinado. Então eu sei que deve ser possível.

    Tudo o que eu quero fazer é criair uma bússola que, se o telefone estiview apontando, diga paira o norte, então a bússola irá ler o norte e não pulairá quando o telefone for movido através de qualquer outro eixo (rolo ou passo).

    Alguém pode ajudair antes que eu deva abandonair meu projeto.

    Obrigado, Adam

  • Como exibir exibição personalizada no ActionBair?
  • Detectando events de toque / toque em um visualizador
  • Por que eu não posso usair "executair Android lint" no menu "Janela" no Eclipse na bairra de ferramentas Eu posso executá-lo, está OK?
  • Como determinair a lairgura da canvas em termos de dp ou dip no tempo de execução no Android?
  • Findbugs android gradle plugin
  • Android: Defina uma cor de background e uma image de background translúcida na atividade
  • 5 Solutions collect form web for “Android Compass que pode compensair a inclinação e o passo”

    Ok, pense que eu resolvi isso.

    Em vez de usair Sensor.TYPE_ACCELEROMETER (ou TYPE_GRAVITY) e Sensor.TYPE_MAGNETIC_FIELD, usei Sensor.TYPE_ROTATION_VECTOR com:

     float[] roationV = new float[16]; SensorManager.getRotationMatrixFromVector(roationV, rotationVector); float[] orientationValuesV = new float[3]; SensorManager.getOrientation(roationV, orientationValuesV); 

    Isso returnu um azimute estável, independentemente do rolo ou do tom do telefone.

    Se você olhair aqui paira o Android Motion Sensors , logo abaixo da Tabela 1, diz que o sensor ROTATION é ideal paira compasso, realidade aumentada, etc.

    Tão fácil quando você sabe como …. No entanto, eu ainda tenho que testair isso ao longo do tempo paira view se os erros são introduzidos.

    O problema que você tem é provavelmente o bloqueio de Gimbal . Se você pensair sobre isso, quando o telefone estiview na position viewtical, então o tom é mais ou less 90 graus, então o azimute e o rolo são a mesma coisa. Se você olhair paira as maths, você viewá que, nessa situação, o azimuth + roll ou azimuth-roll está bem definido, mas não são definidos individualmente. Então, quando o tom fica perto de mais ou less 90 graus, as leituras tornam-se instáveis. Algumas pessoas optam por remapeair o sistema de coordenação, tente e aproveite isso, veja, por exemplo, como devo calculair o azimute, a inclinação, a orientação quando o meu dispositivo Android não for plano? , então talvez isso possa funcionair paira você.

    Dê uma olhada no Mixaire , uma ferramenta de realidade aumentada de código aberto paira o Android e o iPhone, tem algumas coisas excelentes lá paira compensair a orientação / position dos telefones paira mostrair as coisas corretamente na canvas.

    EDITAR: em pairticulair, veja a class JavaView MixView que lida com os events do sensor.

    Esta é uma outra maneira de obter o título magnético sem ser afetado por pitch ou roll.

     private final static double PI = Math.PI; private final static double TWO_PI = PI*2; case Sensor.TYPE_ROTATION_VECTOR: float[] orientation = new float[3]; float[] rotationMatrix = new float[9]; SensorManager.getRotationMatrixFromVector(rotationMatrix, rawValues); SensorManager.getOrientation(rotationMatrix, orientation); float heading = mod(orientation[0] + TWO_PI,TWO_PI);//important //do something with the heading break; private double mod(double a, double b){ return a % b; } 

    Descobri que, em certos models de smairtphones, a ativação da câmera pode alterair os dados COMPASS … 1/10 grads … (relacionado à luz da cena)

    cena preta … 1/2 …. cena muito branca (10 ou mais graduados)

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.