c++ - IMU 的加速度计和陀螺仪的姿态估计?

标签 c++ embedded euler-angles imu

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

 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;

最佳答案

假设 ay 和 az 是磁力计给出的距原点的偏移量,则 atan(ay, az) 将为您提供产生该偏移量的角度。

sqrt(ay * ay + az * az) 遵循勾股定理,为您提供“偏移三角形”第三边的长度,以便能够计算出音高。 -ax 来自音调的定义方式。

关于c++ - IMU 的加速度计和陀螺仪的姿态估计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866808/

相关文章:

c++ - 在 VS 2010 Build 中创建 ATL DCOM 对象失败

android - 将值从 Sensor.TYPE ORIENTATION 转换为欧拉角?

c++ - 下面用代码写的四元数的变换是什么?

c - 如何在微 Controller 硬件复位之前保存一些数据?

embedded - 固件工程师可以从软件工程师那里学到什么?

node.js - 如何在Three.js中从欧拉得到原始旋转四元数

c++ - 在 Windows 上的 cmake 中包含 soci

c++ - 在 while 循环结束时清除 C++ 字符串

c++ - boost::lambda::bind 表达式是否会阻止内联/是否有其他形式不会?

assembly - 程序计数器不前进