android加速度传感器去除重力影响
小选De奶茶
2013-08-22
这是android developer网站提供的方法 public void onSensorChanged(SensorEvent event) { // alpha is calculated as t / (t + dT) // with t, the low-pass filter's time-constant // and dT, the event delivery... 这是android developer网站提供的方法
public void onSensorChanged(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.8;
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];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
请高手解释下,还有这个gravity初始值是多少,不能理解啊,不应该根据角度关系将重力分解到各个轴,再计算吗?
全部评论
如果手机需要在随意状态都去除的就需要做加速度值各方向的分量减除的,如果只是平行或者垂直放置就不需要了。只是要求分量会比较复杂一些。
加速度传感器是一种能够测量加速力的电子设备。加速力就是当物体在加速过程中作用在物体上的力,就好比地球引力,也就是重力。加速力可以是个常量,比如g,也可以是变量。加速度计有两种:一种是角加速度计,是由陀螺仪(角速度传感器)的改进的。另一种就是线加速度计。
当传感器静止时可以得到初始的Gravity值,通过计算欧拉角得到重力在传感器坐标系各个坐标轴上的分解值;
这是android developer网站提供的方法
public void onSensorChanged(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.8;
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];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
gravity初值可以是0,其实无所谓,不用太离谱,一个常数都行,通过多次迭代都会稳定到实际的重力值附近。这个循环的迭代,实际上是一个一阶低通滤波,0.8应该是官方推荐的参数,但应该根据实际的需求可以适当调整,或者自己设计低通滤波。这里的低通滤波是这样的,因为重力一直稳定不变,频率很低,而其他方向的加速度不断变化,频率较高,所以用低通滤波可以将重力消减,但也不是的去掉。
您可能感兴趣的社区主题
评论
选购仪器 上yiqi.com
仪器网络推广 品牌网上传播
长按识别二维码查看信息详情