我正在使用IMU计算角度,如你所知,这涉及到很多数学问题。为了在任何时刻获得角度,应用了每次读数的时间戳,用于确定我在等式中使用的刷新率/更新率。
这个想法是为了得到一个值,我可以使用它作为相对于整秒(1000毫秒)的速率,我做-:1/(1000/ TimeStamp差)/陀螺标度值,当手动完成时会产生一个非常小的小数,用C++做这件事每次都会产生0,这是令人困惑的,因为它的确切顺序我应该做它。
提前感谢;
开尔文
#include "stdafx.h"
typedef struct {
double Accel_X; /*!< Accelarometer value X axis */
double Accel_Y; /*!< Accelarometer value Y axis */
double Accel_Z; /*!< Accelarometer value Z axis */
double Gyroscope_X; /*!< Gyroscope value X axis */
double Gyroscope_Y; /*!< Gyroscope value Y axis */
double Gyroscope_Z; /*!< Gyroscope value Z axis */
__int16 Temperature; /*!< Temperature in degrees */
__int32 TimeStamp; /*!< Time in Ms when measurement was taken */
bool isPopulated; /*!< Indicates if the current instance has been populated */
} MPU6050_Raw_Result_Calib;
MPU6050_Raw_Result_Calib LatestResultRaw_Calib[2];
float xAngle;
double gyroScale = 65.5;
double calc()
{
double actualRate;
if (!LatestResultRaw_Calib[0].isPopulated && !LatestResultRaw_Calib[1].isPopulated)
return 0;
__int16 refreshRate = LatestResultRaw_Calib[0].TimeStamp - LatestResultRaw_Calib[1].TimeStamp;
actualRate = 1 / (1000 / refreshRate) / gyroScale;
xAngle += LatestResultRaw_Calib[0].Gyroscope_X * actualRate;
return xAngle;
}
int main()
{
LatestResultRaw_Calib[0].Gyroscope_X = 1;
LatestResultRaw_Calib[0].isPopulated = true;
LatestResultRaw_Calib[0].TimeStamp = 1565;
LatestResultRaw_Calib[1].Gyroscope_X = 15;
LatestResultRaw_Calib[1].isPopulated = true;
LatestResultRaw_Calib[1].TimeStamp = 1500;
while (1)
{
printf("%f ", calc());
}
}发布于 2017-08-30 22:12:23
在你的方程式和定义中,使用双格式ie。1.0、1565.0等等
https://stackoverflow.com/questions/45962733
复制相似问题