我很难理解下面包含的方程式的数学推导。这段代码是来自 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/