获取数据的SENSOR_TYPE_GRAVITY的工作机制是什么? – Android
作者:互联网
我有一个从Android手机加速度计获得的3-D加速度矢量(a,b,c).
我想计算这个向量(a,b,c)和重力向量之间的角度,它精确地指向下方.
我注意到在Android中,有一种方法可以在电话坐标系的上下文中使用重力矢量而不是世界坐标系.只需使用传感器类型SENSOR_TYPE_GRAVITY,我就可以得到三维重力矢量(d,e,f).由于两个矢量都在相同的坐标系下,因此电话坐标系统.通过简单的矢量内积,可以很容易地找到它们的角度.
找到此角度后,即使我们从电话坐标系移动到真实坐标系,角度也保持不变.
我的问题:
SENSOR_TYPE_GRAVITY背后的工作机制是什么?
我不认为有另一种硬件可以测量重力.因此,测量重力的只是测量仪.重力如何提取我们的结果?
我在问,因为我担心这种获得引力的方式的准确性.
如果它不准确,我可以实现一个LPF来自己过滤直流分量,重力.我不确定从SENSOR_TYPE_GRAVITY获取它是否比我自己更准确.
==================================更新=============== ========================
为了澄清,我可以使用以下代码正确获取BOTH加速度和重力数据吗?
通过正确,我的意思是加速度和重力属于同一个特定的时刻吗?我需要在一个瞬间使用这些值.因此,加速度为时间= 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];
}
}
解决方法:
三个传感器Sensor.TYPE_ACCELEROMETER,Sensor.TYPE_GRAVITY和Sensor.TYPE_LINEAR_ACCELERATION通过等式相关
"Sensor.TYPE_ACCELEROMETER" = "Sensor.TYPE_GRAVITY" + "Sensor.TYPE_LINEAR_ACCELERATION"
如果您注册所有三个的更新,您会发现Sensor.TYPE_ACCELEROMETER始终首先到达,然后是Sensor.TYPE_GRAVITY和Sensor.TYPE_LINEAR_ACCELERATION,并且值始终满足该等式.在内部,Android使用过滤,特别是卡尔曼滤波器来分离两者.
低通滤波器是做类似事情的简单方法.然而,很多想法都会进入Android机制,所以我敢肯定,如果低通滤波器更好,那么Android就会实现这一点.
标签:android-sensors,gravity,android 来源: https://codeday.me/bug/20190831/1778568.html