来自 IMU 的加速度计和陀螺仪的姿态估计?

用户11271728

我很难理解我在下面列出的方程的数学推导。这段代码是来自 SparkFun IMU 库的示例的一部分,可在此处找到有人可以帮助我理解使用反正切函数来估计横滚、俯仰和偏航背后的理论吗?磁力计数据如何用于获得正确的偏航估计?我在网上能找到的所有资源都没有以我能理解的方式回答这些问题。

 float roll = atan2(ay, az);
 float pitch = atan2(-ax, sqrt(ay * ay + az * az));

 float heading;
 if (my == 0)
   heading = (mx < 0) ? PI : 0;
 else
 heading = atan2(mx, my);

 heading -= EARTH_DECLINATION * PI / 180;

 if (heading > PI) heading -= (2 * PI);
 else if (heading < -PI) heading += (2 * PI);

 // Convert everything from radians to degrees:
 heading *= 180.0 / PI;
 pitch *= 180.0 / PI;
 roll  *= 180.0 / PI;
克利福德

atan2(y,x) 是角度 theta,如下图所示:

在此处输入图片说明

在三个维度中,您有三个平面,并且 atan2() 应用于来自 x、y 和 z 的一对,具体取决于您为哪个平面计算 theta(滚动、俯仰、偏航)。

当处于稳定速度时(即不改变速度或方向),ax、ay、az 值各自仅测量加速度的重力分量。加速时数值会不准确。在这一点上,您必须更聪明一些,通过结合来自其他传感器(如陀螺仪或磁力计和其他加速器)的信息 - 即当固定 ax、ay、az 总和为 1G 时 - 其他任何东西,并且存在额外的加速度. 加速器测量加速度,但这包括重力加速度。也就是说,当速度稳定时,加速器是相对于重力的倾斜传感器。

磁力计计算通过其 x 和 y 分量确定相对于北的角度,并补偿真北和磁北之间的差异(磁偏角)。当磁力计的 x 和 y 分量与磁场对齐时,它们最大,因为它们正交安装,它们的相对值使用 atan2(mx,my) 解析为单个方向。x 和 y 从常规顺序交换,因为罗盘方向顺时针增加,而数学角度逆时针增加。

在实践中,您需要使用传感器功能来组合来自陀螺仪(角速度)、加速器和磁力计的信息,并且可能也应用一些启发式方法来准确跟踪运动。这些传感器中的每一个都有不同的混杂因素,并且某些测量元素重叠,因为单个外力可以对多个传感器产生影响。这可用于区分不同种类的运动和姿态。它很复杂,这可能是为什么它不尝试处理它的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android:如何同步多个 IMU 传感器(加速度计/陀螺仪/磁性)?

将 IMU 传感器(加速度计、陀螺仪)读数及其时间戳导出到数据文件中

使用加速度计和陀螺仪(MPU6050)计算位移

对加速度计和陀螺仪的时间序列数据进行下采样

改进了加速度计和陀螺仪的倾斜角和横滚角的计算

对加速度计,陀螺仪,录音的本机性能做出反应

如何从Javascript访问加速度计/陀螺仪数据?

Android穿戴式加速度计/陀螺仪传感器

颤振加速度计/陀螺仪传感器滞后

加速度计和陀螺仪及其在Android手机中的功耗

如何更新TI SensorTag以增加每秒间隔的加速度计和陀螺仪的输出

给定来自加速度计的加速度,如何对模块空间中的位置进行建模?

加速度计,陀螺仪和磁力计

Matlab上来自加速度计txt数据的cell2mat错误以及如何绘制

Apple Watch中的陀螺仪和加速度计

同时实现陀螺仪和加速度计?

陀螺仪和加速度计倒置

如何配置传感器(加速度计或陀螺仪)以在用户摇晃或旋转手机时执行某些操作?

有什么方法可以校准Windows Phone设备中的陀螺仪/指南针/加速度计?

加速度计方程

加速度计QML

加速度计搅动

BLE 加速度计

Windows的陀螺仪和加速度计数据?

使用加速度计,陀螺仪和指南针来计算设备在3D世界中的运动

正确使用陀螺仪和加速度计的正确方法,可在ANDROID的任何轴上获得可靠的电流角度

陀螺仪返回用户加速度的单位

集成Android加速度计以查找速度和位置

LibGDX加速度计-Android