我正在开发一种工具,它接收运动传感器数据并将其发送到机器学习算法,最终将推断出不同类型的运动。
我读了Motion sensor guide,看起来你可以从传感器获得的数据有一些冗余。例如: accelrometer 数据包含重力数据,线性加速数据显示加速,但由于重力即可。
所以我的问题是:我真的需要所有传感器来获得所有形式的动作,还是我可以放弃其中一些?
编辑:(澄清问题)
我想收集最小的数据,这些数据可以让我推断出相同的东西。我正在寻找的是用户行为:用户握住手机的角度,用户使用手机时的移动方式等。
我正在寻找的答案应该包括其中具有高相关性的传感器组,这样只需要该组中的一些传感器来推断相同类型的运动\运动\旋转\加速\等..
答案 0 :(得分:3)
术语" Motion"在这个问题上没有确切的含义。所以我更广泛地回答。
"一个人拿着手机的方式"只不过是手机的方向。有三个传感器分别指示手机的方向。
其中只有加速度计是物理传感器,其他两个是虚拟传感器(它们没有特殊硬件,它们使用加速度计数据并以不同格式报告方向)。
"一个人移动手机的方式" - 在这里我考虑四个动作。
陀螺仪传感器的输出长期不准确,加速度计的输出在短期内不准确,因此将它们组合起来以获得稳定的输出。有关详细信息,请参阅this问题。
现在很明显,陀螺仪和加速度计是最低要求。但是,使用各种传感器可以最大限度地减少我们的工作。
答案 1 :(得分:1)
你无法决定你得到了什么 - 每个传感器的数据已经被定义,你得到全部或全部。如果你仔细观察,公共API中没有一个地方可以让你询问具体的事情。
在这里引用Google's document explaining sensor types:
加速计传感器报告设备沿3个传感器轴的加速度。测得的加速度包括物理加速度(速度变化)和重力。测量结果在sensors_event_t.acceleration的x,y和z字段中报告。
如果你看到android source,这里的结构是严格定义的,struct for acceleration contains specific fields。因此,即使你在不喜欢的领域获得0
,你也无法获得任何收益。
但你指的是两件事 - 基础传感器,大致相当于设备上的物理传感器,复合传感器,它们结合了来自的读数各种物理传感器,以获得更多有用的数据。
因此,虽然您无法确定特定传感器的内容(例如“仅重力”或“仅Y轴加速”),但复合传感器确实为您提供了仅使用基础传感器自行计算的数据。因此,经过一些计算后,线性加速度是来自加速度计和陀螺仪(或磁传感器)的数据组合。类似地,步检测器“传感器”仅使用加速度计,但会自动解释数据,只为您提供“是,某人已经迈出了一步”且具有单值1
的事件。
如果您将原始运动数据提供给某些算法,我猜猜基础传感器就是您正在寻找的。也就是说,我相信您仍然可以安全地注册所有传感器(包括基础传感器和复合传感器),这些传感器可以为您提供所需的所有数据(可能更多),而不会产生有意义的电池影响。
有关每个传感器的更多详细信息,请参阅Android网站上的Sensor types,如果您感到好奇,也可以阅读sensors stack上的简短摘要。
答案 2 :(得分:1)
不,你不需要每个传感器。存在一些传感器以方便用户。您的线性加速度传感器的示例是一个 - 它告诉您加速度计的结果取出重力。您可以自己从原始加速度计数据中做到这一点,但这需要一些数学运算(您需要减去所有3个轴上的矢量重力)和一些技巧(您是否记得校准传感器?它可能不会读取9.8在这种情况下,如果你不在海平面,9.8可能不是你的引力。这是每个应用程序需要重复的大量工作,因此他们创建了一个软件" sensor"位于加速度计顶部并提供计算数据。应用程序在同一个应用程序中使用原始和线性加速度计,通常是其中一个,这是不寻常的。步数计数器是另一个例子,它根据加速度计数据猜测步骤是什么。您也不需要校准和未校准的陀螺仪数据。
至于你需要什么 - 没有任何线索,你不能充分说明你想做什么。虽然有一个警告 - 你说你正试图检测动作。你不能这样做。您可以检测加速度和旋转。您无法以恒定速度检测运动。如果您正在使用这些开发任何类型的应用程序,那么使用正确的术语并根据物理特性以及物理加速度计和陀螺仪的工作方式进行思考是值得的,否则您将导致自己的错误。