我正在编写一段代码,需要使用iOS 4.3以上版本中的加速度计和陀螺仪检测不同的运动手势。
Q1:是否有任何现有的开源代码已经实现了任何运动/手势检测?
如果没有,
Q2:目前我想要检测iPhone是否掉落。
到目前为止,我已经实现了什么:
CoreMotion API提供了用户加速度,它(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
我认为,我仍然需要不断测试和调整值。如果您有任何优化,请分享,我知道为了帮助您,您需要看到许多自由落体加速度值的样本。目前我正在考虑:
将加速度值四舍五入到小数点后3位,并玩弄我使用的加速度范围。 也许检查自由落体条件满足后,总加速度值是否突然下降。 你认为我引用的加速度值有点嘈杂吗?
Q1:是否有任何现有的开源代码已经实现了任何运动/手势检测?
如果没有,
Q2:目前我想要检测iPhone是否掉落。
到目前为止,我已经实现了什么:
CoreMotion API提供了用户加速度,它(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
我认为,我仍然需要不断测试和调整值。如果您有任何优化,请分享,我知道为了帮助您,您需要看到许多自由落体加速度值的样本。目前我正在考虑:
将加速度值四舍五入到小数点后3位,并玩弄我使用的加速度范围。 也许检查自由落体条件满足后,总加速度值是否突然下降。 你认为我引用的加速度值有点嘈杂吗?