我目前正在研究如何通过加速度计值获取方向值(偏航,俯仰,滚转)。 以下是我目前使用的方式,但方向值似乎是错误的,有没有我忽略的问题或错误? 非常感谢您的帮助!
if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accelerometerValues = event.values;
}
if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
magneticFieldValues = event.values;
}
SensorManager.getRotationMatrix(rotate, null, accelerometerValues,
magneticFieldValues);
SensorManager.getOrientation(rotate, rotationValues);
// change radian to degree
rotationValues[0] = (float) Math.toDegrees(rotationValues[0]);
rotationValues[1] = (float) Math.toDegrees(rotationValues[1]);
rotationValues[2] = (float) Math.toDegrees(rotationValues[2]);
答案 0 :(得分:1)
getRotationMatrix()和getOrientationMatrix使用的坐标轴不同。因此,您需要按如下方式旋转上面的旋转矩阵代码:
SensorManager.getRotationMatrix(rotate, null, accelerometerValues,
magneticFieldValues);
SensorManager.remapCoordinateSystem(rotate, SensorManager.AXIS_X, SensorManager.AXIS_MINUS_Z, rotate); //Overwriting rotate matrix with the rotated values
SensorManager.getOrientation(rotate, rotationValues);
答案 1 :(得分:0)
与北极相关的方向是rotationValues [2];
所以
float course = (float) Math.toDegrees(rotationValues[2]);
应该是正确的。
尝试校准(使用设备制作数字8)并查看其他应用是否显示正确的方向。用指南针检查。