Android 加速度计和磁力计的倾斜问题
Android Tilt issue with Accelerometer and Magnetometer
我正在尝试使用以下代码检测偏航、俯仰和滚动:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor == mAccelerometer) {
System.arraycopy(event.values.clone(), 0, mLastAccelerometer, 0, event.values.length);
mLastAccelerometerSet = true;
} else if (event.sensor == mMagnetometer) {
System.arraycopy(event.values.clone(), 0, mLastMagnetometer, 0, event.values.length);
mLastMagnetometerSet = true;
}
if (mLastAccelerometerSet && mLastMagnetometerSet) {
SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);
SensorManager.getOrientation(mR, mOrientation);
mOrientation[0] = (float) Math.toDegrees(mOrientation[0]);
mOrientation[1] = (float) Math.toDegrees(mOrientation[1]);
mOrientation[2] = (float) Math.toDegrees(mOrientation[2]);
mLastAccelerometerSet = false;
mLastMagnetometerSet = false;
ManageSensorChanges();
}
}
除一个问题外,一切正常;
当 phone 上下颠倒或开始上下颠倒时(即使在人像模式下稍微向前倾斜),角度会变得乱七八糟...随机吐出角度!
为什么会这样 - 以及 - 有什么解决办法吗?
如果有人遇到这个问题:
Strange behavior with android orientation sensor
总而言之,问题出在欧拉角的使用上——所以除了使用四元数(适用于 OpenGL或 3D 投影)。
我在我的应用程序上使用它进行 2D 绘图(以创建视差效果),所以我最终使用了加速度计值(范围显然是 -9.8 到 9.8)......它工作得很好但很烦人简单的解决方案,满足我的粗略需求。此技术不适用于 3d 投影...如果需要精确测量,请参阅 https://bitbucket.org/apacha/sensor-fusion-demo。
我正在尝试使用以下代码检测偏航、俯仰和滚动:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor == mAccelerometer) {
System.arraycopy(event.values.clone(), 0, mLastAccelerometer, 0, event.values.length);
mLastAccelerometerSet = true;
} else if (event.sensor == mMagnetometer) {
System.arraycopy(event.values.clone(), 0, mLastMagnetometer, 0, event.values.length);
mLastMagnetometerSet = true;
}
if (mLastAccelerometerSet && mLastMagnetometerSet) {
SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);
SensorManager.getOrientation(mR, mOrientation);
mOrientation[0] = (float) Math.toDegrees(mOrientation[0]);
mOrientation[1] = (float) Math.toDegrees(mOrientation[1]);
mOrientation[2] = (float) Math.toDegrees(mOrientation[2]);
mLastAccelerometerSet = false;
mLastMagnetometerSet = false;
ManageSensorChanges();
}
}
除一个问题外,一切正常;
当 phone 上下颠倒或开始上下颠倒时(即使在人像模式下稍微向前倾斜),角度会变得乱七八糟...随机吐出角度!
为什么会这样 - 以及 - 有什么解决办法吗?
如果有人遇到这个问题:
Strange behavior with android orientation sensor
总而言之,问题出在欧拉角的使用上——所以除了使用四元数(适用于 OpenGL或 3D 投影)。
我在我的应用程序上使用它进行 2D 绘图(以创建视差效果),所以我最终使用了加速度计值(范围显然是 -9.8 到 9.8)......它工作得很好但很烦人简单的解决方案,满足我的粗略需求。此技术不适用于 3d 投影...如果需要精确测量,请参阅 https://bitbucket.org/apacha/sensor-fusion-demo。