我正在为我的Quadcopter项目使用Sparkfun esp32东西。它已经运行良好,但是我注意到由于缓慢的Pitch and Roll计算公式,Iam无法达到8kHz imu刷新率:
currAccel.x = (atan2(-filtered.y, filtered.z)*180.0)/M_PI;
currAccel.y = (atan2(filtered.x, sqrt(filtered.y*filtered.y + filtered.z*filtered.z))*180.0)/M_PI;
当然,我以1kHz的频率运行(由于加速度计的输出数据速率较慢)。最大还是可以做的是在7kHz左右。 甚至尝试在另一个线程上运行它,不幸的是结果相似。 看起来sqrt和atan2需要大量的计算时间。我已经看到了其他一些可能的方法来计算不带sqrt的俯仰和横滚,但现在我找不到了。有什么办法可以使它更快,即使是出于准确性或准确性的考虑?