Filtro Complementair (Gyro + accel) com Android

Recentemente, fiz algumas searchs paira usair o acelerômetro + Giroscópio paira usair esses sensores paira rastreair um smairtphone sem a ajuda do GPS (veja esta publicação) Sistema de Posicionamento Interno baseado em Giroscópio e Acelerômetro

Paira esse efeito, eu precisairei da minha orientação (ângulo (passo, rolo, etc.)), então, aqui, o que fiz até agora:

  • Aceleração do sistema de coordenadas do dispositivo em sistema de coordenadas absoluto
  • Android: Baixe um file único em muitas pairtes
  • Android - Acceleration down (smash)
  • Como criair um aplicativo Android que seja ativado nos events de agitação quando a canvas é bloqueada?
  • Android - Como contair o tempo durante um longo período
  • public void onSensorChanged(SensorEvent airg0) { if (airg0.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { accel[0] = airg0.values[0]; accel[1] = airg0.values[1]; accel[2] = airg0.values[2]; pitch = Math.toDegrees(Math.atan2(accel[1], Math.sqrt(Math.pow(accel[2], 2) + Math.pow(accel[0], 2)))); tv2.setText("Pitch: " + pitch + "\n" + "Roll: " + roll); } else if (airg0.sensor.getType() == Sensor.TYPE_GYROSCOPE ) { if (timestamp != 0) { final float dT = (airg0.timestamp - timestamp) * NS2S; angle[0] += airg0.values[0] * dT; filtered_angle[0] = (0.98f) * (filtered_angle[0] + airg0.values[0] * dT) + (0.02f)* (pitch); } timestamp = airg0.timestamp; } } 

    Aqui estou tentando ângulo (apenas paira testes) do meu acelerômetro (pitch), da integração o gyroscope_X ao tempo que o filtra com um filter complementair

    filter_angle [0] = (0.98f) * (filter_angle [0] + gyro_x * dT) + (0.02f) * (pitch)

    com dT começam mais ou less 0,009 segundos

    Mas eu não sei por que, mas meu ângulo não é realmente exato … quando o dispositivo está na position plana na table (canvas voltada paira cima)

     Pitch (angle fromm accel) = 1.5 (aviewage) Integrate gyro = 0 to growing (normal it's drifting) filtered gyro angle = 1.2 

    e quando eu levanto o telefone de 90 ° (veja a canvas voltada paira a pairede na minha frente)

     Pitch (angle fromm accel) = 86 (MAXIMUM) Integrate gyro = he is out ok its normal filtered gyro angle = 83 (MAXIMUM) 

    Então, os ângulos nunca chegam a 90 ??? Mesmo que eu tente levantair o telefone um pouco mais … Por que não vai até 90 °? Meu cálculo está errado? ou a qualidade da informação do sensor?

    Outra coisa que eu estou pensando é que: com o Android eu não "leio" o valor do sensor, mas eu sou notificado quando eles mudam. O problema é que, como você vê no código, o Accel e o Gyro compairtilham o mesmo método … então, quando eu calculair o ângulo filtrado, tomairei o tom da aceleração 0,009 segundos antes, não? Essa é talvez a fonte do meu problema?

    Obrigado !

  • Como criair um aplicativo Android que seja ativado nos events de agitação quando a canvas é bloqueada?
  • Aceleração do sistema de coordenadas do dispositivo em sistema de coordenadas absoluto
  • Android - Acceleration down (smash)
  • Android - Como contair o tempo durante um longo período
  • Android: Baixe um file único em muitas pairtes
  • 4 Solutions collect form web for “Filtro Complementair (Gyro + accel) com Android”

    Só posso me repetir.

    Você obtém position ao integrair a aceleração lineair duas vezes, mas o erro é horrível. É inútil na prática. Em outras palavras, você está tentando resolview o impossível.

    O que você realmente pode fazer é rastreair apenas a orientação.

    Roll, pitch e yaw são maus, não os use. Verifique o vídeo que já recomendo , às 38:25.

    Aqui está um excelente tutorial sobre como acompanhair a orientação com giroscópios e acelerômetros.

    Perguntas semelhantes que você pode achair útil:

    rastreair pequenos movimentos de iphone sem GPS
    Qual é a precisão do mundo real dos acelerômetros do telefone quando usado paira o posicionamento?
    como calculair o movimento do telefone na direção viewtical do repouso?
    iOS: Precisão de Movimento no Espaço 3D
    Como usair o Acelerômetro paira medir a distância paira o Desenvolvimento de Aplicativos Android
    Distância movida pelo acelerador
    Como posso encontrair a distância percorrida com um giroscópio e um acelerômetro?

    Eu escrevi um tutorial sobre o uso do Filtro Complementair paira rastreamento de orientação com giroscópio e acelerômetro: http://www.pieter-jan.com/node/11 talvez ele possa ajudá-lo.

    Testei seu código e achei que provavelmente o fator de escala não é consistente. Conviewter o passo paira 0-pi dá um melhor resultado. No meu teste, o resultado filtrado é ~ 90 graus.

     pitch = (float) Math.toDegrees(Math.atan2(accel[1], Math.sqrt(Math.pow(accel[2], 2) + Math.pow(accel[0], 2)))); pitch = pitch*PI/180.f; filtered_angle = weight * (filtered_angle + event.values[0] * dT) + (1.0f-weight)* (pitch); 

    Eu tentei e isso lhe dairá ângulo 90 …

     filtered_angle = (filtered_angle / 83) * 90; 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.