我打算在android平台上开发一个基于加速度计的鼠标。我打算使用的移动设备是 htc nexus one。当移动设备移动时,光标应该移动是空间。与重力运动相比,这会很难吗?
2 回答
由于您对问题的表述方式,这很难回答。
你想用鼠标做什么?如果您尝试在计算机上移动鼠标,您还需要创建一个可以在 PC 上运行的软件包,该软件包可以设置鼠标的位置。
显然,手机中的加速器检测加速度,通常在 xy 和 Z 轴上。如果您将手机放在桌子上,您会注意到手机重量低于 1g(应该是小写还是大写?)。这实际上是 1g 的加速度,即使它没有加速你仍然拥有它。您可以通过记录这个 1g 的组件在三个轴上的不同来检测手机的滚动。即,您在 x 和 z 轴上的 g 力相等,在 y 轴上为零,那么您可以“假设”手机被保持在 45 度角。
当组件的总和不等于 1g 时,您知道您的手机实际上正在加速。但是,您需要知道手机的位置。由于数学的工作方式令人愉快而痛苦,如果您计算出手机(在每个轴上)加速度微分的微分,您应该有这个位置。从加速度计算位置的确切方法比我早上能想到的要多,但是如果你为它们都保持一个常数,那么关系船的转换相当简单,你可以,时间!
老问题,但仍然与较新的硬件相关,所以这里......
您最大的问题是,仅加速度计无法区分运动引起的加速度与重力和倾斜引起的加速度之间的差异。要隔离运动,您需要第二个传感器。您的问题非常类似于人们构建类似 Segway 的平衡机器人所面临的问题,并且解决方案也几乎相同:
陀螺仪。我相信三星 Galaxy S 手机有陀螺仪,但我不确定它们是否是“真正的”MEMS 陀螺仪,或者只是以某种可能无法胜任任务的方式进行模拟。
相机。这是我的一个未经检验的理论,但如果你能以某种方式用闪光灯(在带 LED 闪光灯的手机上)反射足够多的光线,或者使用带有某种夜光图案的鼠标垫,你就可以当它知道它失焦时强制相机进行低分辨率视频捕捉,您可能可以对模糊的未聚焦斑点进行模式识别,足以确定手机是移动还是静止,并可能获得一些速度感和/或方向。将来自实时模糊摄像机视频流的低质量数据与来自加速度计的相对高分辨率数据相结合,您可能会得到一些有用的东西。
但是,在您为 1 或 2 烦恼之前,请确保您已准备好解决更大的问题:模拟 HID 蓝牙鼠标。这是可能的(但可能需要有根手机),并且 Android Market 中至少有一个应用程序可以做到这一点,但这不是一项简单的任务。你不会在一个下午解决这个问题,你可能应该尝试解决它至少足以模拟一个假鼠标,并令人信服地将它与一台期待真正蓝牙鼠标的计算机配对,然后再为加速度计问题烦恼. 两者都是高风险的,所以不要在开始另一项任务之前尝试完全完成一项任务,但不要在其中一项上花费太多时间,直到你对问题的范围有了相当好的把握并知道你在做什么进入。
如果蓝牙 HID 太多,还有另一种选择......有很多开源项目涉及跳过蓝牙 HID,只是将其用作与 PC 上运行的服务器通信的串行端口(或直接通过 USB 连接)与亚行)。AFAIK,它们都没有特别好的手机鼠标功能,除非您考虑将手机用作触摸板作为“鼠标”。