Sensor de movimento vertical

Eu estou trabalhando em um aplicativo Android que requer a detecção de movimento vertical. Ao mover o tablet para cima, os sensores Gyroscope, Accelerometer e Linear Acceleration fornecem um valor correspondente indicando movimento para cima ou para baixo.

O problema que tenho é que esses sensores também lerão um movimento para cima / para baixo quando você inclina o tablet em direção ao usuário ou se afasta do usuário. Por exemplo, o valor x no giroscópio representa o plano vertical. Mas quando você inclina o dispositivo para frente, o valor x será alterado. Quando faço esse movimento, o mesmo sensor que lê o movimento vertical lê um valor para isso.

O mesmo vale para o resto dos sensores. Eu tentei usar a orientação acoplada com o giroscópio para fazer a declaração condicional, se o passo não está mudando, mas a variável x está subindo / descendo, então nós temos movimento vertical. O problema é que, se o usuário o mover para cima, mas ligeiramente inclinado, ele não funcionará mais. Eu também tentei fazer isso, se houver uma mudança na inclinação, então não há movimento vertical. Mas itera tão rapidamente que pode haver uma mudança na inclinação para 1/100 de segundo, mas para a próxima não há.

Existe alguma maneira que eu possa ler apenas mudanças verticais e não mudanças na afinação de dispositivos?

Aqui está o que eu quero detectar:

editar:

"Por favor, venha com uma definição matematicamente sólida do que você considera 'se movendo para cima'." Esta foi a minha pergunta inicial, como posso escrever uma função para definir quando o tablet está se movendo para cima ou para baixo? Eu considero uma tradução vertical se movendo para cima. Agora, como eu detecto isso? Eu simplesmente não sei por onde começar, obrigado.

questionAnswers(2)

yourAnswerToTheQuestion