android加速度
‘壹’ 利用Android的加速度传感器开发计步器时遇到的问题
没有研究过步行时候加速度的变化,加速度方向肯定只有一个,但用三个方向表示
SersorEvent.values中三个值放到坐标系上就能得到这个方向,貌似得用到高中数学啊,忘记了
‘贰’ 最近看android的传感器,想把手机坐标上的三个方向的加速度转换成相对于地面的加速度
你先算出地球坐标系和手机坐标系之间的旋转角度(getRotationMatrix和getOrientation)可以获取到。然后根据手机获取到的相对于手机坐标系的加速度值经过旋转矩阵计算获取到地球坐标系中的坐标值。
参见http://blog.csdn.net/godfrey90/article/details/6009135
‘叁’ android加速度传感器怎么使用
使用加速度传感器与其他传感器的方法大致相同,通过调用系统API就可以实现。分为以下几步:
1.获取SensorManager
2.使用SensorManager获取加速度传感器
3.创建自定义的传感器监听函数,并注册
4.相对应的,在合适位置实现注销监听器的调用
简单的代码如下:
public class MainActivity extends Activity {
private static final String TAG = "SensorTest";
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private TestSensorListener mSensorListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
// 初始化传感器
mSensorListener = new TestSensorListener();
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
@Override
protected void onResume() {
super.onResume();
// 注册传感器监听函数
mSensorManager.registerListener(mSensorListener, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
}
@Override
protected void onPause() {
super.onPause();
// 注销监听函数
mSensorManager.unregisterListener(mSensorListener);
}
private void initViews() {
mSensorInfoA = (TextView) findViewById(R.id.sensor_info_a);
}
class TestSensorListener implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
// 读取加速度传感器数值,values数组0,1,2分别对应x,y,z轴的加速度
Log.i(TAG, "onSensorChanged: " + event.values[0] + ", " + event.values[1] + ", " + event.values[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.i(TAG, "onAccuracyChanged");
}
}
}
‘肆’ android加速度传感器怎么去除重力的影响
如果手机需要在随意状态都去除的就需要做加速度值各方向的分量减除的,如果只是平行或者垂直放置就不需要了。只是要求分量会比较复杂一些。
加速度传感器是一种能够测量加速力的电子设备。加速力就是当物体在加速过程中作用在物体上的力,就好比地球引力,也就是重力。加速力可以是个常量,比如g,也可以是变量。加速度计有两种:一种是角加速度计,是由陀螺仪(角速度传感器)的改进的。另一种就是线加速度计。
‘伍’ 如何在android的驱动程序中对加速度传感器的数据进行方向和坐标的转
Android 是面向智能手机和其他便携式设备的最受欢迎的操作系统(OS)之一。它为多种传感器提供了标准的API 接口,包括加速度计。加速度计的标准API 定义了原始加速度数据的坐标系统。用户必须将从传感器中读取的原始数据转换为标准单位,并使其符合系统定义的坐标方向。本文介绍了Android 中的坐标系统是如何定义的,以及如何在Android 系统的驱动代码中对3 轴加速度计数据的方向和坐标进行转换。本文讨论的示例代码基于飞思卡尔的Android 2.2 和2.3 驱动程序,加速度计则以飞思卡尔的MMA8452Q 加速度传感器为例。
关键词:加速度计,传感器驱动,Android
一部智能手机或便携设备应具有Wi-Fi 和互联网功能,能够运行应用软件等诸多特征,而且一定会具有内置传感器。高端智能手机可能集成接近传感器,环境光传感器,3 轴加速度计,以及磁力计等多种传感器。 Android 2.3 添加了一些支持多种新型传感器的API,包括陀螺仪、旋转向量、线性加速度、重力和气压传感器等。应用软件可以使用这些新型传感器,将它们组合起来,就可以实现高精确度的高级运动检测功能。
3 轴加速度计或低g 值传感器是Android API 支持的传感器之一,具有特定的坐标系统,可以给应用程序提供标准的接口数据。坐标空间的定义与手机屏幕的默认方向有关
‘陆’ 如何获取android加速度传感器的值
sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE); aSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); sm.registerListener(myListener, aSensor, SensorManager.SENSOR_DELAY_NORMAL); sm.registerListener(myListener, mSensor,SensorManager.SENSOR_DELAY_NORMAL); SensorEventListener myListener =new SensorEventListener() { publicvoid onSensorChanged(SensorEvent sensorEvent) { if (sensorEvent.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) magneticFieldValues = sensorEvent.values; if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) accelerometerValues = sensorEvent.values; float[] values =newfloat[3]; float[] R = newfloat[9]; SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticFieldValues); SensorManager.getOrientation(R, values); //这里 values[0],values[1],values[2]里边的数据就是x y z 轴 分别的角度 } publicvoid onAccuracyChanged(Sensor sensor,int accuracy) {} };
‘柒’ android加速度传感器去除重力影响
gravity初值可以是0,其实无所谓,不用太离谱,一个常数都行,通过多次迭代都会稳定到实际的重力值附近。这个循环的迭代,实际上是一个一阶低通滤波,0.8应该是官方推荐的参数,但应该根据实际的需求可以适当调整,或者自己设计低通滤波。这里的低通滤波是这样的,因为重力一直稳定不变,频率很低,而其他方向的加速度不断变化,频率较高,所以用低通滤波可以将重力消减,但也不是绝对的去掉。