`

android加速度感应

 
阅读更多

1.android测量数据
(1)android设备坐标系

按照上图所示,将手机平放在桌面上来看,手机的左下角是坐标原点,水平向右为x轴,水平向前为y轴,由x轴和y轴正方向叉乘形成的方向为z轴,当手机平放时,z轴指向天空的方向。(2)方向传感器
android的方向传感器可以获取3个数据。
orientation0:y轴在水平面上的投影偏离正北方向的角度,范围0~359度,正北为0,正东为90,正南为180,正西270。
orientation1:y轴和y轴在水平面上投影之间的角度,即y轴与水平面的夹角。
orientation2:x轴和x轴在水平面上投影之间的角度,即x轴与水平面的夹角。
(3)加速度传感器
android的加速度传感器可以获取3个数据。
accelerometerX:x轴方向的加速度-重力加速度在x轴上的分量。
accelerometerY:y轴方向的加速度-重力加速度在y轴上的分量。
accelerometerZ:z轴方向的加速度-重力加速度在z轴上的分量。
根据上述的两个传感器,能够测量出手机x,y,z轴相对于地面参照系的方向和手机相对于手机参照系的加速度。
因为我们项目的需要,要度量出手机相对于地面参照系的加速度,所以需要进行一些计算。
2.相对于地面参照系的加速度的计算
思路:将相对于手机坐标系的3个加速度相对于地面参照系的3个方向分解,再将分解后的加速度分量根据地面参照系的3个方向进行相加合成。得到相对于地面参照系的加速度。
在计算之前,先定义地面参照系的3个方向,垂直向上的方向为1,水平向北的方向为2,水平向东的方向为3.
(1)y轴
首先求y轴的单位向量在地面参照系中3个方向的分量。(这里的o1为orientation1,以此类推)
     y0 = (-Math.sin(o1));
     y1 = Math.cos(o1)*Math.cos(o0);
     y2 = Math.cos(o1)*Math.sin(o0);
(2)x轴
     temp = Math.acos(-(Math.tan(o1)*Math.tan(o2)));
     x0 = (-Math.sin(o2));
     x1 = Math.cos(o2)*Math.cos(o0+temp);
     x2 = Math.cos(o2)*Math.sin(o0+temp);
(3)z轴
     z0 = x2*y1-x1*y2;
     z1 = x0*y2-x2*y0;
     z2 = x1*y0-x0*y1;
(4)计算相对于地面参照系的3个方向的加速度(这里的ax为accelerometerX,以此类推)
a0 = ax*x0+ay*y0+az*z0+SensorManager.STANDARD_GRAVITY;(这里加上标准重力加速度以抵消默认的重力加速度)
a1 = ax*x1+ay*y1+az*z1;
a0 = ax*x2+ay*y2+az*z2
这样的a0,a1,a2数据即为手机相对于地面参照系的绝对加速度了。
(5)
当 x=y=0 时,手机处于水平放置状态。
当 x=0 并且 y>0 时,手机顶部的水平位置要大于底部,也就是一般接听电话时手机所处的状态。
当 x=0 并且 y<0 时,手机顶部的水平位置要小于底部。手机一般很少处于这种状态。
当 y=0 并且 x>0 时,手机右侧的水平位置要大于左侧,也就是右侧被抬起。
当 y=0 并且 x<0 时,手机右侧的水平位置要小于左侧,也就是左侧被抬起。
当 z=0 时,手机平面与水平面垂直。
当 z>0 时,手机屏幕朝上。
当 z<0 时,手机屏幕朝下。
(6)
  方向传感器返回值的单位是角度,有三个值分别是
  values[0]: 方位角
  values[1]: 倾斜角
  values[2]: 旋转角
  如同加速度传感器一样,首先Android中 x,y,z 定义是以水平放置在的手机的右下脚为参照系坐标原点
  x 方向就是手机的水平方向,右为正
  y 方向就是手机的水平垂直方向,前为正
  z 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负
 (7)
     方向角的定义是手机y轴 水平面上的投影 与 正北方向的夹角。 (值得范围是 0 ~ 359 其中0=North, 90=East, 180=South, 270=West)
  倾斜角的定义是手机y轴 与水平面的夹角 (手机z轴向y轴方向移动为正 ,值得范围是 -180 ~ 180)
  旋转角的定义是手机x轴 与水平面的夹角 (手机x轴离开z轴方向为正, 值得范围是 -90 ~ 90)
   (8)
      需要注意的是,由于地球固有的重力加速度g (值为9.8 m/s^2),
  因此现实中实际加速度值应该是 z方向返回值 - 9.8 m/s^2.
  比如你以 2 m/s^2 的加速度将手机抛起,这时z方向的返回值应该是 11.8 m/s^2.
  反之若以手机以2 m/s^2 的加速度坠落,则z方向的返回值应该是 7.8 m/s^2.
  x,y方向则没有上述限制。
分享到:
评论

相关推荐

    android加速度感应平衡球

    "android加速度感应平衡球"就是一个很好的实例,它展示了如何利用Android系统提供的传感器API来实现一个基于加速度感应的动态游戏。 平衡球游戏的基本原理是,通过加速度感应器获取设备在X、Y、Z三个轴上的加速度...

    android:加速度感应器

    在Android系统中,加速度感应器(Accelerometer Sensor)是一种重要的硬件传感器,它能够检测设备在三维空间中的加速度变化。加速度感应器通常用于移动设备,如智能手机和平板电脑,来感知设备的动态运动,例如倾斜、...

    android感应器开发之加速度、方向传感器

    在Android中,加速度传感器的数据通过`Sensor.TYPE_ACCELEROMETER`获取,返回的是一个包含三个值的数组,分别对应x、y、z轴的加速度。 1. **获取加速度数据** Android提供了`SensorManager`类来管理和注册感应器...

    android 利用重力感应监听

    在onSensorChanged方法中,我们可以获取到X、Y、Z三个轴上的重力加速度值。通过分析这些值,可以判断出手机是处于正放、横放还是翻转状态。例如,当来电时,可以通过检测Z轴的值变化来实现静音功能: ```java if ...

    Android使用Sensor感应器获取用户移动方向(指南针原理)

    在Android平台上,获取用户移动方向的关键在于利用Sensor感应器,特别是磁场感应器和加速度感应器。Android系统提供了丰富的传感器API,使得开发者能够方便地获取设备的各种运动数据。本篇文章将深入探讨如何利用...

    采集安卓手机输入过程中重力感应器、线性加速度感应器、加速度感应器和陀螺仪的变化数据 用于训练姿态识别模型

    在本文中,我们将深入探讨如何利用安卓手机的重力感应器、线性加速度感应器、加速度感应器和陀螺仪收集数据,并将其应用于姿态识别模型的训练。这涉及到人工智能领域中的一个重要分支——运动和姿态估计。 首先,让...

    android_重力感应demo

    在Android平台上,重力感应是通过传感器服务(Sensor Service)来实现的,它允许开发者获取设备的物理运动数据,如重力、加速度等。这个"android_重力感应demo"是一个示例项目,旨在帮助初学者理解如何从设备获取并...

    利用android手机自带的加速度传感器和磁场传感器确定手机的姿态

    在本主题中,我们将深入探讨如何利用Android手机内置的加速度传感器和磁场传感器来确定手机的姿态,尤其适用于Android 4.0及以上版本。 首先,加速度传感器(Accelerometer)测量设备在三个正交轴(X、Y、Z)上的...

    android 多种感应器demo

    - **线性加速度感应器(Linear Acceleration Sensor)**: 去除重力影响后,仅显示设备的运动加速度。 - **旋转矢量感应器(Rotation Vector Sensor)**: 结合陀螺仪和磁力计数据,提供设备的完整旋转信息。 - **...

    Android 小球重力感应 代码

    在这个项目中,我们将会探讨如何通过Android系统的加速度计来实现小球的动态移动,模拟真实世界的重力感应效果。 首先,我们需要了解Android的SensorManager类,它是Android SDK提供的用于管理设备上各种传感器的...

    Android应用源码之Android重力感应跑步测速应用-IT计算机-毕业设计.zip

    Android系统提供了一个Sensor框架,允许开发者访问设备的各种传感器,如加速度计、陀螺仪、磁力计等。在这个跑步测速应用中,核心就是加速度计,它能检测到设备在三个维度上的运动变化,通过这些变化可以推算出用户...

    Android重力感应实例

    其中,重力感应主要依赖于加速度计,它能够检测到设备在三个轴(X、Y、Z)上的线性加速度,包括地球引力和设备运动产生的加速度。 二、Android传感器API 1. `SensorManager`类:这是Android SDK中处理传感器事件的...

    Android重力感应Demo

    在Android平台上,重力感应是通过传感器服务(Sensor Service)来实现的,它允许开发者获取设备的各种物理状态信息,如重力、加速度、陀螺仪等。在本"Android重力感应Demo"中,我们将深入探讨如何利用Android SDK中的...

    Android小球重力感应运动(有碰撞声)源码

    例如,我们可以关注加速度传感器(Accelerometer),它能够检测到设备在三个轴向(x, y, z)上的加速度变化,这些变化通常反映了设备的移动和重力方向。 在描述中提到的小球运动,关键在于如何将传感器数据转化为屏幕上...

    Android基于Sensor感应器获取重力感应加速度的方法

    本文实例讲述了Android基于Sensor感应器获取重力感应加速度的方法。分享给大家供大家参考,具体如下: FETC项目指导老师提出了新的需求,想要在游戏地图中表现出用户用户当期移动的方向,再用GPS的话显然很不靠谱,...

    Android 重力感应游戏-疯狂的小球

    Android设备中的加速度计是实现重力感应的关键硬件。加速度计可以检测设备在三个轴(x、y、z)上的加速度变化,包括由于重力引起的静止状态下的加速度。通过读取这些数据,开发者可以计算出设备的方向和倾斜角度,...

    基于Android加速度传感器,距离传感器实现手机防盗

    【作品名称】:基于Android加速度传感器,距离传感器实现手机防盗 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: ...

    android Sensor各种感应器源码

    android Sensor各种感应器源码 加速度感应器,重力,方向。磁场感应器

    android重力感应源代码

    在Android平台上,重力感应功能是通过Android Sensor框架来实现的,它允许应用程序获取设备的运动数据,包括重力、加速度、陀螺仪等。本文将深入探讨Android重力感应源代码的相关知识点,帮助开发者理解和实现这一...

Global site tag (gtag.js) - Google Analytics