【问题标题】:Compass give me crazy data, is calibration needed or it's the sensor broken?指南针给我疯狂的数据,是需要校准还是传感器坏了?
【发布时间】:2012-02-27 09:00:09
【问题描述】:

我正在处理安卓传感器数据。我的应用程序使用

SensorManager.getRotationMatrixFromVector(
            mRotationMatrix , event.values);

它一直运行良好,直到今天早上,旋转矩阵开始发送大量噪声数据(将 N 在一秒钟内更改为 W)。

我的代码没有问题,因为在星期五工作并且没有进行任何更改。我用的是市面上的指南针应用,指南针给出的是随机数据。

我已经在另一台平板电脑上测试了我的应用,它运行良好。

有人知道为什么会这样吗?传感器有问题?需要校准吗?

【问题讨论】:

    标签: android compass-geolocation android-sensors


    【解决方案1】:

    我在手机上用这些电子罗盘做了很多工作,很可能你的代码或传感器没有问题。

    相反,它很可能是您的环境存在问题。一直有磁场干扰地球磁场。从电气设备干扰到支撑建筑物的金属结构。归根结底,指南针只是一块磁铁。如果你站在一大块金属旁边,指南针会被它吸引并指向它而不是磁北极。

    试试这个: 安装GPS status 然后关闭所有过滤(设置... GPS和传感器...传感器过滤...无过滤)。 进行校准(图 8 波浪形的东西),然后将手机在桌子周围移动......靠近显示器、电缆等。你会看到它发疯了。信息完全不可靠。我过去发现将手机向右移动几英寸会完全改变它的读数。真正的指南针也是如此。严格来说,没有“问题”。该设备的指南针为自己分配了最强的磁场。即使是附近岩石的磁性成分也会干扰指南针。

    作为进一步的测试,我刚刚在安装了指南针应用程序的手机上放置了一个真实的(定向)指南针。真正的指南针现在指向除了磁北之外的任何地方。两个设备相互干扰。

    所以我的建议是.. 去一个开阔的地方,比如公园或田野,远离任何潜在的干扰和电力线,(如果你有一个真正的指南针来检查 GPS status 应用程序是否指向正确的方式),然后看看您的指南针是否按预期工作。

    额外:@resus 的答案在校准时也很重要。在每个轴上旋转手机几次。看起来很傻,但它确实可以正确校准。

    额外 2: 使用 GPS 的compass bearing 是否可能/实用?它需要设备在移动(步行速度应该没问题),但您无需担心任何干扰。如果您的 GPS 信号良好,它应该会给出准确的读数。

    额外 3: 我刚刚想到另一个想法。您可以尝试在传感器上应用低通滤波器。这意味着传感器读数的突然变化被过滤掉了..看看这个answer。如果这不能很好地发挥作用,那么网络上有很多算法供您选择。

    【讨论】:

    • 谢谢,我已经测试了 GPS 状态,并且工作正常,直到平板电脑在强磁场中过夜,可能是这样,我会打电话给支持
    • 就像 resus 说的那样尝试“3 轴”旋转。将其前后翻转约 3 次,然后将其侧向翻转 3 次,然后将其旋转(就像在桌子上旋转一样)3 次。我认为支持不会有帮助,因为它可能没有故障。尽量远离所有可能的干扰源 - 祝你好运
    • 我试图应用一个简单的低通滤波器,alpha 非常低(对于小的变化)但它不起作用,传感器不提供连贯的数据,所以它完全坏了。所以,人们,小心高磁场。
    【解决方案2】:

    如果您确实没有更改代码中的任何内容,并且它在其他设备上仍然可以正常工作,则表明该特定设备存在问题。

    当您的应用程序正在运行时(即指南针正在使用中),您应该能够以 8 的数字挥动它,以便自动重新校准指南针。您还应该确保您没有站在任何可能干扰读数的大块金属等旁边。

    您可以覆盖SensorEventListeneronAccuracyChanged() 方法,以便在指南针需要重新校准时(可能在精度下降到SENSOR_STATUS_ACCURACY_LOW 时)向用户显示一条消息。

    根据我在安卓手机上玩指南针的经验,它们可能非常不可靠......

    【讨论】:

      【解决方案3】:

      如果您的应用程序在另一台平板电脑上运行,而其他指南针应用程序在您的设备上无法运行,这可能是由于校准不当造成的。

      如上面的帖子所述,要进行校准,请将您的设备挥动成 8 字形。我只想补充一点,您应该为每个轴进行校准。这应该可以解决您的问题。

      【讨论】:

        【解决方案4】:

        如果不是校准错误,正如一些人已经回答的那样,可能是指南针经过了磁场,现在它被消磁了,所以它不能正常工作。

        您通常将平板电脑放在哪里?会不会是它靠近大型服务器或磁铁? 您应该检查指南针以防万一,与 android 的技术支持联系。

        希望对你有帮助。

        【讨论】:

          【解决方案5】:

          我认为问题是是否可以在不向罗盘发送任何数据的情况下进行校准。因为不是每个人都说指南针已按此视频中所示进行校准:https://support.google.com/maps/answer/6145351?hl=en 显然,除了建议用户在使用程序之前或当您获得太多更改时,您不能做任何其他事情。 例如在大约 25 毫秒内左右旋转 90 度。

          无论如何,我认为在开始获取数据之前给应用程序一些时间是很好的,因为它会在应用程序加载时给出一些不稳定的值(在短时间内没有移动的情况下太高和太低)。 只需让处理程序onSensorChanged() 用条件编码,并在onCreate() 处理程序上启动一个线程,几秒钟后它将设置boolean 为真。 然后您开始在onSensorChanged() 处理程序上捕获数据。

          这个线程也可以帮助检测传感器的精度,然后你可以弹出:In Android can I programmatically detect that the compass is not yet calibrated?

          我知道,因为我正在使用智能手机的指南针构建机器人,并且我有这种经验。因此,如果您正在制作机器人,请确保在智能手机的电子设备和硬件之间留出一定的距离,但请记住,它在任何指南针上:金属可以极大地改变电磁场。

          【讨论】:

            【解决方案6】:

            现在我有幸开发了一个带有HMC-5983MPU-6050 的机器人,可以通过使用其库与 Arduino 进行校准。

            该代码与其他 uController 兼容/可移植,但对于智能手机来说也不是那么容易,我想校准指南针、陀螺仪和加速度计所需的偏移量在 Android 的某些内部,在 SDK 中不可用。

            我回答之前认为校准可能仅适用于某些设备,但意识到必须如我之前所说。 所以,如果玩机器人是可能的,我的意思是它也很容易,但是当使用智能手机时,也许一些自定义固件作为 CyanogenMod 会带来研究设置偏移方式的可能性,但更重要的是运行从草图移植的一些程序(仅遵循其概念)首先获得它们...

            那么,祝你好运!同样正确的是,在两种设备(智能手机和我的机器人)中,都需要移动它们才能正常工作,正如我在最新答案的视频中向您展示的那样,这对机器人也很有帮助。

            祝你好运,这些东西很有趣,非常强大。

            【讨论】:

              猜你喜欢
              • 2020-03-27
              • 2011-07-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-04-08
              • 2013-06-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多