0

背景:我正在开发一个应用程序,其核心功能包括从安卓手机等获取线性加速度值。我还计划提供设备以及应用程序安装,因为我们的目标客户主要是组织,并且系统是本地部署的,而不是通过商店。

困境:现在在选择设备时,设备中需要哪些硬件传感器才能LINEAR_ACCELERATION可靠地获取指标?

在搜索中,我发现这LINEAR_ACCELERATION是一个“融合”传感器,它使用硬件和/或软件实现的组合从ACCELEROMETER读数中减去重力因子。

我在这里找到了这个:

TYPE_LINEAR_ACCELERATION、TYPE_GRAVITY、TYPE_ROTATION_VECTOR 是“融合”传感器,它们分别返回线性加速度、重力和旋转矢量(四元数)。没有定义这些是如何实现的。在某些设备上,它们以硬件实现,在某些设备上,他们使用加速度计 + 磁力计,在其他一些设备上,他们使用陀螺仪。

那里没有太多关于此的其他信息。那么有人可以提供更多信息吗?

提前致谢。

4

3 回答 3

1

不完全是一个答案,但据我尝试,加速度计不是一个非常准确的传感器。如果设备没有移动,它应该向下显示 9.8。好吧,我制作了一个只显示 XYZ 读数的应用程序,并在许多不同的设备上运行它。Z 读数从 8 到 11,两个设备放在同一个移动推车中,显示不同的 X 和 Y 读数......

于 2016-02-14T15:10:05.487 回答
1

经过各种设备的大量试验和错误,我想我现在有了一个大概的想法:

首先,来自这个android-developers 论坛帖子

TYPE_LINEAR_ACCELERATION、TYPE_GRAVITY、TYPE_ROTATION_VECTOR是“融合”传感器,它们分别返回线性加速度、重力和旋转矢量(四元数)。没有定义这些是如何实现的。在某些设备上,它们以硬件实现,在某些设备上,他们使用加速度计 + 磁力计,在其他一些设备上,他们使用陀螺仪。

所以就是这样。

现在我从反复试验中发现,只有加速度计的设备不提供LINEAR_ACCELERATION传感器(可能有例外,有些设备可能仍然有传感器,但我试过的设备都没有)。

因此,要获得LINEAR_ACCELERATION传感器,您必须至少有一个磁力计或一个陀螺仪——这在 8000 卢比(120 美元)以下的智能手机中非常罕见。

现在,不是问题的一部分,而是如何编写代码以在这两种类型的设备上运行?

好吧,我最终做的是:

首先,检查设备是否有传感器:

Sensor linearAcceleration = sMgr.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),

if (linearAcceleration==null){
   hasLinearAccSensor = false;
}
else {
   hasLinearAccSensor = true;
}

如果你有传感器,那就太酷了!但如果你不这样做,那么你可以使用TYPE_ACCELEROMETER传感器并自己锻炼线性加速度。像这样的东西:

public void processPseudoAcceleration(SensorEvent event)
{
    // alpha is calculated as t / (t + dT)
    // with t, the low-pass filter's time-constant
    // and dT, the event delivery rate

    final float alpha = 0.8f;

    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

    float linear_acceleration[] = {0,0,0};

    linear_acceleration[0] = event.values[0] - gravity[0];
    linear_acceleration[1] = event.values[1] - gravity[1];
    linear_acceleration[2] = event.values[2] - gravity[2];

    setAccValues(linear_acceleration[0],linear_acceleration[1],linear_acceleration[2]);
}

但请注意,在我的测试中,我发现此功能不如实际传感器读数可靠,但它适用于大多数应用程序。

希望有人觉得这很有用。干杯。

于 2016-08-29T14:18:11.750 回答
-1

TYPE_LINEAR_ACCELERATION 需要陀螺仪。

于 2016-02-18T16:20:59.040 回答