【IOS开发】传感器 SensorKit

news2024/11/24 22:32:05

资源

官方文档 https://developer.apple.com/search/?q=motion%20graph&type=Documentation

SensorKit 使应用程序能够访问选定的原始数据或系统从传感器处理的指标。

  • 步骤信息
  • 加速度计或旋转速率数据
  • 用户手腕上手表的配置
  • 物理环境中的环境光
  • 有关用户日常通勤或旅行的详细信息

环境信息

环境光

ambientLightSensor

The sample type for this sensor is SRAmbientLightSample.
您需要通过将 字典添加到信息属性列表中的 键来提供记录环境光的原因。SRSensorUsageAmbientLightSensorNSSensorKitUsageDetail

SRSensorUsageAmbientLightSensor

一组属性,解释您的应用程序需要观察用户环境中的光照水平。

property list key Description
解释性字符串,详细说明您的研究使用传感器数据的方式。
必需的
property list key Required
一个布尔值,指示您的应用程序的研究是否依赖于该传感器。

SRAmbientLightSample:

https://developer.apple.com/documentation/sensorkit/srambientlightsample

测量光强度
var chromaticity: SRAmbientLightSample.Chromaticity
描述样本的光亮度和色调的坐标对。
struct SRAmbientLightSample.Chromaticity
描述光亮度和色调的坐标对。
var lux: Measurement<UnitIlluminance>
描述样本光通量的对象。
var placement: SRAmbientLightSample.SensorPlacement
光相对于传感器的位置。
enum SRAmbientLightSample.SensorPlacement
描述光源相对于传感器的位置的方向值。

加速度计

iOS 设备都有一个三轴加速度计。加速度计报告的值以重力加速度的增量进行测量,值 表示给定方向上每秒 9.8 米(每秒)的加速度。加速度值可以是正值或负值,具体取决于加速度的方向。

在这里插入图片描述
使用 Core Motion 框架的类访问原始加速度计数据。具体来说, 类提供了用于启用加速计硬件的接口。启用硬件时,选择最适合您的应用程序的接口。您可以仅在需要时提取加速度计数据,也可以要求框架定期将更新推送到您的应用程序。每种技术都涉及不同的配置步骤并具有不同的用例。CMMotionManager

重要的提示:
如果您的应用依赖于加速度计硬件,请使用 文件的 键>
价值。有关此键含义的详细信息,请参阅信息属性列表键参考。UIRequiredDeviceCapabilitiesInfo.plistaccelerometer

具体信息: https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/

检查加速度计数据的可用性

Check the value of the is AccelerometerAvailable property of CMMotionManager and make sure it’s true. If it’s false, starting updates doesn’t deliver any data to your app.

不连续获取加速度数据

对于按自己的时间表处理加速度计数据的应用(例如游戏),请使用 的 方法开始传送加速度计数据。当您调用此方法时,系统会启用加速计硬件并开始更新 对象的 属性。但是,系统在更新该属性时不会通知您。当您需要加速度计数据时,必须显式检查该属性的值。 startAccelerometerUpdates()CMMotionManageraccelerometerDataCMMotionManager

开始交付加速计更新之前,请通过向 属性分配值来指定更新频率。您可以请求更新的最大频率取决于硬件,但通常至少为 100 Hz。如果您请求的频率高于硬件支持的频率,Core Motion 会使用支持的最大值。accelerometerUpdateInterval

let motion = CMMotionManager()


func startAccelerometers() {
   // Make sure the accelerometer hardware is available. 
   if self.motion.isAccelerometerAvailable {
      self.motion.accelerometerUpdateInterval = 1.0 / 50.0  // 50 Hz
      self.motion.startAccelerometerUpdates()


      // Configure a timer to fetch the data.
      self.timer = Timer(fire: Date(), interval: (1.0/50.0), 
            repeats: true, block: { (timer) in
         // Get the accelerometer data.
         if let data = self.motion.accelerometerData {
            let x = data.acceleration.x
            let y = data.acceleration.y
            let z = data.acceleration.z
            // Use the accelerometer data in your app.
         }
      })

      // Add the timer to the current run loop.
      RunLoop.current.add(self.timer!, forMode: .defaultRunLoopMode)
   }
}

显示了一种将加速度计更新配置为每秒发生 50 次的方法。然后,该方法配置一个计时器以相同的频率获取这些更新并对数据执行某些操作。您可以将计时器配置为以较低的频率触发,但这样做会导致硬件生成比实际使用的更新更多的更新,从而浪费电量。

处理稳定的加速度计数据流

当您想要捕获所有传入的加速度计数据(也许可以分析其运动模式)时,请使用 方法 。此方法通过在指定队列上执行处理程序块,将每组新的加速度计值推送到您的应用程序。这些块的排队可确保您的应用接收所有加速计数据,即使您的应用变得繁忙并且短时间内无法处理更新。startAccelerometerUpdates(to:withHandler:)CMMotionManager

开始交付加速计更新之前,请通过向 属性分配值来指定更新频率。您可以请求更新的最大频率取决于硬件,但通常至少为 100 Hz。如果您请求的频率高于硬件支持的频率,Core Motion 将使用支持的最大值。 accelerometerUpdateInterval

清单 2 显示了 MotionGraphs 示例代码项目中的方法,您可以检查该方法以了解更多信息语境。该应用程序显示加速度计数据的实时图表。用户使用滑块配置加速度计的更新频率,更改该频率会导致调用示例中所示的 方法。此方法以新频率重新启动加速度计更新。每次收到新样本时,指定的块都会在主线程上排队。该块使用新的加速度计值更新应用程序的图形视图和标签。 startUpdatesWithSliderValue:

static const NSTimeInterval accelerometerMin = 0.01;
- (void)startUpdatesWithSliderValue:(int)sliderValue {
    // Determine the update interval.
    NSTimeInterval delta = 0.005;
    NSTimeInterval updateInterval = accelerometerMin + delta * sliderValue;
    // Create a CMMotionManager object.
    CMMotionManager *mManager = [(APLAppDelegate *)
            [[UIApplication sharedApplication] delegate] sharedManager];
    APLAccelerometerGraphViewController * __weak weakSelf = self;
    // Check whether the accelerometer is available.
    if ([mManager isAccelerometerAvailable] == YES) {
        // Assign the update interval to the motion manager.
        [mManager setAccelerometerUpdateInterval:updateInterval];
        [mManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue]
               withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
        [weakSelf.graphView addX:accelerometerData.acceleration.x 
                  y:accelerometerData.acceleration.y 
                  z:accelerometerData.acceleration.z];
        [weakSelf setLabelValueX:accelerometerData.acceleration.x 
                  y:accelerometerData.acceleration.y 
                  z:accelerometerData.acceleration.z];
      }];
   }
   self.updateIntervalLabel.text = [NSString stringWithFormat:@"%f", updateInterval];
}
- (void)stopUpdates {
   CMMotionManager *mManager = [(APLAppDelegate *)
            [[UIApplication sharedApplication] delegate] sharedManager];
   if ([mManager isAccelerometerActive] == YES) {
      [mManager stopAccelerometerUpdates];
   }
}

CMRecordedAccelerometerData

class CMRecordedAccelerometerData : CMAccelerometerData

设备记录的单条加速度计数据。使用CMSensorRecorder 对象从系统中检索已记录的数据。

var startDate: Date
记录传感器样本时的挂钟时间。
var identifier: UInt64
加速度计数据的唯一标识符。

class CMSensorDataList : NSObject

系统记录的加速度计数据列表

https://developer.apple.com/documentation/coremotion/cmsensordatalist

使用传感器数据列表对象来枚举加速度计数据

-(void)processSamplesFromDate:(NSDate*)start toDate:(NSDate)end {
   CMSensorRecorder* recorder = [[CMSensorRecorder alloc] init];
   CMSensorDataList* list = [recorder accelerometerDataFrom:start to:end];
 
   for (CMRecordedAccelerometerData* data in list) {
      // Process the data.
      NSLog(@"Sample: (%f, %f, %f)", data.acceleration.x,
              data.acceleration.y, data.acceleration.z);
   }
}

class CMSensorRecorder : NSObject

提供加速度运动数据的传感器。使用传感器记录器启动加速度计数据的收集。稍后,使用传感器记录器获取记录的数据,以便您可以对其进行分析。您可以使用记录的数据来评估特定类型的运动并将结果合并到您的应用程序中。

要使用传感器记录器,请创建此类的实例并调用 方法来开始记录数据。您不需要明确停止录制过程。当指定时间到期且没有其他应用延长录音时间时,系统自动停止录音。 清单 1 显示了如何记录 20 分钟的加速度计数据。 recordAccelerometer(forDuration:)

static let accelerometer: SRSensor: https://developer.apple.com/documentation/sensorkit/srsensor/3377672-accelerometer

if CMSensorRecorder.isAccelerometerRecordingAvailable() {
    let recorder = CMSensorRecorder()
    recorder.recordAccelerometerForDuration(20 * 60)  // Record for 20 minutes
}

static let odometer: SRSensor
提供有关速度和坡度信息的传感器。h
ttps://developer.apple.com/documentation/sensorkit/srsensor/4173050-odometer

class CMAccelerometerData : CMLogItem

来自设备的三个加速计的数据样本。

访问加速度计数据
var acceleration: CMAcceleration
由加速度计测量的加速度。
struct CMAcceleration
包含 3 轴加速度值的结构类型。

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

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

相关文章

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案

使用技术&#xff1a; Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台&#xff1a; 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务&#xff08;30个通用微服务如&#xff1a;商品、订单、购物车、个人中心、支…

项目实操四-性能测试过程实时监控分析

这里写目录标题 一、JMeter性能测试技巧1、CSV文件驱动2、定时器a、泊松随机定时器b、固定定时器c、高斯随机定时器d、均衡随机定时器e、同步定时器f、固定吞吐量定时器g、精准吞吐量定时器 3、全局变量 - 跨线程数据传递4、Debug调试器5、JMeter执行机端口被占用 二、JMeter性…

Linux集群实用脚本

现有三台虚拟机&#xff0c;例如&#xff1a;node2、node3、node4 三台虚拟机配置了免密登录&#xff0c;安装了hadoop等软件。 相关集群实用脚本命令 统一执行jps命令 jpsall #!/bin/bash ​ for host in node2 node3 node4 doecho $host ssh $host jps done ​ 统一执行命…

JVM日常故障排查小结

前置知识 jstack简介 jstack是JVM自带的工具&#xff0c;用于追踪Java进程线程id的堆栈信息、锁信息&#xff0c;或者打印core file&#xff0c;远程调试Java堆栈信息等。 而我们常用的指令则是下面这条: # 打印对应java进程的堆栈信息 jstack [ option ] pid option常见选…

AI摄影绘画与PS优化:重塑数字艺术的未来

文章目录 《AI摄影绘画与PS优化从入门到精通》内容简介作者简介楚天 目录前言/序言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的各个领域&#xff0c;包括艺术创作。AI摄影绘画和Photoshop&#xff08;PS&#xff09;优化是这个领…

[AI工具推荐]AiRestful智能API代码生成

智能API代码示例生成工具AiRestful 一、产品介绍二、如何使用1、第一步(必须):2、第二步(可选):3、第三步(智能生成): 三、如何集成到您的网站(应用)1、开始接入2、接入案例 四、注意点 一、产品介绍 AiRestful是一款基于智能AI的,帮助小白快速生成任意编程语言的API接口调用示…

中国经济增长:全球复苏的引擎

近年来&#xff0c;中国经济以其强劲的增长势头成为全球经济的重要引擎。中国的经济崛起不仅对自身国家发展具有重要意义&#xff0c;而且也对全球经济复苏和稳定有着积极影响。本文将从多个角度探讨中国经济增长对全球经济的影响及其作为全球复苏的引擎。 首先&#xff0c;中国…

基于SpringBoot的房屋租赁系统 附源码

基于SpringBoot的房屋租赁系统 附源码 文章目录 基于SpringBoot的房屋租赁系统 附源码 一.引言二.系统设计三.技术架构四.功能实现五.界面展示六.源码获取 一.引言 本文介绍了一个基于SpringBoot的房屋租赁系统。该系统利用SpringBoot框架的优势&#xff0c;实现了用户注册、登…

【C++】封装:练习案例-点和圆的关系

练习案例&#xff1a;点和圆的关系 设计一个圆形类&#xff08;Circle&#xff09;&#xff0c;和一个点类&#xff08;Point&#xff09;&#xff0c;计算点和圆的关系。 思路&#xff1a; 1&#xff09;创建点类point.h和point.cpp 2&#xff09;创建圆类circle.h和circle…

如何搭建企业管理系统Odoo并远程访问管理界面【内网穿透】

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

SearchWP WordPress高级网站内容搜索插件(包含所有专业扩展)

点击阅读SearchWP WordPress高级网站内容搜索插件(包含所有专业扩展)原文 SearchWP WordPress高级网站内容搜索插件是一个非常强大的工具&#xff0c;可以显着增强您网站的搜索功能。通过向网站访问者提供高度相关和精确的搜索结果&#xff0c;它可以有效地简化他们的搜索过程…

回归预测 | MATLAB实现IBL-LSSVM【23年新算法】逻辑优化算法优化最小二乘支持向量机的数据回归预测 (多指标,多图)

回归预测 | MATLAB实现IBL-LSSVM【23年新算法】逻辑优化算法优化最小二乘支持向量机的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现IBL-LSSVM【23年新算法】逻辑优化算法优化最小二乘支持向量机的数据回归预测 &#xff08;多指标…

苹果个人开发者如何实现应用下载安装

作为苹果个人开发者&#xff0c;你可以为iOS设备用户提供应用程序&#xff0c;而用户将能够通过下载和安装这些应用来丰富他们的设备体验。本文将详细介绍个人开发者实现应用下载安装的步骤&#xff0c;包括开发和上架应用程序到App Store。 图片来源&#xff1a;苹果个人开发者…

【轮式移动机器人课程笔记3】移动机器人运动学简介

文章目录 写在前面L3 移动机器人运动学简介3.1 运动学概述3.2 研究机器人运动学的意义3.3 机器人运动的描述3.4 机器人正微分运动学3.5 机器人逆微分运动学3.6 总结 写在前面 前两节课介绍了移动机器人、机械手、类型&#xff0c;本节课重点讲解移动机器人运动学相关知识&…

一个IP证书里可以包含多个ip地址吗

IP地址数字证书是一种由权威机构颁发的数字证书&#xff0c;是只拥有公网IP地址的网站用来保护数据传输安全&#xff0c;防止网站信息被窃取、篡改的安全传输协议。IP证书还可以消除浏览器的“不安全”提示&#xff0c;让网站更容易获得客户信任。同常一个IP证书只能同时保护一…

经典文献阅读之--EA-NDT(利用语义分割提高NDT地图压缩和描述能力的框架)

0. 简介 对于NDT而言&#xff0c;相信各位应该都有所了解了&#xff0c;但是作为高精地图来说性能还需要进一步提升&#xff0c;为此《Towards High-Definition Maps: a Framework Leveraging Semantic Segmentation to Improve NDT Map Compression and Descriptivity》一文提…

AIGC实战——条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)

AIGC实战——条件生成对抗网络 0. 前言1. CGAN架构2. 模型训练3. CGAN 分析小结系列链接 0. 前言 我们已经学习了如何构建生成对抗网络 (Generative Adversarial Net, GAN) 以从给定的训练集中生成逼真图像。但是&#xff0c;我们无法控制想要生成的图像类型&#xff0c;例如控…

基于Java的音乐网站的设计与实现(带论文)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

如何实现公网访问本地内网搭建的WBO白板远程协作办公【内网穿透】

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cp…

数据结构与算法python版本之列表和字典复杂度

前面我们了解了大O表示法以及对不同算法的预估 接下来我们讨论python两种内置数据类型&#xff08;列表和字典&#xff09;上各种操作的大O数量级 列表数据类型 list类型各种操作的实现方法很多&#xff0c;如何选择具体哪种实现方法。总的方案就是&#xff0c;让最常用的操作…