xml地图|网站地图|网站标签 [设为首页] [加入收藏]

为前途A福睿斯应用开荒做企图,基础理论

2019-09-14 08:15栏目:企业文化
TAG:

谷歌眼镜最为高科技先驱设备,得到了广大人士的关注,尤其是谷歌眼镜的上市,更是让得到眼镜的开发者乐此不疲的进行探究,通常也会有些有趣发现。谷歌眼镜需要一些扩增实境来满足用户的需求,而如果能够开发出一些依靠谷歌眼镜的传感器操控的应用,那么无疑会对谷歌眼镜的使用带来更多功能。

版本记录

版本号 时间
V1.0 2017.08.05

近日,开发者就发现了谷歌眼镜中隐藏有14种没有公布在官方规格中的传感器。目前谷歌的Mirror API地理位置更新为每10分钟进行一次定位,这样的现状不能够让开发者们足够满意。但是隐藏传感器的发现,让人们多了更多想象。至于谷歌为什么隐藏了传感器的API接口,可能是为了让开发者能够容易的开发出一些AR应用。如果这些传感器未来被开启,那么第三方开发者很可能会开发出增强现实游戏了。

前言

我们的app很多都需要获取使用者的动作、方向以及其他和方位或者位置有关的参数,在ios中对应的框架就是CoreMotion,而在硬件对应的就是集成的加速计和陀螺仪。这几篇我们就从基础原理理论出发,讲一下相关的知识。

究竟谷歌眼镜里隐藏了哪些传感器呢?主要包括:MPL陀螺仪、MPL加速计、MPL磁场感应、MPL定向、MPL旋转矢量、MPL线性加速、MPL重力、LTR-506ALS光感应器、旋转矢量感应器、重力感应器、线性加速计、定向感应器、修正的陀螺仪、定位装置(网络定位、被动定位、GPS定位)等。

科普常识

一些iOS的应用,会有一些特殊的要求:

  • 电子罗盘指南针之类的应用,让我们知道方向。
  • 运动类型软件,让我们知道我们跑步多少公里。
  • 社交软件中的摇一摇功能,比如微信。
  • 游戏中扮演角色类中根据设备的晃动等进行操作。

其实,与这些功能相关的就是iOS中的一个核心运动框架CoreMotion.framework。这个框架,主要是为了访问加速度计陀螺仪的相关数据。 它不仅仅提供给你获得实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多算法,可以直接给你输出把重力加速度分量剥离的加速度,省去你的高通滤波操作,以及提供给你一个专门的设备的三维位置信息。

下面我们简单的了解一下这几种硬件的实现原理。

凡本网注明“来源:维库仪器仪表网” 的所有作品,转载请必须注明来源于本网,违者必究。

1. 陀螺仪

用在手机里面的陀螺仪都是MEMS陀螺仪,里面的微机械结构为振动件,通过测量旋转产生的科氏加速度来获得角速度。

用途:照相防抖,以及配合加速度计(有的还有磁传感器)形成的组合传感器来完成特定的功能(如惯性导航,还有玩游戏时的一些角速度测试)。

下面看一下陀螺仪的三维示意图。

图片 1

陀螺仪三维示意图

下面给出三个方向角度上的动态示意图。

图片 2

roll

图片 3

pitch

图片 4

yaw

标签: 陀螺仪 传感器

2. 加速度计

用在手机里的加速度计同样是MEMS的,也是由振动结构,由于外界加速度会影响结构的振动特性,由此来测量加速度。加速度几种有一种是线性加速度计,定义是:由于加速度计的输出包含了重力加速度,线性加速度计简单来说就是排除了重力加速度的影响得到的值。

用途:用途很多,只要跟手机运动相关的几乎都与加速度计有关(计步、手机的姿态测量、相关的游戏等等)。

下面给出就是三轴加速度计的传感器示意图,大家要注意的就是三个轴的正向是如何定义的。

图片 5

加速度传感器

大家除了看上面的3D效果图,还可以看下面这个图。

图片 6

加速度计

检测设备在x,y,z轴上的加速度(加速度范围为-1 ~ 1),可以感觉加速度值判断屏幕的方向,如下图所示。

图片 7

手机不同方向对应的加速度值

3. 重力感应器

严格来说,重力感应仪就是加速度计。像手机里面说的重力感应器、方向感应器等等都是基于加速度计、陀螺仪、磁传感器(有的还有GPS)的数据获得的派生传感器。

区别:下面我们看一下它们的区别:

  • 加速度计和陀螺仪:从原理来说,陀螺仪和加速度计都是通过振动测量加速度的,只不过陀螺仪测量的是科氏加速度,而加速度计是测量的直接加速度。MEMS陀螺仪可以简单理解为一个谐振器 加速度计。因此陀螺仪的结构要比加速度计复杂得多,技术也难得多。
  • 重力传感器,方向传感器(电子罗盘),旋转传感器(姿态传感器):这三种都是派生的3D传感器。重力传感器是通过测量重力加速度方向来判断重力的方向,那跟旋转传感器有什么区别呢?旋转传感器用到了陀螺仪的数据,在动态情况(比如你在边走边看手机)也能很好的判断手机的姿态角。方向传感器则是主要通过磁传感器来测量地磁场来判断方向(类似指南针的作用),有时还需要配合GPS(各地的磁场不一样)。这些传感器能配合非常多的应用,如地图导航(手机上传感器的精度还不能满足惯导,主要是充当辅助的作用,比如判断你的朝向)。

框架基础

上面科普了关于传感器硬件上的知识,下面我们就来看一下CoreMotion框架。给出相关框架苹果资料地址CoreMotion。

1. 基本API架构

我们先看一下这个框架API架构。

图片 8

API架构

这个框架主要是要处理下面三种数据:

  • 加速度值CMAccelerometerData
  • 陀螺仪值CMGyroData
  • 设备motionCMDeviceMotion
    实际上,这个设备motion值就是通过加速度和旋转速度进行变换算出来的。

下面看一下CMDeviceMotion这几个motion

图片 9

  • attitude:通俗来讲,就是告诉你手机在当前空间的位置和姿势 。
  • gravity:重力信息,其本质是重力加速度矢量在当前设备的参考坐标系中的表达 。
  • userAcceleration:加速度信息。
  • rotationRate:即时的旋转速率,是陀螺仪的输出。

2. 框架内容

Core Motion框架可让您的应用程序从设备硬件接收运动数据并处理该数据。 该框架支持使用Block对象接口访问原始和已处理的加速度计数据。 对于具有内置陀螺仪的设备,您可以检索原始陀螺仪数据以及反映设备的姿态和旋转速度的处理数据。 您可以使用加速度计和基于陀螺仪的数据,用于游戏或使用动作作为输入的其他应用程序,或作为增强整体用户体验的方式。

注意:在iOS 10.0之上或之后链接的iOS应用程序必须在其Info.plist文件中包含其需要访问的数据类型的使用说明键,否则会崩溃。 要具体访问运动和健身数据,它必须包括NSMotionUsageDescription

下面我们看一下这个框架的类。

类名 详情
CMAccelerometerData CMAccelerometerData类的一个实例表示加速度计事件。 它是在一个时刻沿着三个空间轴的加速度的测量。
CMAltimeter 使用CMAltimeter对象开始向您的应用程序发送高度相关数据。 高度事件反映了当前高度的变化,而不是绝对高度。 因此,远足应用程序可能会使用此对象来跟踪用户在远足过程中的高程增益。 因为所有设备上的高度事件可能不可用,所以在使用此服务之前,请始终调用isRelativeAltitudeAvailable()方法。
CMAltitudeData CMAltDataData对象封装有关高度相对更改的信息。 您不直接创建此类的实例。 当您要接收高度计更改时,请创建CMAltimeter类的实例,并使用该对象查询事件或开始事件的传递。 高度计对象在适当的时间创建此类的新实例,并将其传递给您指定的处理程序。
CMAttitude CMAttitude类的一个实例表示设备在某个时间点的高度的度量。 “高度”是指身体相对于给定参考框架的方向。
CMDeviceMotion CMDeviceMotion的实例封装了设备的姿态,旋转速率和加速度的测量。
CMGyroData CMGyroData类的实例包含设备旋转速率的单次测量。
CMLogItem CMLogItem类是处理特定类型运动事件的Core Motion类的基类。 此类的对象表示可以记录到文件的一段时间标记的数据。
CMMagnetometerData CMMagnetometerData类的实例封装了由设备的磁力计产生的磁场的测量值。
CMMotionActivity CMMotionActivity类包含单个运动更新事件的数据。 在支持运动的设备上,您可以使用CMMotionActivityManager对象来在当前类型的运动更改时请求更新。 发生更改时,更新信息将打包成CMMotionActivity对象并发送到您的应用程序。
CMMotionActivityManager CMMotionActivityManager类提供对设备存储的运动数据的访问。 运动数据反映用户是在步行,跑步,在车辆中,还是静止的一段时间。 导航应用程序可能会查找当前运动类型的变化,并为每个运动提供不同的方向。 使用此类,您可以在当前类型的动作发生变化或者可以收集过去的动态变化数据时询问通知。
CMMotionManager CMMotionManager对象是由iOS提供的运动服务的入口。 这些服务为应用程序提供加速度计数据,旋转速率数据,磁力计数据和其他设备运动数据,如姿态。 这些类型的数据源自设备的加速度计和(在某些型号上)的磁强计和陀螺仪。
CMPedometer 使用CMPedometer对象获取行人相关数据。 您可以使用计步器对象来检索步数和有关行驶距离以及上升或下降楼层数的其他信息。 计步器对象管理可以查询的历史数据缓存,也可以在处理数据时要求实时更新。
CMPedometerData CMPedometerData对象封装了用户步行距离的信息。 你不会自己创建这个类的实例。 相反,您可以使用CMPedometer对象从系统中请求计步器数据。 每个请求的数据被打包到这个类的一个实例中,并传递给您在计步器对象中注册的处理程序。
CMPedometerEvent 无资料
CMRecordedAccelerometerData CMRecordedAccelerometerData对象包含由设备记录的单个加速度计数据。 您不直接创建此类的实例。 而是使用CMSensorRecorder对象从系统中检索已记录的数据。
CMSensorDataList CMSensorDataList对象允许您枚举由系统记录的CMRecordedAccelerometerData对象。 您不直接创建此类的实例。 相反,您会收到一个来自CMSensorRecorder对象的加速度计数据查询的结果。
CMSensorRecorder CMSensorRecorder对象控制从设备收集和检索加速度计数据。 使用传感器记录器启动加速度计数据的采集。 之后,使用传感器记录器取出记录的数据,以便您可以对其进行分析。 您可以使用记录的数据来评估特定类型的运动,并将结果并入您的应用程序。
CMStepCounter CMStepCounter类可以访问用户使用该设备的步骤数量。 步骤信息在具有适当内置硬件的设备上收集,并存储,以便您可以运行查询以确定用户最近的身体活动。 您使用此类收集当前步数据和任何历史数据。

后记

对于每一个知识点,我都是从浅入深、从宏观到微观的给大家介绍,这一篇也是从框架顶层和基础理论入手,后面我还会跟着写几篇结合具体的应用实例为大家讲解。谢谢大家。

图片 10

版权声明:本文由太阳集团娱乐官方网站发布于企业文化,转载请注明出处:为前途A福睿斯应用开荒做企图,基础理论