来自加速度计和磁力计的俯仰、横滚和偏航

Pitch, roll and yaw from accelerometer and magnetometer

我想做一些基于旋转向量的工作。问题是大多数 Android 设备没有陀螺仪传感器(也没有旋转矢量传感器)。我认为有一种方法可以通过使用加速度计(用于俯仰和滚动)和磁力计(用于偏航)来计算四元数的近似值。问题是它们的值不受最大值限制(对于俯仰和滚动我可以使用 G=9.81 并尝试过滤额外的加速度)。

有人可以帮我找到一个近似解吗?

float[] rotationMatrix = new float[16];
float[] rotationMatrixRemapped = new float[16];
float[] accMagOrientation = new float[3];

SensorManager.getRotationMatrix(rotationMatrix, null, oldAccelerometerVals, oldMagnetometerVals);
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_MINUS_X, rotationMatrixRemapped);
SensorManager.getOrientation(rotationMatrix, accMagOrientation);