Madgwick 在 iOS 上的传感器融合算法

Posted

技术标签:

【中文标题】Madgwick 在 iOS 上的传感器融合算法【英文标题】:Madgwick's sensor fusion algorithm on iOS 【发布时间】:2013-07-22 12:49:45 【问题描述】:

我正在尝试在 ios 上运行 Madgwick's sensor fusion algorithm。由于代码是开源的,我已经将它包含在我的项目中,并使用提供的传感器值调用方法。

但该算法似乎期望传感器测量值在不同的坐标系中。 Apple CoreMotion 传感器系统位于右侧,Madgewick 位于左侧。这是different coordinate systems 的图片。两个系统都遵循右手法则。 对我来说,似乎围绕 z 轴旋转了 90 度。但这不起作用。

我还尝试按照other *** posts for WP 的建议翻转 x 和 y(并反转 z)轴,但这也不起作用。那你有提示吗? 如果 Madgwick 的算法输出可以与 CoreMotion 输出 (CMAttitudeReferenceFrameXMagneticNorthZVertical) 在同一个系统中,那就完美了。

此外,我正在为 iPhone 上的 betaDef 寻找良好的工作价值。 betaDef 是一种比例增益,目前设置为 0.1f。

任何有关如何实现目标的帮助将不胜感激。

【问题讨论】:

你能完成任务吗? 不,抱歉。不再拥有 Mac。 感谢您的快速回复 请问什么已经有效了? Madgwick 滤波器的工作原理如下: 1) 使用当前姿态以角轴形式计算加速度计/磁力计姿态误差 2) 将这些误差中的一部分减去陀螺仪轴角形式 3) 更新姿态四元数积分校正轴 -角度值。您有这些步骤中的任何一个单独工作吗? Madgwick 的过滤器应在任何参考系中工作,但生成的四元数将在输入数据的参考系中。我相信你可能还有另一个问题。如果按原样应用过滤器会得到什么? 嗨弗利克斯。你解决问题了吗? 【参考方案1】:

我不确定如何在目标 c 中编写此代码,但这是我在 vanilla c 中完成坐标转换的方法。我还想旋转方向,使 +y 为北。这种翻译也体现在下面的方法中。

此方法需要一个 wxyz 形式的 4 元素四元数,并以相同格式返回一个翻译后的四元数:

void madgeq_to_openglq(float *fMadgQ, float *fRetQ) 
  float fTmpQ[4];
  // Rotate around Z-axis, 90 degres:
  float fXYRotationQ[4] =  sqrt(0.5), 0, 0, -1.0*sqrt(0.5) ;

  // Inverse the rotation vectors to accomodate handedness-issues:
  fTmpQ[0] = fMadgQ[0];
  fTmpQ[1] = fMadgQ[1] * -1.0f;
  fTmpQ[2] = fMadgQ[2];
  fTmpQ[3] = fMadgQ[3] * -1.0f;

  // And then store the translated Rotation into ret:
  quatMult((float *) &fTmpQ, (float *) &fXYRotationQ, fRetQ);


// Quaternion Multiplication operator. Expects its 4-element arrays in wxyz order 
void quatMult(float *a, float *b, float *ret) 
  ret[0] = (b[0] * a[0]) - (b[1] * a[1]) - (b[2] * a[2]) - (b[3] * a[3]);
  ret[1] = (b[0] * a[1]) + (b[1] * a[0]) + (b[2] * a[3]) - (b[3] * a[2]);
  ret[2] = (b[0] * a[2]) + (b[2] * a[0]) + (b[3] * a[1]) - (b[1] * a[3]);
  ret[3] = (b[0] * a[3]) + (b[3] * a[0]) + (b[1] * a[2]) - (b[2] * a[1]);

  return;

希望有帮助!

【讨论】:

以上是关于Madgwick 在 iOS 上的传感器融合算法的主要内容,如果未能解决你的问题,请参考以下文章

自动驾驶感知算法实战11——多传感器融合感知方案详解

自动驾驶感知算法实战11——多传感器融合感知方案详解

多传感器分布式融合算法——多传感器网络协同目标跟踪和定位

多传感器数据融合算法综述

matlab代码复现:目标跟踪多传感器融合非线性滤波等探讨及技术支持

自动驾驶感知算法实战15——纯视觉感知和传感器融合方案对比,特斯拉九头蛇的进化