Qt指南针 - QMagnetometer的问题

时间:2014-03-27 15:02:05

标签: android qt

由于Qt不支持Android上的QCompass类, 我决定建立自己的罗盘应用程序。

我将所需的Java类翻译成c ++,用于使用加速器和磁力计传感器构建指南针应用程序。


您可以在getRotationMatrix java方法中找到以下代码段:

 public static boolean getRotationMatrix(float[] R, float[] I,
 float[] gravity, float[] geomagnetic) {
 // TODO: move this to native code for efficiency
 float Ax = gravity[0];
 float Ay = gravity[1];
 float Az = gravity[2];
 final float Ex = geomagnetic[0];
 final float Ey = geomagnetic[1];
 final float Ez = geomagnetic[2];
 float Hx = Ey*Az - Ez*Ay;
 float Hy = Ez*Ax - Ex*Az;
 float Hz = Ex*Ay - Ey*Ax;
 final float normH = (float)Math.sqrt(Hx*Hx + Hy*Hy + Hz*Hz);
 ----> if (normH < 0.1f) {
 // device is close to free fall (or in space?), or close to
 // magnetic north pole. Typical values are  > 100.
 return false;
            }
    ...

我的问题是“if(normH&lt; 0.1f)”总是假的。 (我刚刚在代码中添加了一个箭头来显示该行)。

在我看来,问题是磁力计传感器会返回如下值:

  • magn [] = {-6.9375e-06,-9.125e-06,6.25e-06}
  • magn [] = {-6.6875e-06,-9.375e-06,6.5e-06}
  • magn [] = {-6.1875e-06,-9.375e-06,6.5e-06}
  • magn [] = {-5.9375e-06,-8.875e-06,6.5e-06}
  • magn [] = {-5.6875e-06,-9.375e-06,6.75e-06}
  • magn [] = {-5.6875e-06,-9.125e-06,6.75e-06}
  • magn [] = {-5.9375e-06,-8.875e-06,6.25e-06}
  • magn [] = {-5.9375e-06,-8.875e-06,6.5e-06} ...

加速度值:

  • accel [] = {-2.10605,0.919373,9.61426}
  • accel [] = {-2.1435,0.880215,9.65342}
  • accel [] = {-2.1435,0.880215,9.61426}
  • accel [] = {-2.10605,0.842759,9.65342} ...

normH总是这样:normH = 0.000110721 因此getRotationMatrix函数将始终返回false。

的信息:

  • 我正在使用QMagnetometer显示为magn [] = ...
  • 的值
  • setReturnGeoValues不会改变某些内容。
  • 幅度值采用setReturnGeoValues(true)。

我的问题是:

  • 磁力计是否正常工作?
  • 我是否必须将“微小”值转换为不同的“电磁单位”或其他内容?
  • =&GT;我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题是Qt返回T中的值,而原生Android返回的值是μT。

我刚刚编写了一个原生的Android Magnetometer应用程序来验证我的传感器是否正常工作。 Android返回的值如下:3。???或5。???。 Qt返回的值如下:3.???e或5。??? e-06