获取没有GPS的设备移动方向

时间:2014-11-25 21:40:12

标签: android orientation sensor android-sensors acceleration

当设备移动到绝对坐标方向时(例如移动到+ x或-x),我可以检测到哪个传感器。

我需要准确的数据,因此我无法使用GPS

完成任务是在绘图(在计算机中)绘制Android设备传感器,这部分任务对我来说是未知的。

2 个答案:

答案 0 :(得分:2)

我对你的要求感到有些困惑。你想把一个装置放在口袋里走动,并制作一个你走过的地方的情节吗?或者你想像手上的三维鼠标一样挥动设备,用于绘画?

对于后者,请参阅上面的Ali的建议。如果你想做动作跟踪,我可以告诉你:

您可以轻松地使用加速计(或重力,如果可用)加磁力计与SensorManager.getRotationMatrix()结合使用,以了解设备面向的方向。

事实上,ROTATION传感器可以为您完成所有这些工作。您只需要足够的数学运算就可以将四元数转换为变换矩阵;这很容易。

(如果您正在尝试实施陀螺鼠标,可以在这里停止阅读。)

然后您可以使用线性加速度传感器来确定设备的移动方向。这将是一种穷人的惯性导航系统。但是,假设设备在启动应用程序时处于静止状态,并且传感器非常精确,可以满足您的需求。

加速度将为您提供设备坐标中的矢量。将该矢量乘以您从ROTATION传感器或SensorManager.getRotationMatrix()获得的矩阵,以获得世界坐标中的加速度矢量。然后随着时间的推移整合该矢量以获得速度矢量,然后随着时间的推移积累 矢量,以便在启动应用程序后移动距离和方向。

错误会迅速累积。在开始返回完全无意义之前,这个算法最好在几分钟内完成。您可以调整应用程序以检测设备何时不再移动,并利用该机会将速度矢量重置为零。

坦率地说,这是一个非常难以解决的问题。如果你解决它,可能会有一个博士或至少几篇论文。搜索“室内导航”一词以获取更多参考资料。

但请记住,如果没有某种位置服务(网络或gps),实际上无法确定设备的移动方向或位置。

我的理解是,所有现有的室内导航算法都依赖于偶尔的GPS修复,或者通过了解被导航的室内空间的布局并将其用作线索,或者通过了解附近WiFi发射器的位置并使用他们的信号优势,以产生修复。


说真的,除非你在这里说很小的距离,否则GPS是你最好的选择。

答案 1 :(得分:0)

自Android API级别24开始,就有一个名为TYPE_POSE_6DOF的传感器。在支持此功能的手机上,它将使用传感器和摄像头跟踪功能来提供3D空间中的相对和绝对旋转以及位置。 https://developer.android.com/reference/android/hardware/Sensor#TYPE_POSE_6DOF https://developer.android.com/reference/android/hardware/SensorEvent#values

另一个选择可能是使用ARCore,它将为相机姿势提供相似的值。 https://developers.google.com/ar/reference/java/arcore/reference/com/google/ar/core/Pose

最后,该视频很好地概述了Android传感器(ARCore之前的版本)。具体而言,围绕23:23的部分说明了为什么对加速度计力进行双积分不会提供位置的有用表示。 https://www.youtube.com/watch?v=C7JQ7Rpwn2k

(万一有人想知道,我只是尝试对正在从事的项目进行加速度计的双重积分,但是当设备恢复静止时,我一直保持非零速度运行,这导致位置值,甚至在1秒的时间内。)