M. *_*yan 8 trigonometry accelerometer magnetometer compass-geolocation
我有一个加速度计和磁力计,每个都产生原始的X,Y和Z读数.由此我需要确定物体的磁航向.
我在触发器上的表现并不是很好,但是我已经把一个对设备的旋转做出很好反应的公式放在一起,但也响应了人们认为不相关的运动,例如将设备倾斜到这样的状态.这种方式对指向的方向没有影响.如平放和"滚动"设备.
我认为我用于计算磁航向的公式很好,但我认为我输入的俯仰和滚动弧度是错误的.
所以我想我的问题的核心(除非有人实际上有一个公式就是这样做),你是如何用弧度计算角度的,使用加速度计进行俯仰和滚动.
其次,标题公式本身的任何信息都会很棒.
根据您的应用程序所需的准确性,您可能需要解决几个问题:
加速度计轴是否已校准?我见过 MEM 加速度计的轴不是相互垂直的,并且每个轴的响应特性显着不同(通常 X 和 Y 会匹配,而 Z 会不同)。您需要根据设备提供的任何物理读数来合成理想的 XYZ 轴。(谷歌“加速度计校准”。)
磁力计轴是否已校准?与上面的问题类似,但检查起来要困难得多:生成均匀的校准磁场非常困难。如果您使用环境地磁场,您将需要仔细控制工作环境和工具的局部磁场。(谷歌“磁力计校准”。)
加速度计和磁力计单独校准后,需要相对彼此校准它们的轴。由于这两种器件通常焊接到 PCB 上,因此几乎肯定会出现严重的未对准情况。在许多情况下,电路板布局和器件参数甚至可能不允许 XYZ 轴相互对应!从实验室的角度来看,这可能是最难的部分,因此我建议您使用具有两种传感器并且已经校准的其他硬件(例如 iPhone 或 Android 手机 - 但在之前验证设备)进行直接比较使用)。通常,这是通过调整前两个校准矩阵直到它们生成彼此正确对齐的矢量来实现的。
只有在生成相互校准的磁力和加速度计矢量之后,您才能应用其他受访者建议的解决方案。
我只描述了静态解决方案,其中磁力计和加速度计相对于局部重力和磁场都是静止的。如果您需要在系统快速移动时实时生成响应,则需要考虑每个传感器的时间行为。有两种基本方法可以做到这一点: 1) 对每个传感器应用时域滤波器,以便它们的输出共享公共时域(通常会增加一些延迟)。2)使用预测建模实时修改传感器输出(延迟更少,但噪声更多)。
我见过卡尔曼滤波器用于此类应用,但在矢量域中应用它们可能需要使用四元数而不是欧拉矩阵。四元数在计算上更容易使用(与矩阵相比,所需的操作更少),但我发现它们更难以理解和正确理解。
或者,您可以选择一条完全不同的路径,并使用统计和数据拟合来一步完成上述所有工作。考虑如下问题:给定 6 个输入值(XYZ 每个来自未校准的磁力计和加速度计)和对设备的参考(假设它是手持式的,并且外壳上画有箭头),输出代表表壳上箭头所指的磁力轴承,以及箭头相对于重力矢量的高度(表壳倾斜)。
使用校准的参考设备(如上所述),将其与要校准的设备配对,并在设备处于不同方向时获取数百个数据点。然后使用强大的数学软件包(例如 Matlab、MathCAD、R 或 SciPy)来设置和求解非线性方程以创建变换矩阵。