为什么TYPE_LINEAR_ACCELERATION在设备静止时会产生非零值?

时间:2016-03-04 10:10:09

标签: android ios wear-os

我正在测试Android上的TYPE_LINEAR_ACCELERATION传感器 - 我想以我认为的标准方式进行设置:

acceleration = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
...
sensorManager.registerListener(this, acceleration, kMotionUpdatePeriod);
...
public void onSensorChanged(SensorEvent event)
{
    switch(event.sensor.getType())
    {
        case Sensor.TYPE_LINEAR_ACCELERATION:
            Logger.info(this,"Linear Accel %.2f %.2f %.2f",event.values[0], event.values[1], event.values[2] );
            break;
     }
 }

我的理解是,LINEAR_ACCELERATION意味着使用传感器融合来消除加速度计读数的重力并产生设备正在经历的净加速度。

我在运行5.1.1的Android Wear手表(Sony SWR50)上对此进行了测试,当设备放在桌面上时,我得到了以下这些值:

03-04 09:58:58.309 Linear Accel -0.20 0.74 0.14
03-04 09:58:58.328 Linear Accel -0.20 0.70 0.14
03-04 09:58:58.341 Linear Accel -0.23 0.71 0.13

还在运行4.3的Galaxy S3上进行了测试,我得到了:

03-04 09:48:22.307 Linear Accel -0.13 -0.11 -0.39
03-04 09:48:22.412 Linear Accel -0.11 -0.09 -0.34
03-04 09:48:22.507 Linear Accel -0.09 -0.11 -0.42 

我预计会有一些错误 - 但当设备只是坐在桌面上时,这些值似乎很高。手表的总加速度约为0.7 m / s2,Galaxy的加速度为0.4 m / s2。

我也在iOS上开发此功能,而我在iOS设备上静止时获得的userAcceleration数据最多为0.01 m / s2,这是我认为您所期望的。

尝试使用LINEAR_ACCELERATION时,我是否缺少某些内容?

是否有其他人的数据更像是我在Android设备上从iOS获取的数据?

1 个答案:

答案 0 :(得分:1)

确定这么愚蠢的错误。

iOS使用G的单位表示加速度值,Android使用m / s2,因此差异为9.81。