我有一个从 Android 手机加速度计获得的 3-D 加速度矢量(a、b、c)。
我希望计算这个向量(a,b,c)和重力向量之间的角度,它正好指向下方。
我注意到在 Android 中,有一种方法可以在手机坐标系而不是世界坐标系的上下文中获取重力矢量。通过简单地使用 sensor type SENSOR_TYPE_GRAVITY
,我可以获得 3-D 重力矢量 (d, e, f)。由于两个向量都在同一个坐标系下,即电话坐标系。通过简单的向量内积,可以很容易地找到它们的角度。
找到这个角度后,即使我们从手机坐标系移动到现实世界坐标系,这个角度仍然保持不变。
我的问题:
背后的工作机制是SENSOR_TYPE_GRAVITY
什么?
我认为没有其他硬件可以测量重力。因此,只有加速度计测量重力。重力是如何从合成的加速中提取出来的?
我问是因为我担心这种获取重力的方式的准确性。
如果它不准确,我可以自己实现一个 LPF 来过滤直流分量,即重力。我不确定从那里获取它是否SENSOR_TYPE_GRAVITY
比我自己做的更准确。
=================================== 更新=============== =========================
澄清一下,我可以使用以下代码正确获取加速度和重力数据吗?
正确地说,我的意思是加速度和重力是否属于同一特定时刻?我需要在一个瞬间使用这些值。因此,加速度为时间=13:12:00 而重力为稍后时间的情况,例如时间=13:12:01 是不希望的。
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
acceleration[0] = event.values[0];
acceleration[1] = event.values[1];
acceleration[2] = event.values[2];
}
if (event.sensor.getType() == Sensor.TYPE_GRAVITY) {
gravity[0] = event.values[0];
gravity[1] = event.values[1];
gravity[2] = event.values[2];
}
}