如何使用加速度计识别反手和正手击球?

How to identify backhand and forehand shot using accelerometer?

加速度计具有三个值:x、y、z。

让我们想象一下球拍有一个加速度计。如果我把球拍正面朝上,我知道 x、y 和 z 的方向在哪里。但是,如果我翻转球拍并将其倒置。 x、y、z的值方向相反。

换句话说,如果我用反手将球击向x方向,我可能得到正值或负值x。 (这要看我翻不翻球拍了[球拍有两个面])

我的问题是传感器如何告诉我我正在用反手而不是正手击球,因为我可以为正手和反手获得相同的加速度计值。

谢谢, 吉米

这里有两个坐标系在起作用:加速度计的和世界的。加速度计在其世界视图中将具有固定的 x/y/z 方向,但它们会根据方向相对于世界坐标发生变化。

如果您按原样使用加速度计的值,那么您可能会在击中时获得正脉冲或负脉冲。但是当你将它们转换为世界坐标系时——也就是说,向下总是朝向地球的中心——你总是会得到相同的反手值和相反的正手值。

假设加速度计的 x 方向与网的法线平行,z 平行于手柄,当球拍处于正常的横向位置时,y 为 "up"。

因为在网球中,球拍基本上是在一个平面上(例如,你不会用网面朝下击球),除非你在过头(在这种情况下,我认为反手是不对的)问题),当球拍静止时,y 总是指向 1 或 -1。最简单(但不是最准确!)的方法是检查 y 的符号并相应地更改 x。这样你不会得到准确的向量,但你会得到它是反手还是正手的信息。

问题还在于你还必须在击球前跟踪球拍,因为如果击球不是完全水平的(很少如此),当球拍向上或向下移动时 y 加速度也会改变击球时不会显示击球瞬间的球拍方向。

要获得更准确的读数,您必须确定坐标系之间的差异并相应地旋转。

编辑: 根据@Sami 的评论改变了我的想法:)

假设X轴和Y轴在拍弦平面内(假设X沿拍柄线,Y为up/down),Z为击球方向。然后挥杆和击球时的大部分加速度将在 Z 轴上(+ 或 - 取决于球拍的哪个面击球);如果你在弧形中摆动,会有一点 X 轴加速度,但无论哪个面被击中,它总是在同一方向。向上有一个恒定的 Y 轴加速度。

所以您可以查看加速度计的 Z 值以确定击中了哪个面,并且您可以查看 Y 值来判断球拍的握持方向。从那里你可以判断是'front'还是'back'(相对于球拍的方向)被击中,从而判断是正手击球还是反手击球。

当然,你还得知道玩家是右撇子还是左撇子:)

对于给定的惯用手,您可以按如下方式计算挥杆类型:

对于另一种惯用手,结果会相反。 “+”和“-”值与加速度计的安装方式有关,因此您需要进行校准。

对于正手击球, - Y 为负重力加速度值,z 为任意值(无论正负)

对于反手击球, - 若y为正重力加速度值且z为任意值(无论正负)