背景:我正在开发一款应用,其核心功能包括从Android手机获取线性加速值等。我还计划提供设备以及应用程序安装,因为我们的目标客户主要是组织,系统是本地部署的,而不是通过商店。
困境:现在,在选择设备时,设备中需要哪些硬件传感器才能可靠地获取LINEAR_ACCELERATION
指标?
在搜索时,我发现LINEAR_ACCELERATION
是“融合”传感器,它使用硬件和/或软件实现的组合从ACCELEROMETER
中减去重力因子读数。
我发现了here:
TYPE_LINEAR_ACCELERATION,TYPE_GRAVITY,TYPE_ROTATION_VECTOR是“融合”传感器,分别返回线性加速度,重力和旋转矢量(四元数)。没有定义如何实现这些。在某些设备上,它们以h / w实现,在某些设备上,它们使用加速度计+磁力计,在其他一些设备上使用陀螺仪。
那里没有太多其他信息。那么有人可以提供更多相关信息吗?
提前致谢。
答案 0 :(得分:1)
不完全是答案,但据我所知,ACCELEROMETER不是一个非常准确的传感器。如果设备没有移动,它应该向下显示9.8。好吧,我做了一个应用程序只显示X Y Z读数并在许多不同的设备上运行它。 Z读数从8到11,两个设备放在同一个移动车中,显示不同的X和Y读数......
答案 1 :(得分:1)
经过大量的试验和各种设备的错误,我想我现在有一个粗略的想法:
首先,从此android-developers forum post:
TYPE_LINEAR_ACCELERATION,TYPE_GRAVITY,TYPE_ROTATION_VECTOR 是“融合”传感器,它们分别返回线性加速度,重力和旋转矢量(四元数)。 未定义如何实施。在某些设备上,它们以h / w实现,在某些设备上,它们使用加速度计+磁力计,在其他一些设备上使用陀螺仪。
所以就是这样。
现在我从试验和错误中发现,只有加速度计的设备不提供 LINEAR_ACCELERATION 传感器(可能有例外,某些设备可能仍然有传感器,但没有设备我试过那个)。
因此,要获得 LINEAR_ACCELERATION 传感器,您必须至少拥有一个磁力计或陀螺仪 - 这在INR 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]);
}
但请注意,在我的测试中,我发现这个功能不如实际传感器读数那么可靠,但它适用于大多数应用。
希望有人觉得这很有用。 欢呼声。
答案 2 :(得分:-1)
TYPE_LINEAR_ACCELERATION需要陀螺仪。