Наша проблема такая же.У меня также была такая же проблема, когда я создавал простой проект дополненной реальности.Решение состоит в том, чтобы использовать экспоненциальное сглаживание или функцию скользящего среднего.Я рекомендую экспоненциальное сглаживание, потому что для этого нужно хранить только одно предыдущее значение.Пример реализации доступен ниже:
private float[] exponentialSmoothing( float[] input, float[] output, float alpha ) {
if ( output == null )
return input;
for ( int i=0; i<input.length; i++ ) {
output[i] = output[i] + alpha * (input[i] - output[i]);
}
return output;
}
Альфа-коэффициент сглаживания (0 <= альфа <= 1).Если вы установите альфа = 1, выход будет таким же, как вход (без сглаживания).Если вы установите альфа = 0, выход никогда не изменится.Чтобы удалить шум, вы можете просто сгладить значения акселерометра и магнитометра. </p>
В моем случае я использую значение альфа-акселерометра = 0,2 и значение альфа-магнитометра = 0,5.Объект будет более устойчивым, а движение довольно красивым.