iOS CoreMotion获取传感器数据

CoreMotion是iOS系统目前用于处理加速度计,陀螺仪,计步器和环境相关事件。 Core Motion的报告来自iOS设备的板载硬件的运动和环境相关数据,包括加速度计和陀螺仪,以及计步器,磁力计和气压计。

为了以特定的时间间隔接收运动数据,应用程序调用一个“start”方法,该方法接受一个操作队列(NSOperationQueue的实例)和一个特定类型的块处理程序来处理这些更新。运动数据被传递到块处理程序。更新频率由“interval”属性的值决定。

Accelerometer加速度计使用方式:

  • 设置accelerometerUpdateInterval属性以指定更新间隔。
  • 调用startAccelerometerUpdates(to queue, withHandler handler)方法,传入一个CMAccelerometerHandler类型的块。
  • 加速度计数据作为CMAccelerometerData对象传递到块。

Gyroscope陀螺仪使用方式:

  • 设置gyroUpdateInterval属性以指定更新间隔。
  • 调用startGyroUpdates(to queue, withHandler handler)方法,传入一个类型CMGyroHandler的块。
  • 旋转速率数据作为CMGyroData对象传递到块中。

Magnetometer磁强计使用方式:

  • 设置magnetometerUpdateInterval属性以指定一个更新间隔。
  • 调用startMagnetometerUpdates(to queue, withHandler handler)方法,传递一个CMMagnetometerHandler类型的块。
  • 磁场数据作为CMMagnetometerData对象传递到块中。

Device motion设备运动使用方式:

  • 设置deviceMotionUpdateInterval属性以指定更新间隔。
  • 调用startDeviceMotionUpdates(to queue, withHandler handler) 或startDeviceMotionUpdates(using referenceFrame) 或 startDeviceMotionUpdates(using referenceFrame, to queue, withHandler handler)方法,传入一个CMDeviceMotionHandler类型的块。
  • motion数据作为CMDeviceMotion对象传递到块中。

检查服务的可用性:

属性类型作用
accelerometerAvailableBOOL设备上是否有加速度计
gyroAvailableBOOL设备上是否有陀螺仪
magnetometerAvailableBOOL设备上是否有磁强计
deviceMotionAvailableBOOL动作服务在设备上是否可用

检查功能的活跃状态:

属性类型作用
accelerometerActiveBOOL当前是否正在进行加速度计更新
gyroActiveBOOL确定当前是否正在进行陀螺仪更新
magnetometerActiveBOOL确定当前是否正在进行磁力计更新
deviceMotionActiveBOOL确定应用程序是否从设备动作服务接收更新

更新间隔: 

属性类型作用
accelerometerUpdateIntervalTimeInterval加速度计更新间隔
gyroUpdateIntervalTimeInterval陀螺仪更新间隔
magnetometerUpdateIntervalTimeInterval磁力计更新间隔
deviceMotionUpdateIntervalTimeInterval设备动作服务接收更新间隔

CMDeviceMotion属性介绍

  • attitude:通俗来讲,就是告诉你手机在当前空间的位置和姿势。
  • gravity:重力信息,其本质是重力加速度矢量在当前设备的参考坐标系中的表达。
  • userAcceleration:加速度信息。
  • rotationRate:计时的旋转速率,是陀螺仪的输出。
if (motionManager.isDeviceMotionAvailable) {motionManager.startDeviceMotionUpdates(to: OperationQueue.main, withHandler: { (motion, error) in//翻滚let roll = motion!.attitude.rolllet rollDegrees = roll * 180 / Double.pi//偏航let yaw = motion!.attitude.yawlet yawDegrees = yaw * 180 / Double.pi//俯仰let pitch = motion!.attitude.pitchlet pitchDegrees = pitch * 180 / Double.piprint("Roll:%.2f", rollDegrees)print("Yaw:%.2f", yawDegrees)print("Pitch:%.2f", pitchDegrees)//重力加速度在各个方向的分量let gX = motion!.gravity.x;let gY = motion!.gravity.y;let gZ = motion!.gravity.z;print("重力X:%f -- Y:%f -- Z:%f", gX, gY, gZ);//检测到晃动let x = motion!.userAcceleration.xlet y = motion!.userAcceleration.ylet z = motion!.userAcceleration.zif (fabs(x)>2.0 || fabs(y)>2.0 || fabs(z)>2.0) {print("检测到晃动");}//带方向的晃动if (data.userAcceleration.x < -1.5f) {// 往左晃动}if (data.userAcceleration.x > 1.5f) {// 往右晃动}if (data.userAcceleration.y < -1.5f) {// 往上晃动}if (data.userAcceleration.y > 1.5f) {// 往下晃动}})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合Redis,基于Jedis实现redis各种操作

前言&#xff08;三步教你学会redis&#xff0c;主打一个实用&#xff09; springboot整合redis步骤&#xff0c;并基于jedis对redis数据库进行相关操作&#xff0c;最后分享非常好用、功能非常全的redis工具类。 第一步&#xff1a;导入maven依赖 <!-- springboot整合re…

小程序代码管理

“微信开发者工具”点击版本管理&#xff0c;然后点击代码管理会打开代码管理网页。 选择对应的项目组。 进来后点击创建项目。 输入git名称&#xff0c;然后选择命名空间&#xff0c;最后创建即可。 在刚才的“微信开发者工具”选择设置&#xff0c;然后添加远程。 输入名称&…

朋友圈大佬都去读研了,这份备考书单我码住了

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

pycharm安装jupyter,用德古拉主题,但是输入行全白了,看不清,怎么办?

问题描述 今天换了以下pycharm主题&#xff0c;但是jupyter界面输入代码行太白了&#xff0c;白到看不清楚这行的字&#xff0c;更不知道写的是什么&#xff0c;写到哪了&#xff0c;这还是挺烦人的&#xff0c;其他都挺正常的。 问题分析 目前来看有两个原因&#xff1a; 1、…

【新版vscode配置自动补全括号】

vscode新版配置自动补全括号方法 新版配置方法(Pylance) ①设置 -> 扩展 -> Pylance -> 将 python.analysis.completeFunctionParens 下方的选项打勾 ②直接在settings.json中添加"python.analysis.completeFunctionParens": true

【Apollo】自动驾驶技术的介绍

阿波罗是百度发布的名为“Apollo&#xff08;阿波罗&#xff09;”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。 帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 百度开放此项计划旨在建立一个以合作为中…

vue3 - setup之defineEmits

基础形式 子组件 const emits defineEmits([name])//触发emits事件 const eventButton () > {emits(name) }父组件 <script> const handleName () >{ } </script> <template><ComponentName name"handleName" /> </template>…

如何评估ChatGPT的语言多样性和方言识别能力?

评估ChatGPT的语言多样性和方言识别能力是重要的&#xff0c;特别是在处理全球性用户群体和多语种社区的情况下。这需要综合考虑ChatGPT的能力来理解、生成和适应不同语言和方言。在这篇回答中&#xff0c;我将详细讨论如何评估ChatGPT的语言多样性和方言识别能力&#xff0c;并…

ros2 学习launch文件组织工程 yaml配置文件

简单范例 功能描述 使用launch文件&#xff0c;统一管理工程&#xff0c;实现img转点云&#xff0c;发送到img_pt的topic&#xff0c;然后用reg_pcl节点进行subscribe&#xff0c;进行点云配准处理&#xff0c;输出融合后的点云到map_pt的topic。最后由rviz2进行点云展示。 …

CSS - 快速实现悬浮吸顶,当页面滑动一定距离时固定吸附在顶部(position: sticky)

效果图 如下图所示&#xff0c;利用 position: sticky 属性轻松实现。 示例代码 新建一个 *.html 文件&#xff0c;一键复制运行起来。 <body><section class"content"><div class"item">我是悬浮吸顶区域</div><h1>我是…

AI时代:探索机器学习与深度学习的融合之旅

文章目录 1. 机器学习和深度学习简介1.1 机器学习1.2 深度学习 2. 为什么融合是必要的&#xff1f;2.1 数据增强2.2 模型融合 3. 深入分析&#xff1a;案例研究3.1 传统机器学习方法3.2 深度学习方法3.3 融合方法 4. 未来展望结论 &#x1f389;欢迎来到AIGC人工智能专栏~AI时代…

【Java Web】HTML 标签 总结

目录 1.HTML 2.标签 1. head 标签 1.图标 2.样式居中 2. body 标签 1.注释 &#xff1a; 2.加载图片 3.加载视频 效果 4.区域 效果 5.上下跳转&#xff0c;页面跳转 效果 6.表格 效果 7.有序列表&#xff0c;无序列表 效果 8.登录 效果 9.按钮 10.多选框…

Mybatis中的#{}和${}的区别

#{}和${}他们两都是替换参数的作用&#xff0c;但也还是有很大区别的。 目录 一、${} 二、#{} 三、注意点 一、${} 它是直接替换过来&#xff0c;不添加其它的什么。 比如下面的sql语句 select *from user where id${id} 如果id1&#xff0c;那么他替换过来就还是1&#xff…

Web之tomcat

[TOC]&#xff08;文章目录&#xff09; 1.程序架构 1.C/S(client/server) 比如&#xff1a;QQ、 微信、 LOL 优点&#xff1a;有一部分代码写在客户端&#xff0c; 用户体验比较好。 缺点&#xff1a; 服务器更新&#xff0c;客户端也要随着更新。 占用资源大。 2. B/S(brows…

【Spatial-Temporal Action Localization(二)】论文阅读2017年

文章目录 1. ActionVLAD: Learning spatio-temporal aggregation for action classification [code](https://github.com/rohitgirdhar/ActionVLAD/)[](https://github.com/rohitgirdhar/ActionVLAD/)摘要和结论引言&#xff1a;针对痛点和贡献相关工作模型框架思考不足之处 2.…

C语言双向链表

文章目录 前言双向链表链表头结点的创建节点尾插与尾删节点头插与头删特定位置插入或删除节点链表节点查找双向链表的销毁 链表的打印 前言 假期时间因为为学校开学考试做准备所以一直没更新博客&#xff0c;今天开始博客会陆续更新。 双向链表 之前我们说过了顺序表和单链表…

Oracle19c安装后,使用impdp导数,报错 ORA-01017:

今天使用oracle 19c进行pdb导数的时候&#xff0c;发现如下报错ORA-01017&#xff1a; impdp mei1/"密码"mei19c directoryMEI1_EXPDP dumpfilemei1_20230913_01.dmp logfilemei1_impdp_20230913.log schemasMEI1 REMAP_TABLESPACEDATA_SERA:orcl Import: Release 1…

嵌入式这个领域会变得过于内卷吗?

今日话题&#xff0c;嵌入式这个领域会变得过于内卷吗&#xff1f;嵌入式开发主要服务于第二产业&#xff0c;尤其是制造业&#xff0c;包括电器、电气、机械、汽车、装备、航空航天等行业的“智能制造”部门&#xff0c;稳定性较强&#xff0c;不像互联网行业那样波动大。因此…

无涯教程-JavaScript - XNPV函数

描述 XNPV函数返回的现金Stream量表的净现值不一定是周期性的。要计算一系列定期现金Stream量的净现值,请使用NPV函数。 语法 XNPV (rate, values, dates)争论 Argument描述Required/OptionalRateThe discount rate to apply to the cash flows.RequiredValues 与日期付款时…

Linux mmap读/写触发共享文件页生命周期

概述 Linux的mm内存子系统的核心功能就要要管理各种类型的page,确保能高效分配和释放,让物理内存得以最大化使用。初识内存系统往往关注的是page的申请和管理流程,容易忽略page的释放回收流程,其实理解mm中的内存回收和释放也是最核心的机制。 Linux内核为了支持各种场景…