在NDK中更改Android陀螺仪更新率

时间:2012-05-12 01:58:10

标签: android gyroscope

我正在使用带有陀螺仪,测距仪和加速度计的三星Galaxy sii手机。一切都在使用NDK。

我正在使用toadlet库来抽象出很多手机界面,但在该库中有设置采样率的功能,它调用了预期的NDK功能:

void AndroidSensorDevice::setSampleTime(int dt){
    if(mSensor!=NULL){
        ASensorEventQueue_setEventRate(mEventQueue,mSensor,dt*1000);
    }
} 

当我改变加速度计和万用表的采样率时,我大致看到了实际采样率的预期变化。然而,对于陀螺仪,它总是只以最快的速率更新,即无论我设置采样率到什么时候,我都会得到类似的时间差异:

I/toadlet (10266): dt= 0.619000
I/toadlet (10266): dt= 4.423000
I/toadlet (10266): dt= 0.511000
I/toadlet (10266): dt= 4.335000
I/toadlet (10266): dt= 0.586000
I/toadlet (10266): dt= 4.371000
I/toadlet (10266): dt= 0.586000
I/toadlet (10266): dt= 4.559000
I/toadlet (10266): dt= 0.340000
I/toadlet (10266): dt= 3.827000
I/toadlet (10266): dt= 0.617000
I/toadlet (10266): dt= 5.337000
I/toadlet (10266): dt= 0.154000
I/toadlet (10266): dt= 3.538000
I/toadlet (10266): dt= 0.556000
I/toadlet (10266): dt= 4.547000

即使尝试大量的采样率也没有效果。有没有人见过这个?

手机正在运行Android 2.3.5,我尝试使用android-9和android-14目标,没有明显差异。

1 个答案:

答案 0 :(得分:2)

根据setEventRate()函数的文档,您设置的采样率实际上只是一个提示,而不是明确的规范。虽然你看到的行为是不受欢迎的,但这并没有错。 由于大多数应用程序无论如何都需要集成陀螺仪输出,这种行为并非完全不合理。如果你确实需要较低的费率,我会建议将样本放在一起并根据时间戳读出结果。

/*
 * Sets the delivery rate of events in microseconds for the given sensor.
 * Note that this is a hint only, generally event will arrive at a higher
 * rate. It is an error to set a rate inferior to the value returned by
 * ASensor_getMinDelay().
 * Returns a negative error code on failure.
 */
int ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor const* sensor, int32_t usec);