我正在使用加速度计在UIScrollVIew中滚动多个子视图.我希望当用户向右轻拂iPhone时,视图(纵向)向右滚动,当向左轻拂设备时,我希望向左滚动.
我想我只能通过注意正x或负x加速度值来做到这一点,但我发现这些值通常是正值和负值的混合.我将地板设置为1.5g以消除无抖动,并且在0.5秒的持续时间内查看x值.
我确信有一种用于确定轻弹整体方向的三角法,并且您必须在轻弹动作的持续时间内测量值.我也确定有人已经把这个问题搞定了.
有什么想法吗?
谢谢
我想知道如何使用Accelerometer计算步数.实际上我计算加速度并使用此代码计算步数
length = sqrt(x * x + y * y + z * z);
if(length>=2){
stepcount+=1;
}
Run Code Online (Sandbox Code Playgroud)
其中length使用acceleration.x,acceleration.y,acceleration.z计算加速度但是我在启动应用程序时的主要问题是stepcount给出了正确的步长值,但是随着时间的推移,它的值不正确.Plz帮帮我
我必须找到解决问题的最佳方法,以尝试识别身体动作 - 将iPhone放在口袋里 - 比如waling,停止,左/右转,坐着.
我正在考虑尝试找到与每个操作相对应的数据,然后根据此数据检查传入值(使用阈值)并查看发生了什么.当然,这是一种非常粗略的方法,所以可能使用类似支持向量机的 方法,但这似乎太复杂了我必须开发它的时间.
你会在这推荐哪种方法?
我可以使用Core Motion框架的这种方法:
- (void)startAccelerometerUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMAccelerometerHandler)handler
Run Code Online (Sandbox Code Playgroud)
作为替代
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
Run Code Online (Sandbox Code Playgroud)
UIKit的UIAccelerationDelegate方法.在那里,我必须指定更新的频率.我希望尽可能快速准确地获得加速度数据.
Core Motion是我的朋友吗?我可以从Core Motion的这种方法中获得什么样的读数?文档没有谈论它.
是否可以使用加速度计来检测高度?例如,如果我拿着手机,然后抬起手臂后检测身高?
谢谢
我即将着手开发使用加速度计来检测运动类型的移动应用程序,无论它是跳跃,跑步,步行等。现在我最近进行了很多在线搜索,并且有些了解使用机器学习可以检测从加速度计收集的样本数据中的模式。我是机器学习的新手,但是如果我理解正确(基于其他专家在线提供的提示),我可以使用支持向量机或神经网络来识别所收集样本中的模式并将其映射到特定的运动类型。我也知道OpenCV库提供了这两种方法。
能在该领域具有专业知识的人告诉我哪种方法更好用,并指导我完成从数据收集到结果表示的所有步骤吗?
所以我正在编写一段代码,我必须在上面的iOS 4.3中使用Accelerometer和陀螺仪检测不同的移动手势.
Q1:是否有任何已实现任何移动/手势检测的开源代码?
如果不
Q2:现在我想检测一下iPhone是否掉线了.
到目前为止我所取得的成就: CoreMotion API提供了userAcceleration,其中(afaik)是用户给予设备的加速度或设备在某个方向(x,y或z)的加速度,而不考虑重力因此我是什么可以做的是:存储,比方说,前面的5-6个加速度参数值,可以检查其中任何一个点击大的负值,这基本上代表突然减速.
但是这个解决方案并不是非常优化,我认为我需要先以某种方式检测设备的自由落体/向下运动.知道如何解决这个问题吗?
更新: 感谢Misch分享您的方法.我一点也不考虑总加速度.我完全按照你的说法做了:
"但是你必须自己测试一下,"你的情况下"总加速度大致相当于地球加速度"和"一段时间".
加速度值实际上是G',因此我测试了"总加速度"值,范围为0.9 - 1.1.我检查了一段时间,最初我在updateInterval设置为1/20.0时检查了四个连续的值.现在我已经放松了一点连续的条件.
这是一个示例输出:
加速度= 0.090868
加速度= 0.074473
加速度= 0.159797
加速度= 1.157513
加速度= 1.224588
加速度= 1.036272
加速度= 0.914698
加速度= 0.904093
加速度= 0.941516
加速度= 0.046362
加速度= 0.045109
加速度= 0.060045
我想,我仍然要继续测试和调整价值观.如果你有任何优化,请分享,我知道为了帮助你需要看到许多自由落体加速度值的样本.现在我想:
我想要
[1]提高手机加速度计的采样率。(SENSOR_DELAY_FASTEST 在Xperia上的最大频率约为 100Hz,而在Nexus4上的最大频率为180Hz,我希望我的工作延迟大约为1ms或更短。
[2]如果无法使用[1],我可以使Rate为常数。
mSensorManager.registerListener(this, mAccelerometer,10000);//10000 in microsec
Run Code Online (Sandbox Code Playgroud)
上面的代码不会给我10ms的延迟。我知道这只是对Android的建议。
我知道手机中的这些加速度计能够提供更小的延迟。他们的数据表中提到了它。他们的任何方法或驱动程序/ ADC编程也是[1]或[2]。我正在使用ADT工具。还有其他工具可以做到这一点吗?
PS:我读过
我正在使用Sprite Kit构建一个简单的游戏,屏幕不会旋转,但我想知道用户拿着手机进行游戏机制的角度.
可以使用加速度计(x,y)轻松检索我想要获取的值,但我发现这是不可靠的,所以我试图存档更好的结果CMDeviceMotion.我可以获得相当于data.acceleration.y但我无法弄清楚如何得到相当于data.acceleration.x.
if let data = motionManager.accelerometerData? {
let y = CGFloat(data.acceleration.y)
let x = CGFloat(data.acceleration.x)
}
// Device Motion
if let attitude = motionManager.deviceMotion?.attitude? {
let y = CGFloat(-attitude.pitch * 2 / M_PI) // This matches closely with data.acceleration.y
let x = ??????????
}
Run Code Online (Sandbox Code Playgroud)
我如何计算data.acceleration.x使用的等价物CMDeviceMotion?
通过手机,我可以向配对的Microsoft乐队发送消息和/或对话,但我想收到乐队给手机的确认.由于似乎没有任何其他方式,我认为我将不得不采取一种姿势,例如用户来回旋转一次手腕,或者可能会晃动他们的手腕.这听起来像是加速度计和陀螺仪的工作.从这些中收集信息应该很容易,但是在识别手势如一个方向上的手腕旋转然后又回到另一个方向时,任何人都可以建议如何将其识别为有意的手势,而不仅仅是正常的"非手势"动作?
非常感谢任何帮助,
约翰·H