我很难理解我在下面包含的方程的数学推导。这段代码是 SparkFun IMU 库中示例的一部分,可在此处找到。有人可以帮我理解使用 arctan 函数来估计滚动、俯仰和偏航的理论吗?以及如何使用磁力计数据来获得正确的偏航估计?我在网上找到的所有资源都没有以我能理解的方式回答这些问题。
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;