c - 如何计算 mpu6050 的倾斜角度?

标签 c embedded gyroscope mpu6050

我正在构建一个自平衡机器人,我已经成功配置了陀螺仪 mpu6050,现在我有六个读数 Ax、Ay、Az 和 Gx、Gy、Gz。我的问题是如何计算 Ax、Ay、Az 和 Gx、Gy、Gz 的倾斜角?

这是我目前知道的,如有错误请指正:

我可以计算在水平位置测量的 G 中的重力 Ax=Ay=0 和 Az=1。我使用它来查找倾斜角度,如 angle_accel = arctg( Ay/sqrt( Ax^2 + Az^2 ) )。但我不确定我的倾斜是否在 Ay 方向?

我可以通过积分得到陀螺仪的角度。我的陀螺仪在 1 秒内被读取 (Gx) 590 次。 float 角度;//陀螺仪角度angle = angle + Gx;//求和 590 次即角度 += Gx*590;//1 秒结束时结束

这会给我正确的角度吗? 自平衡机器人是否向Gx方向倾斜?

最佳答案

在理想情况下,您可以积分两倍的角加速度。但是在实践中,有一个重要的偏差:它不能正常工作。

唯一可行的解​​决方案是合并来自加速度计、陀螺仪和磁力计的数据。这就是我们所说的AHRS .有两个工作解决方案:

  • 卡尔曼滤波器:难以理解但正确实现后可靠
  • Madgwick's algorithm : 更容易实现,但不太可靠

On this page , 你会发现一个 MPU-9250 的实现(源代码和示例),它是你的 MPU-6050 的老大哥

关于c - 如何计算 mpu6050 的倾斜角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47857640/

相关文章:

使用宏的 C 变量分配

assembly - 为什么在从引导加载程序跳转到应用程序之前需要更新堆栈指针

android - Android 可穿戴设备上加速度计和陀螺仪数据的连续感知

c - 在 OCIAQDeq() 中使用 NULL 指针

c - 为什么我的两个计算函数都会出现 Unresolved external 系统错误(错误 LNK2019)?

c - 如何用纯C语言播放flash文件?

embedded - 为嵌入式系统编译Pascal代码(AT89C51RC2)

c - 改进 C ReplaceString 函数的建议?

android - 通过android api或内核在陀螺仪上自定义灵敏度设置?

Android 加速度计和陀螺仪