gpt4 book ai didi

android - 如何检测安装了加速度计的安卓设备的左右倾斜?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:23 25 4
gpt4 key购买 nike

假设您有所有 3 个维度(即 X、Y 和 Z)的加速度读数。您如何根据读数推断手机向左或向右倾斜?读数每 20 毫秒生成一次。

我实际上想要从读数中推断倾斜度的逻辑。倾斜需要平滑。

最佳答案

可以通过多种不同的方式检测倾斜。您可以考虑 1 轴、2 轴或 3 轴。取决于您想要它的准确性,以及您有多想与数学作斗争。

如果只用一根轴,就很简单了。认为移动设备是完全水平的,然后像这样移动它:

enter image description here

只使用一个轴,比方说 x 轴就足够了,因为您可以准确地检测到该轴位置的变化,因为即使是任何小的移动都会使轴发生变化。但是,如果您的应用程序只读取那个轴,并且用户的手机几乎是垂直的,那么即使将手机旋转一个大角度,x 轴的差异也会非常小。不管怎样,对于只需要粗分辨率的应用,可以使用单轴。

参照基本三角学,重力矢量在 x 轴上的投影产生的输出加速度等于加速度计 x 轴与地平线之间夹角的正弦值。这意味着有了轴的值(那些是加速度值),您就可以计算出设备所在的角度。

enter image description here

这意味着传感器给您的值 = 到 9,8 * 角度的正弦值,因此通过计算您可以获得实际角度。

不过别担心,您甚至不必这样做。由于这些值或多或少是成比例的,如下表所示,您可以直接使用传感器的值,而不必太在意角度代表什么,如果您不需要它非常准确,由于该值的变化意味着角度的比例变化,因此通过一些测试,您会发现变化应该有多大才能与您相关。

enter image description here

因此,如果您获取一段时间内的值并相互比较,您可以计算出旋转幅度有多大。为此,

  1. 你只考虑一个轴。这将是 X 轴。
  2. 编写一个函数来获取一个函数调用与下一个函数调用之间该轴的传感器值的差异
  3. 确定最大时间和最小传感器差异,您将认为这是一个有效的运动(例如,大旋转是好的,但前提是它足够快,而快速运动只有在角度差异很大时才是好的够了)
  4. 如果您检测到满足这些条件的两次测量,您会注意到完成了半倾斜(例如,以 bool 值表示),并再次开始测量,但现在,新的引用值是被认为是半倾斜的值。
  5. 如果上一个差异是正的,现在你需要一个负差异,如果上一个差异是负的,现在你需要一个正差异;这是,回来了。因此开始取值,将新引用值与来自传感器的新值进行比较,看看是否完成了您在第 3 点中做出的决定。
  6. 如果你找到一个有效的值(完成值差异和时间条件),你有倾斜。但是如果你没有得到一个好的值并且时间被消耗了,你重置一切:让你的引用值是最后一个,重置计时器,将 half-tilt-done bool 值重置为 false,并继续测量。

我希望这对你来说足够好。当然,您可以找到一些库或代码 fragment 来帮助您解决这个问题,但正如您所说,我认为了解从读数中推断倾斜度的逻辑是很好的

图片取自this article ,如果您想提高精度并考虑倾斜 2 o 3 轴,我建议您阅读

关于android - 如何检测安装了加速度计的安卓设备的左右倾斜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20088549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com