我正在使用带有陀螺仪,测距仪和加速度计的三星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目标,没有明显差异。
答案 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);