我正在尝试在我的Android手机(Nexus 4)上制作应用程序,该手机将用于模型船.我添加了低通滤波器来滤除传感器的gitter.
但是,当手机背面平放时,指南针才稳定.如果我把它向上倾斜,(例如转动一个嘘声的页面),那么指南针标题就会消失 - 多达50*.
我已经使用Sensor.TYPE_GRAVITY和Sensor.TYPE_ACCELEROMETER对Sensor.TYPE_MAGNETIC_FIELD进行了尝试,效果相同.
我已经使用了这里提到的解决方案以及许多其他地方.我的数学并不好,但这必定是一个常见的问题,我发现没有一个API可以解决这个问题令人沮丧.
我已经在这个问题上工作了3天并且仍然没有找到任何解决方案,但是当我使用Catch的Compass时,无论手机倾斜多少,它们都能保持稳定.所以我知道这一定是可能的.
我想做的就是创建一个指南针,如果手机指向北方,那么指南针将向北读取,而当手机通过任何其他轴(滚动或俯仰)时,指南针不会跳转.
在我不得不放弃我的项目之前,任何人都可以请求帮助.
谢谢,亚当
我长期以来一直遇到这个问题.此代码应输出加速度计的dx,dy,dz以及dx的运行总和.它还应输出方位角,俯仰和滚动.
我已经使用了这里给出的信息,但无济于事.
此代码无法正确输出音高,方位角或滚动.它分别为最后三个文本视图输出0.0,-0.0,-0.0.
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
accelerometerValues = event.values.clone();
case Sensor.TYPE_MAGNETIC_FIELD:
geomagneticMatrix = event.values.clone();
sensorReady = true;
break;
default:
break;
}
if (geomagneticMatrix != null && accelerometerValues != null && sensorReady) {
sensorReady = false;
float[] R = new float[16];
float[] I = new float[16];
SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticMatrix);
float[] actual_orientation = new float[3];
SensorManager.getOrientation(R, actual_orientation);
tvXCoordinate.setText(accelerometerValues[0] + "");
tvYCoordinate.setText(accelerometerValues[1] + "");
tvZCoordinate.setText(accelerometerValues[2] + "");
floatXTotal += accelerometerValues[0];
tvXTotal.setText(floatXTotal + "");
tvAzimuth.setText(actual_orientation[0] + "");
tvPitch.setText(actual_orientation[1] + ""); …Run Code Online (Sandbox Code Playgroud)