我有一个加速度计和磁力计,分别产生原始的X,Y和Z读数。由此,我需要确定一个物体的磁航向。
我不太擅长触发,但我整理了一个公式,可以很好地响应设备的旋转,但也可以响应人们认为不相关的运动,例如将设备倾斜到这样的角度。不会影响其指向的方式。例如将其平放并“滚动”设备。
我认为用于计算磁航向的公式很好,但是我认为输入的俯仰和横滚弧度是错误的。
因此,我想我的问题的核心(除非有人实际上有一个公式可以做到这一点)是如何使用加速度计测量俯仰和横滚,以弧度为单位计算角度。
其次,关于标题公式本身的任何信息都会很棒。
最佳答案
根据您的应用程序要求的精度,您可能需要解决几个问题:
我仅描述了静态解决方案,其中磁力计和加速度计相对于局部重力和磁场均不动。如果您需要在系统快速移动时实时生成响应,则需要考虑每个传感器的时间行为。有两种基本方法可以做到这一点:1)将时域滤波器应用于每个传感器,以使它们的输出共享一个公共(public)时域(通常会增加一些延迟)。 2)使用预测建模实时修改传感器输出(延迟更少,但噪声更多)。
我已经看到卡尔曼滤波器用于此类应用程序,但将其应用在矢量域中可能需要使用四元数而不是欧拉矩阵。四元数更易于在计算中使用(与矩阵相比,所需的运算更少),但我发现四元数更难以理解和正确处理。
或者,您可以选择一条完全不同的路径,并使用统计信息和数据拟合一步一步完成上述所有工作。考虑以下问题:给定6个输入值(每个XYZ分别来自未校准的磁力计和加速度计)和对该设备的引用(假设它是手持式的,并且 shell 上画有一个箭头),输出一个代表 shell 上的箭头指向的磁性轴承,以及箭头相对于重力矢量的高度( shell 的倾斜)。
使用经过校准的引用设备(如上所述),将其与要校准的设备配对,并获取数百个数据点,并且设备的方向不同。然后,使用功能强大的数学程序包(例如Matlab,MathCAD,R或SciPy)来设置和求解非线性方程式,以创建转换矩阵。
关于accelerometer - 使用原始加速度计和磁力计数据计算磁航向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3120954/