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方向则没有上述限制。
发表评论
-
ScrollView嵌套Edittext
2015-04-08 18:26 841scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 493如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 693my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 943基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
MatrixCursor的使用
2015-01-19 09:49 1045ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 998一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11501.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1322Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2235android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 767SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1143Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 1004方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 671Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 667在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 1006关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 786有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 832究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 817首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 935https://developers.google.com/ ... -
android 安装删除软件
2013-07-08 17:19 11461、 Android.mk文件 LOCAL_PA ...
相关推荐
"android加速度感应平衡球"就是一个很好的实例,它展示了如何利用Android系统提供的传感器API来实现一个基于加速度感应的动态游戏。 平衡球游戏的基本原理是,通过加速度感应器获取设备在X、Y、Z三个轴上的加速度...
在Android系统中,加速度感应器(Accelerometer Sensor)是一种重要的硬件传感器,它能够检测设备在三维空间中的加速度变化。加速度感应器通常用于移动设备,如智能手机和平板电脑,来感知设备的动态运动,例如倾斜、...
在Android中,加速度传感器的数据通过`Sensor.TYPE_ACCELEROMETER`获取,返回的是一个包含三个值的数组,分别对应x、y、z轴的加速度。 1. **获取加速度数据** Android提供了`SensorManager`类来管理和注册感应器...
在onSensorChanged方法中,我们可以获取到X、Y、Z三个轴上的重力加速度值。通过分析这些值,可以判断出手机是处于正放、横放还是翻转状态。例如,当来电时,可以通过检测Z轴的值变化来实现静音功能: ```java if ...
在Android平台上,获取用户移动方向的关键在于利用Sensor感应器,特别是磁场感应器和加速度感应器。Android系统提供了丰富的传感器API,使得开发者能够方便地获取设备的各种运动数据。本篇文章将深入探讨如何利用...
在本文中,我们将深入探讨如何利用安卓手机的重力感应器、线性加速度感应器、加速度感应器和陀螺仪收集数据,并将其应用于姿态识别模型的训练。这涉及到人工智能领域中的一个重要分支——运动和姿态估计。 首先,让...
在Android平台上,重力感应是通过传感器服务(Sensor Service)来实现的,它允许开发者获取设备的物理运动数据,如重力、加速度等。这个"android_重力感应demo"是一个示例项目,旨在帮助初学者理解如何从设备获取并...
在本主题中,我们将深入探讨如何利用Android手机内置的加速度传感器和磁场传感器来确定手机的姿态,尤其适用于Android 4.0及以上版本。 首先,加速度传感器(Accelerometer)测量设备在三个正交轴(X、Y、Z)上的...
- **线性加速度感应器(Linear Acceleration Sensor)**: 去除重力影响后,仅显示设备的运动加速度。 - **旋转矢量感应器(Rotation Vector Sensor)**: 结合陀螺仪和磁力计数据,提供设备的完整旋转信息。 - **...
在这个项目中,我们将会探讨如何通过Android系统的加速度计来实现小球的动态移动,模拟真实世界的重力感应效果。 首先,我们需要了解Android的SensorManager类,它是Android SDK提供的用于管理设备上各种传感器的...
Android系统提供了一个Sensor框架,允许开发者访问设备的各种传感器,如加速度计、陀螺仪、磁力计等。在这个跑步测速应用中,核心就是加速度计,它能检测到设备在三个维度上的运动变化,通过这些变化可以推算出用户...
其中,重力感应主要依赖于加速度计,它能够检测到设备在三个轴(X、Y、Z)上的线性加速度,包括地球引力和设备运动产生的加速度。 二、Android传感器API 1. `SensorManager`类:这是Android SDK中处理传感器事件的...
在Android平台上,重力感应是通过传感器服务(Sensor Service)来实现的,它允许开发者获取设备的各种物理状态信息,如重力、加速度、陀螺仪等。在本"Android重力感应Demo"中,我们将深入探讨如何利用Android SDK中的...
例如,我们可以关注加速度传感器(Accelerometer),它能够检测到设备在三个轴向(x, y, z)上的加速度变化,这些变化通常反映了设备的移动和重力方向。 在描述中提到的小球运动,关键在于如何将传感器数据转化为屏幕上...
本文实例讲述了Android基于Sensor感应器获取重力感应加速度的方法。分享给大家供大家参考,具体如下: FETC项目指导老师提出了新的需求,想要在游戏地图中表现出用户用户当期移动的方向,再用GPS的话显然很不靠谱,...
Android设备中的加速度计是实现重力感应的关键硬件。加速度计可以检测设备在三个轴(x、y、z)上的加速度变化,包括由于重力引起的静止状态下的加速度。通过读取这些数据,开发者可以计算出设备的方向和倾斜角度,...
【作品名称】:基于Android加速度传感器,距离传感器实现手机防盗 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: ...
android Sensor各种感应器源码 加速度感应器,重力,方向。磁场感应器
在Android平台上,重力感应功能是通过Android Sensor框架来实现的,它允许应用程序获取设备的运动数据,包括重力、加速度、陀螺仪等。本文将深入探讨Android重力感应源代码的相关知识点,帮助开发者理解和实现这一...