我有一个加速度计和磁力计,分别产生原始的X,Y和Z读数。由此,我需要确定一个物体的磁航向。

我不太擅长触发,但我整理了一个公式,可以很好地响应设备的旋转,但也可以响应人们认为不相关的运动,例如将设备倾斜到这样的角度。不会影响其指向的方式。例如将其平放并“滚动”设备。

我认为用于计算磁航向的公式很好,但是我认为输入的俯仰和横滚弧度是错误的。

因此,我想我的问题的核心(除非有人实际上有一个公式可以做到这一点)是如何使用加速度计测量俯仰和横滚,以弧度为单位计算角度。

其次,关于标题公式本身的任何信息都会很棒。

最佳答案

根据您的应用程序要求的精度,您可能需要解决几个问题:

  • 加速度计的轴是否已校准?我见过MEM加速度计的轴不互相垂直,并且每个轴的响应特性都明显不同(通常X和Y会匹配,Z会不同)。您将需要根据设备提供的任何物理读数来合成理想的XYZ轴。 (Google“加速度计校准”。)
  • 磁力计的轴是否已校准?与上述类似的问题,除了难以检查之外:生成统一的校准磁场非常困难。如果使用周围的地磁场,则需要仔细控制工作环境和工具的局部磁场。 (Google“磁力计校准”。)
  • 分别校准加速度计和磁力计之后,需要相对于彼此的轴进行校准。由于这两种设备通常都焊接到PCB上,因此几乎可以保证存在明显的未对准情况。在许多情况下,电路板的布局和设备参数甚至可能不允许XYZ轴相互对应!从实验室的角度来看,这可能是最难的部分,因此,我建议您使用同时具有两种传感器且已校准的其他硬件(例如iPhone或Android手机)进行直接比较,但请在进行设备之前进行验证用)。通常,这可以通过调整先前的两个校准矩阵来实现,直到它们生成相对于彼此正确对齐的矢量为止。
  • 只有在生成相互校准的磁和加速度计矢量之后,才能应用其他受访者建议的解决方案。

  • 我仅描述了静态解决方案,其中磁力计和加速度计相对于局部重力和磁场均不动。如果您需要在系统快速移动时实时生成响应,则需要考虑每个传感器的时间行为。有两种基本方法可以做到这一点:1)将时域滤波器应用于每个传感器,以使它们的输出共享一个公共(public)时域(通常会增加一些延迟)。 2)使用预测建模实时修改传感器输出(延迟更少,但噪声更多)。

    我已经看到卡尔曼滤波器用于此类应用程序,但将其应用在矢量域中可能需要使用四元数而不是欧拉矩阵。四元数更易于在计算中使用(与矩阵相比,所需的运算更少),但我发现四元数更难以理解和正确处理。

    或者,您可以选择一条完全不同的路径,并使用统计信息和数据拟合一步一步完成上述所有工作。考虑以下问题:给定6个输入值(每个XYZ分别来自未校准的磁力计和加速度计)和对该设备的引用(假设它是手持式的,并且 shell 上画有一个箭头),输出一个代表 shell 上的箭头指向的磁性轴承,以及箭头相对于重力矢量的高度( shell 的倾斜)。

    使用经过校准的引用设备(如上所述),将其与要校准的设备配对,并获取数百个数据点,并且设备的方向不同。然后,使用功能强大的数学程序包(例如Matlab,MathCAD,R或SciPy)来设置和求解非线性方程式,以创建转换矩阵。

    关于accelerometer - 使用原始加速度计和磁力计数据计算磁航向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3120954/

    10-11 22:09