【问题标题】:How does the WP7 CompassReading determine the TrueHeading from the MagneticHeading?WP7 CompassReading 如何从 MagneticHeading 中确定 TrueHeading?
【发布时间】:2012-02-23 19:13:53
【问题描述】:

我已将来自How to: Get Data from the Compass Sensor for Windows Phone 的代码安装到我的开发者解锁的运行 Mango 的 HTC Trophy 7 手机上。

返回的磁北航向似乎是正确的。我将它与传统的指南针和 iPhone 指南针应用程序进行了比较,并且方向或多或少是相同的。

但是 CompassReading.TrueHeading 返回的值似乎有很大偏差。

对于我的位置,我将magnetic declination 查找为:

纬度:41° 22' 36.5" S 经度:173° 16' 34.9" E 磁偏角:22° 2' EAST 偏角是积极的 倾角:-66° 49' 磁场强度:56492.9 nT

手机显示磁偏角约为东 130°。

我不认为是我对演示代码的实现导致了问题,因为我从市场上为许多其他应用程序获得了相同的错误值。

手机/框架如何设置 TrueHeading 的值?

我是否需要对定位服务做一些事情才能确定正确的值?

我试过asking HTC for support,但他们表示这可能是操作系统问题。

我也在Microsoft Answers - HTC Trophy 7 can't determine true north correctly when using the compass上问过类似的问题

【问题讨论】:

    标签: windows-phone-7 windows-phone-7.1 magnetometer


    【解决方案1】:

    我们花了很长时间研究不同的读数以及它们的含义。我建议将您从您的应用程序中获得的结果与市场上为您提供北方方向的其他应用程序之一进行比较。例如HeadsUpCompass(我们的)、Compass VO、Compass 7 是我检查过的。

    我的经验是,当手机不平整时,CompassReading 会关闭。因此,我们使用 Motion API 来计算手机竖直时的手机航向,以及手机平放时的 Compass API。我检查了 HUC 的代码,我们使用的是 compassSensor.CurrentValue.TrueHeading 有标题。这在 HTC HD7、Mazza 和 Trophy(我们当时拥有的)上进行了测试。

    希望对你有帮助

    【讨论】:

    • 谢谢,我正在查看手机上正在运行的 HeadsUpCompass。我已允许使用位置并将其设置为 Geographic North。报告的 22.1° 偏角似乎是正确的,但方向已完全确定。我开始怀疑我的手机或最终填充 CompassReading 结构的内部 DLL 有问题。
    • 如果您认为是您的手机有问题,花点时间尝试正确校准传感器是值得的。我们试图在帮助页面中写指令,但我认为它们在磁偏角的解释中丢失了。尝试按照 MSDN 中的描述以八字形挥动。或者将手机指向每个方向(北、南、东、西、上、下)约 10 秒。
    • 我完成了你为图 8 和稳健步骤描述的步骤,我唯一实现的就是逗我的同事:)。校准前后的精度均为 5°。周一,我将与我们当地的 Microsoft 代表会面,因此我将与其他手机进行一些比较。
    【解决方案2】:

    我打赌你住在南半球。

    据我所知,Mango 存在返回正确偏角的软件问题, 这只发生在南半球。

    已经有一段时间了,但遗憾的是没有补丁或错误修复......

    由于它在北半球有效,生活在北半球的人们声称它在许多论坛上运行良好。

    【讨论】:

    • 我在新西兰。我陷入了试图向 Microsoft/Nokia/HTC 报告此错误的兔子洞。我得出的唯一结论是,要么 a) 微软没有人关心这个问题,要么 b) 微软没有人会承认这个问题。我对 WP8 抱有希望,但我听说过同样问题的报告。如果有机会,我会在我的 Windows 8 平板电脑上尝试一下。
    • 我刚刚注意到一些可能很关键的事情并提出了一个想法,我认为这是可行的,如果有办法手动将磁偏角值传递给系统......有人知道如何??
    • 什么鬼!?我在 Lumia 800 上发现了一个令人难以置信的事实!!当手机顶部的充电器打开时,正北上升到 350,关闭时,正确上升到 360……有人注意到这一点吗?
    • 手机中的软件需要计算软硬铁偏移量才能正确确定磁场强度。可能是打开盖子会使当前型号失效,尤其是在连接电缆的情况下。
    【解决方案3】:

    我已经开始通过将 Microsoft.Devices.Sensors.dll 从以下位置加载到 ILSpy 来跟踪正在发生的事情:

    %Program Files%\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\Microsoft.Devices.Sensors.dll

    CompassReading 上有一个从 CompassNativeSample 实例获取 TrueHeading 值的内部构造函数。

    internal CompassReading(CompassNativeSample nativeSample)
    {
        this = default(CompassReading);
        this.Timestamp = nativeSample.header.TimeStamp;
        this.HeadingAccuracy = (double)nativeSample.wErrorMargin;
        this.TrueHeading = (double)nativeSample.wBearing;
        this.MagnetometerReading = new Vector3(nativeSample.vecMagCalibrated.X, nativeSample.vecMagCalibrated.Y, nativeSample.vecMagCalibrated.Z);
        this.MagneticHeading = (uint)nativeSample.wBearing - nativeSample.dwDeclAngle;
    }
    

    然后根据 TrueHeading (wBearing) 和 dwDeclAngle 确定 MagneticHeading?这让我有点困惑,因为 MagneticHeading 似乎是正确的。

    尽我所知,CompassNativeSample 是通过 SensorsNative.ddl 的 COM 互操作出现的。下面就是一个黑盒子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多