Android加速度计精度(惯性导航)


109

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

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

然后,我通过将其再次放在桌子上并在X和Y方向上采样5000个加速度计读数来测试该系统。在校准的情况下,我希望这些加速度在每个方向上的总和为0(大约)。但是,事实并非如此,并且经过5000次迭代的总加速度远没有达到0(每条轴平均约为10)。

我意识到看不到我的代码可能很难回答,但是从更一般的意义上来说...

这仅仅是手机(HTC Desire S)上的加速度计读数有多不准确的一个示例,还是我的编码出现错误的可能性更大?


1
webvr-polyfill是一个很好的灵感来源:github.com/borismus/webvr-polyfill/tree/master/src看看他们如何使用加速度计数据来填充
SC

Answers:


128

通过对线性加速度进行两次积分可以得到位置,但是误差是可怕的。在实践中是没有用的。

这是解释为什么(谷歌技术讲座)23:20。我强烈推荐这部影片。

引起此问题的不是加速度计噪声,而是陀螺仪白噪声,请参阅第6.2.3节“误差传播”。(顺便说一句,您还将需要陀螺仪。)

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

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

装有鞋子的惯性传感器的行人跟踪

使用单个加速度计增强计步器的性能

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

类似的问题是这个

更新:

显然,有比上述奥利弗·伍德曼(Oliver J. Woodman)博士论文更高的版本:“惯性导航简介”:

室内环境的行人定位


2
我知道这是很久以前的事,但是我有一个后续问题。Android JB中的相机具有“全景”功能,可让您通过移动手机,旋转手机沿一个轴线性移动手机来拍摄全景照片。为此,它必须相对准确地跟踪手机的位置-至少比此答案链接的视频中提到的20cm / s错误更好。它是如何做到的?它是否可以改善惯性跟踪的质量?还是使用聪明的图像处理功能仅使用相机?
2013年

1
@Tom我相信后者,电话纯粹是通过图像处理算法将图片连接在一起。是什么让您认为手机必须跟踪其位置才能产生全景图片?可以使用90年代的普通相机来做到这一点,显然,那时我们的相机中没有加速度计:)当然,这些图片是连接在普通PC上的。但是您不需要这个位置,图像处理算法就足够了。希望这可以帮助。
阿里

这与旧的手动拍摄一些照片然后缝制它们的工作完全不同。它确实以某种方式实时跟踪其位置。不进行演示就很难解释。您无需手动拍照-手机会确定您何时移动足够远的距离来拍摄另一张照片。拍照时,它在底部显示一个小条,并提供全景预览。例如,如果您将相机指向太低的位置,它将开始发出哔哔声并显示向上箭头,以告诉您需要将其向上移动。
汤姆

2
实际上,它似乎确实使用了图像处理功能-启动全景图,然后在相机前挥动您的手,将使其位置跟踪系统非常混乱!
汤姆

@汤姆 我认为它主要使用图像处理(正如您的最后评论所建议的那样),但是它很可能与跟踪方向(而不是位置)结合在一起。
阿里

19

我只是想大声一点,而且还没有玩过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系统没有此功能。漂移将永久保留所有未来的测量结果和化合物。对于传统的惯性导航系统而言,过高的准确性或定期进行辅助导航检查至关重要。

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

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

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

假设您要从“老大哥”那里获取一个页面,然后开始存储有关人们去向的数据。您可以开始绘制人们应该行走的地方。可以肯定的是,如果用户开始走楼梯,那么她将与走前的人处于同一楼梯台阶。经过1000次迭代和一些最小二乘调整后,您的数据库几乎可以准确地知道这些阶梯在哪里。现在,您可以在人开始走路时纠正角度漂移和位置。当她撞上那些楼梯,掉下那个大厅或者沿着人行道行驶时,任何漂移都可以得到纠正。您的数据库将包含按某人可能会走到那里或该用户过去曾走过那里的可能性加权的扇区。为此,对空间数据库进行了优化divide and conquer只分配有意义的部门。就像那些MIT项目中,配备激光的机器人从黑色图像开始,然后每转一圈在迷宫中绘制迷宫,照亮所有墙壁的位置。

高流量区域将获得更高的权重,而从未有人到达的区域将获得0的权重。较高的交通区域具有较高的分辨率。从本质上讲,您最终将获得一张遍历所有人的地图,并将其用作预测模型。

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

另外,如果您对此类资料的最新研究感兴趣,我强烈建议您(免费)订阅GPS World杂志。每个月我都会与众不同。


“将尽可能与GPS进行校准。在GPS不足的情况下,INS会很好地称赞。”据我所知,这就是卡尔曼滤波的目的。它结合了每种方法的优势,以抵消另一种方法的劣势
Endolith

8

我不确定您的偏移量有多大,因为您忘记了包含单位。(“在每个轴上大约10个”没有多说。

加速度计适用于确定手机相对于重力的方向或检测手势(摇动或撞击手机等)之类的事情。

但是,尝试使用加速度计进行航位推测会导致很多复合错误。否则,加速度计必须非常准确,而且这不是常见的用例,因此我怀疑硬件制造商是否对此进行了优化。


感谢你的回答。静止时,加速度计在X和Y轴上的读数均为-0.8 ms ^ -2左右,因此我将其用作偏移量。通过“大约10”位,我的意思是经过5000次迭代,将来自传感器的单个轴上的每个加速度加起来总计不大约为0 ms ^ -2(就像它在偏移上方和下方均匀波动一样)值),而是倾向于在一个方向上记录更多的加速度,经过两次积分找到位置后,随着手机在一分钟内移动3m左右,结果逐渐变好。
woodstock365

+1用于航空航海术语“航位推算”。尽管航位推测法比INS更适用于使用相机导航。
RyanJMcGowan

7

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

要校准Android加速度计,您需要采样1000多个点,并找到加速度计围绕其波动的“模式”。然后根据输出波动幅度找到数字点的数量,并将其用于滤波。

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


1
我正在寻找校准方法。看来您的建议是我所需要的。我只需要确认一下。找到模式后,说它是0.5。我没有得到“然后通过输出波动多少来找到数字点的数量,并将其用于滤波。” 您能否再详细说明一下。
Nazerke

1
假设您的加速度计具有256个输出点,并且在两次读数之间波动0.015m / s ^ 2。将设备放在桌子上时,输出可能会以0.015m / s ^ 2的倍数波动。假设您的读数为0 +/-(X * 0.015)。您需要找到X(这将是一个偶数)。例如,我的X可能是3。在这种情况下,我会忽略加速度计读数的变化,该变化小于0.045 m / s ^ 2
Alex Stone

所以android手机的加速度计还不是很好。
Techsin

4

我知道这已经很老了,但是任何给出的答案都没有解决当前的问题。

您所看到的是设备的线性加速度,包括重力作用。如果将手机放在平坦的表面上,传感器将报告由于重力引起的加速度,加速度约为9.80665 m/s2,因此您将看到10。传感器不准确,但并非如此!请参阅此处以获取一些有用的链接以及可能需要的传感器信息。


17
否-我认为您误解了这个问题:“ ...在X和Y方向上的读数(与表格平行,因此在这些方向上没有重力作用)”。9.8 / s2将在Z轴上。
teapot7

0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.