使用加速度计、陀螺仪和指南针计算设备在 3D 世界中的运动

Posted

技术标签:

【中文标题】使用加速度计、陀螺仪和指南针计算设备在 3D 世界中的运动【英文标题】:Using accelerometer, gyroscope and compass to calculate device's movement in 3D world 【发布时间】:2012-01-06 01:30:50 【问题描述】:

我正在开发一个可以计算设备在 6 个方向上的移动的 android 应用程序。我想我可以使用加速作为;

"x=a.t^2" 但 a 不是常数。这就是问题所在。如何计算总移动量?

【问题讨论】:

您需要轮询a 的值并计算出平均加速度,并在轮询之间的时间段内应用该平均值。 很好奇你是如何解决这个问题的,如果你得到它以便精确导航。 【参考方案1】:

加速度计为您提供三个方向(x、y、z)。它们是加速度测量值,很难知道设备的位置。但是,请记住加速度通过积分与位置相关:

a(t) = a[x]
v(t) = a[x]t + c
x(t) = a[x]t ^ 2 + ct + d

问题是您无法知道 c 或 d,因为当您取导数时,常数会丢失。因此,在缺少 c 和 d 的情况下,您无法正确处理某些数量。您可以尝试通过记住上次使用的值来进行补偿。因此,在抓取 3 个样本后,您就可以开始计算位置了。

关于如何解释来自传感器的数据有大量信息。就像找出重力的方向,减去重力以获得线性加速度。

http://developer.android.com/reference/android/hardware/SensorEvent.html

这是一种使用加速度计确定位置的方法以及用于详细查找位置的算法:

https://www.nxp.com/docs/en/application-note/AN3397.pdf

【讨论】:

特别是第二个链接对我来说是一个金矿。非常感谢。 我使用加速度来计算我将移动的像素数。它非常简单且工作正常。如果你愿意,我可以向你发送我的应用程序,但它有一些依赖项。 @chubbsoundubs,请您看一下at this topic。谢谢。 我修复了链接【参考方案2】:

确实,您通过对线性加速度积分两次来获得位置。 但是这个错误太可怕了。在实践中是没有用的。

这里是an explanation why (Google Tech Talk) 23:20。我强烈推荐这个视频。

导致问题的不是加速度计噪声,而是gyro white noise,请参见第 6.2.3 节错误传播。 (顺便说一句,你也需要陀螺仪。)

类似的问题是Distance moved by Accelerometer。

【讨论】:

谢谢,但我想我不需要陀螺仪。你能解释一下为什么你认为有必要找到移动的距离吗? 如果您使用线性加速,SensorManager 需要陀螺仪。至于接受的答案,我希望你知道你得到的结果会很差。比你预期的要糟糕得多。 为什么?陀螺仪正在返回您的角速度。你需要什么来加速。我真的不明白。 已经看过了。但我不想用同样的方式。做到这一点的方法不止一种。事实上,你甚至可以使用相机。 阿里,你发布的综合结果会很糟糕,但我不确定是不是这样。在谷歌视频中,经验法则是“噪音的整合变成漂移”。当你整合一些东西时,你会得到曲线下的面积,它总是随着你的线在正 y 轴上方的时间增长。不完全是漂移,只是表明该区域正在缓慢增加。

以上是关于使用加速度计、陀螺仪和指南针计算设备在 3D 世界中的运动的主要内容,如果未能解决你的问题,请参考以下文章

陀螺仪原理--网上转载

unity3d啥设备才能用陀螺仪

Unity 3D中加速度计和陀螺仪的传感器融合

使用加速度计和陀螺仪获取手机在太空中的大致位置

使用陀螺仪和加速度计获取方向

硬件架构设计 | 惯性导航系统