安卓传感器之加速度、线性加速度、重力传感器

15人阅读 评论(0) 收藏 举报
分类:

前面说到,安卓的加速度可以用Sensor.TYPE_ACCELEROMETER获取。
但是由于重力的影响,得到的数据都是加上了重力加速度在三个轴的分量。即在平放在水平桌面上,静止情况下加速度计的数据应该为9.8m2/s.等于当地的重力加速度。

如何求得重力加速度?
安卓中可以使用Sensor.TYPE_GRAVITY来获取。其实这个重力也是通过加速度计计算得来的。
重力属于低频成分,所以可以使用一个低通滤波器来过滤出重力。在安卓中,实现了一个最简单的一阶低通滤波器,本质上是一个加权平均窗口:

public void onSensorChanged(SensorEvent event)  
    {  
         // alpha 由 t / (t + dT)得到  
         // t为滤波器时间常量,为传感器单次采样时间  
         // dT为采样频率  

         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];  
    }  

event.values为当前加速度的值。
gravity为分离出的重力,减去重力的影响可以得到线性加速度linear_acceleration在安卓中可以利用Sensor.TYPE_LINEAR_ACCELERATION来直接得到。

把代码抽象一下,这个滤波的算法公式为

Y(n)=αX(n)+(1-α)Y(n-1)

其中α=滤波系数。一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,使得输出对输入有反馈作用。可以看到,α对滤波结果有很大影响。但α偏大,对当前值比较看重,系统灵敏度高,滤波效果不稳定,α偏小,对当前值抑制,系统滤波效果稳定,但对起伏变化不太敏感。

移动平均滤波器的频响曲线可以参考这里.

查看评论

关于安卓智能设备重力传感器检测重力加速度

package com.example.forcemeter;import java.util.Timer;import java.util.TimerTask;import android.hard...
  • aa1094143832
  • aa1094143832
  • 2014-10-18 15:38:44
  • 959

几种常用的传感器(加速度传感器、重力传感器、方向传感器、陀螺仪)简介

现在的手机或者其他便携设备中用到了越来越多的传感器,什么加速度传感器,方向传感器、重力传感器、陀螺仪、g-sensor、o-sensor等等,这些传感器到底是干什么用的,各自有什么特点,彼此之间又有什...
  • LEON1741
  • LEON1741
  • 2017-08-15 21:19:59
  • 8324

android 加速度传感器,重力传感器,线性加速度传感器

  • 2014年07月29日 10:33
  • 1.37MB
  • 下载

Android传感器(五):线性加速度传感器

与加速度传感器相似,event.values[]三个值代表XYZ方向上的加速度矢量。不包含重力加速度,当手机静止时,三个值均为0 采用之前建好的BaseActivity 初始化传感器 @Overrid...
  • d276031034
  • d276031034
  • 2016-06-17 14:33:10
  • 1167

android线性加速度传感器数据存储到手机的sd卡中

以前用FileOutputStream openFileOutput (String name, int mode)函数来保存txt文件,该函数的作用是:可以方便地在手机中创建文件,并返回文件输出流,...
  • baidu_28479651
  • baidu_28479651
  • 2016-07-07 16:17:06
  • 2235

android 传感器使用与开发----加速度传感器

该传感器的values变量的3个元素值分别表示X、Y、Z轴的加速值。例如,水平放在桌面上的手机从左侧向右侧移动,values[0]为负值;从右向左移动,values[0]为正值。读者可以通过本节的例子...
  • Jarlen
  • Jarlen
  • 2014-08-19 10:25:07
  • 2414

获取Android设备的方向 ,使用加速度重力传感器

带有g-sensor的Android设备上可通过API获取到设备的运动加速度,应用程序通过一些假设和运算,可以从加速度计算出设备的方向 获取设备运动加速度的基本代码是: S...
  • u012808234
  • u012808234
  • 2015-03-17 14:12:38
  • 1422

加速度传感器,重力传感器,线性加速度传感器

  • 2016年07月21日 15:48
  • 1.9MB
  • 下载

【Android 笔记 五】 Android Sensor感应器介绍(一)重力感应加速度获取

FETC项目指导老师提出了新的需求,想要在游戏地图中表现出用户用户当期移动的方向,再用GPS的话显然很不靠谱,所以想到了android强大的感应器。。。很多移动设备都内置了感应器,android通过S...
  • octobershiner
  • octobershiner
  • 2011-07-27 20:38:44
  • 44370

Android的重力传感器(3轴加速度传感器)简单实例

重力感应主要是依靠手机的加速度传感器(accelerometer)来实现         在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器。因为很多功能用户根本不care...
  • itas109
  • itas109
  • 2013-08-23 17:18:19
  • 6653
    新家地址
    个人资料
    持之以恒
    等级:
    访问量: 7万+
    积分: 1849
    排名: 2万+
    最新评论