0

我正在使用带有陀螺仪、磁力计和加速度计的三星 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 目标,没有明显区别。

4

1 回答 1

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);
于 2012-06-13T02:01:46.543 回答