114

我正在考虑为 Android 手机实施惯性导航系统,我意识到考虑到加速度计的准确性和读数的不断波动,这很难。

首先,我将手机放在平坦的表面上,并在 X 和 Y 方向(平行于桌子,因此在这些方向上没有重力作用)对 1000 个加速度计读数进行采样。然后我平均这些读数并使用这个值来校准手机(从每个后续读数中减去这个值)。

然后我再次将系统放在桌子上并在 X 和 Y 方向上采样 5000 个加速度计读数来测试系统。我希望,考虑到校准,这些加速度在每个方向上应该加起来(大约)为 0。然而,情况并非如此,超过 5000 次迭代的总加速度远不接近 0(每个轴上平均约为 10)。

我意识到在没有看到我的代码的情况下这可能很难回答,但在更一般的意义上......

这仅仅是一个例子,说明手机 (HTC Desire S) 上的加速度计读数有多不准确,还是更有可能是我在编码中犯了一些错误?

4

6 回答 6

134

您可以通过两次积分线性加速度来获得位置,但误差很可怕。在实践中是没有用的。

这是23:20的原因 (Google Tech Talk) 的解释。我强烈推荐这个视频。

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

至于室内定位,我发现这些很有用:

使用 Sigma-Point Kalman 平滑器的基于 RSSI 的室内定位和跟踪

使用鞋装惯性传感器进行行人跟踪

使用单个加速度计提高计步器的性能

我不知道这些方法在现实生活中的应用程序中会如何执行,或者如何将它们变成一个不错的 Android 应用程序。

一个类似的问题是this

更新:

显然有比上述 Oliver J. Woodman 更新的版本,“惯性导航简介”,他的博士论文:

室内环境的行人定位

于 2011-10-20T12:35:06.890 回答
20

我只是在大声思考,而且我还没有使用过 android 加速度计 API,所以请耐心等待。

首先,传统上,要从加速度计获得导航,您需要一个 6 轴加速度计。您需要 X、Y 和 Z 方向的加速度,还需要旋转 Xr、Yr 和 Zr。如果没有旋转数据,您就没有足够的数据来建立矢量,除非您假设设备永远不会改变它的姿态,这将是非常有限的。无论如何,没有人阅读 TOS。

哦,你知道INS会随着地球的自转而漂移,对吧?所以也有。一小时后,你神秘地爬上了一个 15° 的斜坡进入太空。那是假设您有一个 INS 能够长时间保持位置,而手机还不能做到这一点。

使用加速度计(即使使用 3 轴加速度计)进行导航的更好方法是尽可能与 GPS 连接以校准 INS。在 GPS 不足的地方,INS 可以很好地补充。由于您离树太近,GPS 可能会突然将您从 3 个街区外射出。INS 不是很好,但至少它知道你没有被流星击中。

你可以做的是记录手机加速度计数据,以及很多。就像几个星期一样。将其与良好的(我的意思是非常好的)GPS 数据进行比较,并使用数据挖掘来建立加速度计数据和已知 GPS 数据之间的趋势相关性。(专业提示:您需要检查 GPS 历书是否有良好的几何形状和大量卫星。有些日子您可能只有 4 颗卫星,这还不够)您可能会发现当一个人当手机放在口袋里走路时,加速度计数据记录了一个非常具体的模式。根据数据挖掘,您可以为该设备、该用户建立一个配置文件,以及该模式在有 GPS 数据时代表的速度类型。您应该能够检测到转弯、爬楼梯、坐下(校准到 0 速度时间!) 和其他各种任务。手机的持有方式需要完全视为单独的数据输入。我闻到了用于进行数据挖掘的神经网络。换句话说,对输入的含义视而不见。该算法只会寻找模式中的趋势,而不是真正关注 INS 的实际测量值。它所知道的只是historically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now.它会相应地向前推进。重要的是它是完全失明的,因为只需将手机放在口袋里可能会以 4 种不同方向之一定向,如果换口袋则 8 种。还有很多方法可以握住您的手机。我们在这里谈论很多数据。

你显然仍然会有很多漂移,但我认为这样你会有更好的运气,因为设备会知道你什么时候停止行走,并且位置漂移不会持续存在。它会根据历史数据知道您处于静止状态。传统的 INS 系统不具备此功能。这种漂移会以指数方式延续到所有未来的测量和化合物中。对于传统的 INS 来说,不虔诚的准确性,或者定期检查二级导航是绝对重要的。

每个设备,每个人都必须有自己的个人资料。这是大量的数据和大量的计算。每个人的行走速度不同,步数不同,将手机放在不同的口袋里等等。在现实世界中实现这一点肯定需要在服务器端处理数字运算。

如果您确实使用 GPS 作为初始基线,则部分问题是 GPS 往往会随着时间的推移而有自己的迁移,但它们是非永久错误。将接收器放在一个位置并记录数据。如果没有 WAAS 更正,您可以轻松获得在您周围 100 英尺的随机方向上漂移的位置修正。使用 WAAS,可能低至 6 英尺。实际上,在背包上安装亚米 RTK 系统可能会更好,至少可以降低 ANN 的算法。

使用我的方法,INS 仍然会有角度漂移。这是个问题。但是,如果你到目前为止构建了一个人工神经网络,在 n 个用户中倾注了数周的 GPS 和 INS 数据,并且实际上让它工作到了这一点,那么你显然不介意到目前为止的大数据。继续走这条路并使用更多数据来帮助解决角度漂移:人是习惯的动物。我们几乎做同样的事情,比如在人行道上行走、穿过门、上楼梯,而不是做疯狂的事情,比如穿过高速公路、穿过墙壁或走出阳台。

因此,假设您正在从老大哥那里获取页面并开始存储有关人们去向的数据。您可以开始绘制人们预期步行的位置。可以肯定的是,如果用户开始走上楼梯,她与之前的人走上的楼梯底部相同。在 1000 次迭代和一些最小二乘调整之后,您的数据库几乎可以非常准确地知道这些楼梯的位置。现在,您可以在人开始行走时校正角度漂移和位置。当她撞上那些楼梯,或者拐下那个大厅,或者沿着人行道行进时,任何漂移都可以得到纠正。您的数据库将包含根据一个人走到那里的可能性或该用户过去曾走过那里的可能性加权的扇区。空间数据库为此进行了优化,使用divide and conquer只分配有意义的部门。这有点像麻省理工学院的项目,配备激光的机器人从黑色图像开始,并通过每一个转弯来描绘记忆中的迷宫,照亮所有墙壁的位置。

人流量大的区域将获得更高的权重,而从未有人获得过权重的区域将获得 0 权重。较高的交通区域具有较高的分辨率。您最终会得到一张任何人去过的任何地方的地图,并将其用作预测模型。

如果您可以使用这种方法确定一个人在剧院中的座位,我不会感到惊讶。如果有足够多的用户去剧院,并且有足够的分辨率,您将拥有映射剧院每一排的数据,以及每排的宽度。访问某个位置的人越多,您预测该人所在位置的保真度就越高。

另外,如果您对当前对此类内容的研究感兴趣,我强烈建议您(免费)订阅 GPS World 杂志。每个月我都在玩它。

于 2013-12-28T09:09:31.810 回答
9

我不确定你的偏移量有多大,因为你忘了包括单位。(“每个轴上大约 10 个”并没有说太多。:P)也就是说,这仍然可能是由于硬件不准确造成的。

加速度计适用于确定手机相对于重力的方向或检测手势(摇晃或碰撞手机等)等。

但是,尝试使用加速度计进行航位推算会使您遇到很多复合错误。否则加速度计需要非常准确,这不是一个常见的用例,所以我怀疑硬件制造商正在为此优化。

于 2011-10-19T23:22:12.720 回答
8

Android 加速度计是数字的,它使用相同数量的“桶”对加速度进行采样,假设有 256 个桶,加速度计能够感应从 -2g 到 +2g。这意味着您的输出将根据这些“桶”进行量化,并且会在一组值附近跳跃。

要校准 android 加速度计,您需要采样超过 1000 个点并找到加速度计波动的“模式”。然后通过输出波动的多少找到数字点的数量,并将其用于过滤。

一旦你得到模式和 +/- 波动,我建议卡尔曼滤波。

于 2012-05-31T12:31:46.430 回答
6

我意识到这已经很老了,但是给出的任何答案都没有解决手头的问题。

您看到的是设备的线性加速度,包括重力的影响。如果您将手机放在平坦的表面上,传感器将报告重力加速度,该加速度约为9.80665 m/s2,因此您看到的是 10。传感器不准确,但它们并没有那么不准确!有关您可能需要的传感器的一些有用链接和信息,请参见此处。

于 2013-03-03T20:49:50.223 回答
1

您假设 X 和 Y 方向上的加速度计读数(在这种情况下完全是硬件噪声)将围绕您的平均值形成正态分布。显然情况并非如此。

您可以尝试的一件事是在图表上绘制这些值并查看是否出现任何模式。如果不是,那么噪声在统计上是随机的,并且无法针对 - 至少对于您的特定电话硬件进行校准。

于 2018-04-17T04:14:35.117 回答