【问题标题】:When to use accelerometer or gyroscope on Android何时在 Android 上使用加速度计或陀螺仪
【发布时间】:2014-01-08 17:18:18
【问题描述】:

可以假设大多数用户设备都有陀螺仪吗?换句话说,我会在我的应用中使用陀螺仪排除大量用户吗?

我正在制作一个儿童故事书应用程序,我希望用户能够围绕偏航轴倾斜他们的设备来来回移动摇椅。它只是应用程序的一小部分,不需要非常精确。我应该使用一个传感器而不是另一个传感器吗?

【问题讨论】:

    标签: android accelerometer gyroscope


    【解决方案1】:

    用户覆盖率:

    大多数设备都有陀螺仪和加速度计,但几乎每个设备都有一个加速度计。尤其是较旧的设备和较便宜的设备没有陀螺仪。不要忘记,因为它是一个儿童应用程序,也许父母不希望小孩子使用他们出色的 700 美元平板电脑,而可能会使用更便宜的平板电脑。更便宜的设备往往没有陀螺仪。所以加速度计 +1。

    用户体验

    加速度计测量 3 维坐标系中的加速度。在大多数情况下(当用户实际上没有跳来跳去或扔掉设备时)加速度的最大部分是重力。仅凭重力就很容易确定倾斜和轻微运动。此外,您还拥有 Gravity 软件传感器来消除奇怪的运动,以及线性加速度来消除重力。陀螺仪检测旋转。它比加速度计更灵敏、更精确并且产生事件的速度更快,但对于这个用例来说似乎有点过分了。如果您想制作 3D 赛车游戏或飞行模拟器,这对陀螺仪来说是一个胜利,但对于儿童应用程序来说,这太过分了。

    电池使用情况

    这里没有比赛。陀螺仪使用的电池多 3-30 倍(可能更多,取决于设备),而加速度计对电池的使用非常温和。另外,对于大多数用户来说,加速度计已经处于活动状态(自动旋转屏幕),因此这里没有传感器电池使用情况。加速度计 +1

    编程

    传感器在 Android 应用中实现起来非常简单直接。由于陀螺仪检测旋转速度,如果设备保持静止(可能在 +-0.01rad/s 范围内有一点噪音),它会给出所有 0 值,所以你只需要一个小的 if 块来消除非常轻微的运动(例如,当陀螺仪值小于 0.2 rad/s 时)。使用加速度计,您需要一些额外的计算来确定设备的方向以及实际上需要更多注意以确定移动方向的轴。这并不难,但它确实为您的工作添加了几行额外的代码和一些额外的调试。 +1 陀螺仪。

    结论

    对于简单的儿童应用,加速度计是最佳选择。我不会再考虑了。由于您不太关心精度,因此您实际上消除了陀螺仪获得的积分。

    【讨论】:

    • 感谢您的深入回答
    【解决方案2】:

    我认为这些传感器是值得考虑的(我在此引用“Reto Meier,Professional Android 4 Application Development”一书):

    • Sensor.TYPE_ACCELEROMETER — 三轴加速度计,以 m/s2(米每秒,每秒)为单位返回三个轴的当前加速度。

    • Sensor.TYPE_GYROSCOPE — 三轴陀螺仪,以弧度/秒返回设备沿三个轴的旋转速率。您可以随时间整合旋转速率以确定设备的当前方向;但是,通常最好将其与其他传感器(通常是加速度计)结合使用,以提供平滑和校正的方向。

    • Sensor.TYPE_ROTATION_VECTOR — 将设备的方向作为围绕轴的角度组合返回。它通常用作传感器管理器中 getRotationMatrixFromVector 方法的输入,以将返回的旋转向量转换为旋转矩阵。旋转矢量传感器通常被实现为虚拟传感器,它可以组合和校正从多个传感器(例如加速度计和陀螺仪)获得的结果,以提供更平滑的旋转矩阵。

    引用结束...您可以使用 getDefaultSensor 方法找到给定类型的默认 Sensor 实现,例如:

    Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
    

    如果返回 null,则设备没有传感器,因此您知道不要尝试使用它。我预计大多数设备都有这些传感器(很可能是加速度计),因为它们是用来检测屏幕旋转的。

    【讨论】:

    • Sensor.TYPE_ROTATION_VECTOR(非常方便)正在 Moto 360 中停用。你可能想远离这个。
    【解决方案3】:

    我相信大多数手机都有倾斜的能力。我有一部便宜的 2 年旧手机,它是新的 45 美元,运行的是 android 2.1,它倾斜并改变视角。
    我还有一台用了三年的平板电脑,它也倾斜了。
    我会说你很安全,假设倾斜会在那里。

    【讨论】:

      【解决方案4】:

      几乎所有(甚至所有)手机都会配备加速度计。但并非所有人都有陀螺仪。有人在这里列出了带有陀螺仪的电话的非详尽清单:Which Android phones out there do have a gyroscope?

      如果您可以设法使其仅使用加速度计工作,那么它肯定会有更多设备支持您的应用,但我无法真正告诉您这种差异有多大

      【讨论】:

        【解决方案5】:

        随着时间的推移,“典型”安卓设备中可用传感器的数量和类型发生了相当大的变化。但是一些测量设备方向的方法是较旧的功能之一。似乎正确的方法是在运行时测试新传感器,然后回退到旧传感器,同时优雅地处理信息根本不可用的情况。

        Sensor Overiew 开发者文档有一个表格,显示特定传感器类型何时首次在 Android API 级别可用。但请注意,这只是反映了该 API 级别讨论该数据类型的能力;特定设备可能仍缺少所需的硬件。

        似乎加速度计和陀螺仪是最古老的传感器之一,并且可能存在于大多数手机中。

        目前(2013 年 12 月)developer dashboard 显示,除了大约 1.6% 的 Android 设备访问 Play 商店之外,所有设备都是 2.3 或更高版本(API 10 或更高版本)。该数据仅基于使用商店的 2.2 版或更新的设备,2.2 之前的设备仅占 2013 年 8 月登录任何 Google 服务器的所有设备的 1% 左右。该页面包含有关设备显示分辨率的信息,但不包含似乎涵盖了设备的其他功能。我找不到专门涵盖野外可用传感器的仪表板。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-25
          • 1970-01-01
          • 2019-05-24
          相关资源
          最近更新 更多