将设备方向存储到数组并进行比较

我想要实现以下功能:

我希望用户能够使用陀螺仪“记录”iPhone的运动。之后,用户应该能够重现相同的运动。我使用以下代码提取俯仰角、横滚角和偏航角:

 [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
                                       withHandler: ^(CMDeviceMotion *motion, NSError *error)
     {
         CMAttitude *attitude = motion.attitude;
         NSLog(@"pitch: %f, roll: %f, yaw: %f]", attitude.pitch, attitude.roll, attitude.yaw);
     }];

我的想法是,如果用户处于录制模式,我可以将这些值存储到一个数组中。当用户尝试重现该运动时,我可以将重现的运动数组与录制的数组进行比较。关键是,如何以一种智能的方式比较这两个数组?它们永远不会完全相同,但它们可以大致相似。

我的思路正确吗?

更新:我认为Alis关于使用DTW的回答可能是正确的。但我没那么聪明(显然),所以如果有人能帮助我完成比较数组的第一步,我将非常高兴!

谢谢!


回答:

尝试使用动态时间规整。这是一个使用一维数组的说明性示例。在数据库中,我们已经有以下 2 个数组:

数组 1:[5, 3, 1]
数组 2:[1, 3, 5, 8, 8]

我们测量到 [2, 4, 6, 7]。哪个数组与新测量的数组最相似?显然,第二个数组与新测量的数组相似,而第一个数组则不然。

让我们根据 这篇论文的 2.1 节计算成本矩阵:

D(i,j)=Dist(i,j)+MIN(D(i-1,j),D(i,j-1),D(i-1,j-1))

这里 D(i,j) 是成本矩阵的 (i,j) 元素,见下文。查看该论文的图 3,了解如何应用此递归关系。简而言之:首先计算列,从 D(1,1) 开始;在 MIN 中省略 D(0,*)D(*,0)。如果我们要比较数组 AB,那么 Dist(i,j)A[i]B[j] 之间的距离。我简单地使用了 ABS(A[i]-B[j])。此示例的成本矩阵:

Dynamic Time Warping, cost matrices

对于数组 1,我们得到的分数是 13,对于数组 2,我们得到的分数是 5。分数越低越好,因此最相似的数组是数组 2。最佳规整路径标记为灰色。

这只是 DTW 的一个草图。在实际应用中,您需要解决许多问题。例如,使用偏移量而不是固定结束点,或定义拟合度量:请参阅这篇论文,第 363 页,5. 边界条件和第 364 页。上面链接的论文也有更多细节。

我刚刚注意到您正在使用偏航角、俯仰角和横滚角。 简而言之:不要这样做,还有 另一个不要这样做的理由。你可以使用加速度计数据代替吗?“加速度计是方向的直接测量”(来自 DCM 手稿),这正是你所需要的。至于tc的问题,相对于北方的方向重要吗?我猜不重要。

如tc所指出的,比较加速度向量比比较方向(欧拉角、旋转矩阵、四元数)容易得多。如果您使用的是加速度数据,则在每个时间点都有三维向量,即 (x,y,z) 坐标。我会简单地计算

Dist(i,j)=SQRT((A[i][X]-B[j][X])^2+(A[i][Y]-B[j][Y])^2+(A[i][Z]-B[j][Z])^2),

这就是两点之间的欧几里得距离

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注