我在这段代码中找不到什么问题。我正在尝试获取加速度计数据,但是当我尝试在设备上运行时,这是工作但不是正确的读数我认为计算中的问题,我用于陀螺仪的相同逻辑并采取适当的读数但加速度计输出显示{{1 }}
Accelx :3.56023e-09 Accely :1.76423e-42 Accelz :1.77404e-42
accel x的dmpmpu_demo文件:
accelX = accelerometer->Loop_Accelx();
accelY = accelerometer->Loop_Accely();
accelZ = accelerometer->Loop_Accelz();
for(int i = 0; i<2; i++) //averaging of accelerometer data upto 3 readings
{
float accelX1 = accelerometer->Loop_Accelx(); //storing the Accelx value from DmpMPU6050_Demo class
float accelY1 = accelerometer->Loop_Accely(); //storing the Accely value from DmpMPU6050_Demo class
float accelZ1 = accelerometer->Loop_Accelz(); //storing the Accelz value from DmpMPU6050_Demo class
accelX = accelX + accelX1;
accelY = accelY + accelY1;
accelZ = accelZ + accelZ1;
delay(1);
}
accelX = accelX/3;
accelY = accelY/3;
accelZ = accelZ/3;
if(numbercount == number){
emit Accelx_Data(accelX);
emit Accely_Data(accelY);
emit Accelz_Data(accelZ);
cout<<"Accelx :"<<accelX<<" Accely :"<<accelY<<" Accelz :"<<accelZ<<endl;
答案 0 :(得分:0)
你必须感知地球的重力加速度。这意味着你得到的矢量的垂直分量必须清楚地定义,你得到的矢量显然是零矢量。这是错误的,表示您没有从加速度计获得正确的值。检查一下。
下次发布完整代码会更好,因为代码中的任何地方都看不到全局accelX
,accelY
和accelZ
声明,实际来源可能是什么问题......我们还没有accelerometer->LoopAccel...()
原型的定义。
最后,不要像评论中所说的那样动摇它来感知数据。加速度计感知地球的引力,你可以改变它的方向,看看加速度矢量的变化。
答案 1 :(得分:0)
在dmpmpu.cpp文件中我添加了返回
#ifdef OUTPUT_READABLE_REALACCEL
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetAccel(&aa, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
return 3;
#endif
printf("\n");
用于计算没有数字计数的Accelero值
accelX = accelerometer->Loop_Accelx();
accelY = accelerometer->Loop_Accely();
accelZ = accelerometer->Loop_Accelz();
for(int i = 0; i<2; i++) //averaging of accelerometer data upto 3 readings
{
float accelX1 = accelerometer->Loop_Accelx(); //storing the Accelx value from DmpMPU6050_Demo class
float accelY1 = accelerometer->Loop_Accely(); //storing the Accely value from DmpMPU6050_Demo class
float accelZ1 = accelerometer->Loop_Accelz(); //storing the Accelz value from DmpMPU6050_Demo class
accelX = accelX + accelX1;
accelY = accelY + accelY1;
accelZ = accelZ + accelZ1;
delay(1);
}
accelX = accelX/ 0.16384;
accelY = accelY/ 0.16384;
accelZ = accelZ/ 0.16384;
最后我得到了像
这样的输出yaw :8.3854 pitch :8.3854 roll :8.3854
Accelx :54.9316 Accely :54.9316 Accelz :54.9316
yaw :-5.5964 pitch :-5.5964 roll :-5.5964
Accelx :42.7246 Accely :36.6211 Accelz :30.5176
yaw :-129.255 pitch :-129.255 roll :-91.2928
Accelx :36.6214 Accely :48.8281 Accelz :30.5176