Qt指南针-QMagnetometer的问题

龙鹰

由于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 <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不变。
  • magn值与setReturnGeoValues(true)一起使用。

我的问题是:

  • 磁力计工作正常吗?
  • 我是否必须将“微小”值转换为其他“电磁单位”或其他?
  • =>如何解决此问题?
龙鹰

问题在于Qt返回T中的值,而本机Android返回µT中的值。

我刚刚编写了一个本机Android磁力计应用程序,以验证我的传感器是否正常工作。Android返回的值如下:3。??? 或5。???。Qt返回的值如下:3.???e-06或5.???e-06

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章