Android加速计精度(惯性导航)
我正在考虑实现一个Android手机的惯性导航系统,我认识到加速度计的准确性和读数的不断波动是很难的。
首先,我把手机放在一个平面上,在X和Y方向(与桌子平行,所以没有重力作用在这些方向上)采样1000个加速度计读数。 然后,我对这些读数取平均值,并使用这个值来校准手机(从以后的每个读数中减去这个值)。
然后,我再次把它放在桌子上,并在X和Y方向上取样5000个加速度计读数来testing系统。 在给定校准的情况下,我希望这些加速度在每个方向上加起来大致为0。 但是,情况并非如此,5000次迭代的总加速度远不是0(每个轴上的平均值约为10)。
我意识到没有看到我的代码,这可能很难回答,但从更广义的意义上说…
这仅仅是加速度计读数在手机(HTC Desire S)上的不准确度的一个例子,还是更可能是我在编码方面出现了一些错误?
你通过两次整合线性加速度得到位置,但是错误是可怕的。 在实践中是无用的。
这是为什么(Google技术讲座)在23点20分解释 。 我强烈推荐这个video。
导致问题的不是加速度计噪声,而是陀螺仪白噪声 ,请参见第6.2.3小节的错误传播。 (顺便说一句,你也需要陀螺仪。)
至于室内定位,我发现这些有用的:
基于RSSI的室内定位和使用西格玛点卡尔曼平滑器的跟踪
行人跟踪与鞋装惯性传感器
使用单个加速度计提高计步器的性能
我不知道如何将这些方法在现实生活中应用,或者如何将它们变成一个漂亮的Android应用程序。
类似的问题是这样的 。
更新:
显然有一个比上述Oliver J. Woodman更新的版本,“惯性导航介绍”,他的博士论文:
室内环境的行人本地化
我只是在大声思考,而我还没有玩过android加速度计API,所以请耐心等待。
首先,传统上,要从加速度计获得导航,您需要一个6轴加速度计。 X,Y和Z需要加速度,而Xr,Yr和Zr也需要加速度。 没有旋转数据,你就没有足够的数据来build立一个向量,除非你假设设备不改变它的态度,这将是非常有限的。 没有人阅读TOS反正。
哦,你知道INS随着地球的旋转而漂移,对吧? 所以也是这样 一小时后,你神秘地爬上了一个15度的斜坡上空。 这是假设你有一个INS能够维持很长的位置,这是一个电话不能做的。
利用加速度计(即使用3轴加速度计)进行导航的更好的方法是,只要可能,就要连接到GPS来校准INS。 在GPS不足的情况下,INS很好地补充。 GPS可以突然将你从3个街区外赶走,因为你距离树太近。 INS不是很好,但至less它知道你没有被meteor击中。
你可以做的是logging手机加速计数据,以及它的很多。 像周值。 将它与好的(我的意思是非常好的)GPS数据进行比较,并使用dataminingbuild立加速度计数据与已知GPS数据之间趋势的相关性。 (专业提示:您需要检查GPS日历是否有好的几何形状和多颗卫星,有些日子您可能只有4颗卫星,这还不够)您可能会发现当一个人正在将他们的手机放在口袋里,加速计数据logging了一个非常具体的模式。 基于数据挖掘,您可以与该用户build立该设备的configuration文件,以及该模式带有GPS数据的模式代表什么样的速度。 你应该能够检测到转弯,爬楼梯,坐下(校准到0速度的时间!)和其他各种任务。 如何保持电话将被视为完全独立的数据input。 我闻到一个被用来做数据挖掘的neural network。 换句话说,对于input的意思是不明确的。 该algorithm只会查找模式中的趋势,而不会真正关注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种不同的方向,如果你换了口袋,也可以select8种。 而且还有很多种方法来保持你的手机。 我们在这里讨论很多数据。
你显然还是会有很多的漂移,但是我认为你会有更好的运气,因为这个装置会知道你什么时候停止走路,位置漂移不会是永久的。 它知道你站在不变的历史数据。 传统的INS系统没有这个function。 该漂移延续到所有未来的测量和复合指数。 不正确的准确性,或者有一个定期检查的辅助导航,对于传统的INS是绝对重要的。
每个设备,每个人都必须拥有自己的configuration文件。 这是很多的数据和大量的计算。 每个人都走不同的速度,采取不同的步骤,并把他们的手机放在不同的口袋等等。当然,要在现实世界中实现这一点,需要在服务器端处理数字处理。
如果您确实使用GPS作为初始基准线,那么GPS的部分问题往往会随着时间的推移而自行迁移,但它们是非永久性的错误。 坐在一个位置的接收器并logging数据。 如果没有WAAS修正,你可以很容易地得到位置修正漂stream在你身边100英尺的随机方向。 用WAAS,也许下到6英尺。 在背包上使用亚米级RTK系统可能会带来更好的运气,至less可以降低ANN的algorithm。
使用我的方法,你仍然会与INS发生angular度漂移。 这是个问题。 但是,如果你到目前为止已经build立了一个人工neural network(ANN)来为n个用户倾注数周的GPS和INS数据,并且实际上已经把它运用到了这一点,那么到目前为止,你显然不介意大数据。 继续沿着这条道路走下去,并使用更多的数据来帮助解决angular度漂移:人是习惯的生物。 我们几乎做同样的事情,如走在人行道上,通过门,上楼梯,不要做疯狂的事情,如穿越高速公路,穿过墙壁或阳台。
那么假设您正在从“老大哥”那里获取一个页面,并开始存储人们去哪里的数据。 你可以开始映射人们将要走的地方。 可以肯定的是,如果用户开始爬楼梯,她就在同一个楼梯的底部,以至于走在前面的那个人。 经过1000次迭代和一些最小二乘调整,你的数据库非常清楚这些楼梯在哪里很准确。 现在,您可以在人开始行走时纠正angular度漂移和位置。 当她碰到那些楼梯,或者关掉那个大厅,或者走下人行道时,任何漂移都可以被纠正。 你的数据库将包含一个扇区,这个扇区是由一个人走到那里的可能性或者这个用户过去在那里走过的可能性加权的。 空间数据库使用divide and conquer
来优化分配有意义的部门。 这就像那些麻省理工学院的项目,激光装备的机器人从黑色的图像开始,每回合画一次记忆中的迷宫,照亮所有的墙壁。
高交通量的地区将获得更高的权重,而没有人获得权重的地区将会获得更高的权重。 高交通领域有更高的决议。 你最终将得到一个任何地方都有的地图,并将其用作预测模型。
如果你能用这种方法确定一个人坐在剧院里的座位,我不会感到惊讶。 给足够的用户去剧院,并有足够的分辨率,你将有数据映射剧院的每一行,每行是多宽。 参观地点越多,您就可以预测该人所在的高保真度。
另外,如果您对当前的这类研究感兴趣,我强烈build议您免费订阅GPS World杂志。 每个月我都会跟它一起
我不确定你的偏移量有多大,因为你忘了包括单位。 (“每个轴上约有10个”并不多说:P)也就是说,这仍然可能是由于硬件不准确。
加速度计对于诸如确定手机相对于重力的方向,或检测手势(摇动或撞击手机等)
但是,使用加速度计进行航位推算会导致很多复合错误。 加速计需要非常准确,否则这不是一个常见的用例,所以我怀疑硬件制造商是否正在优化它。
Android加速度计是数字的,它使用相同数量的“桶”来采样加速,可以说有256个桶,加速度计能够从-2g到+ 2g进行感测。 这意味着你的输出将被量化为这些“桶”,并且会跳过一些值。
为了校准一个android加速度计,你需要抽取大量的超过1000个点,并find加速度计波动的“模式”。 然后根据输出波动的大小找出数字点的数量,并将其用于过滤。
一旦得到模式和+/-波动,我推荐卡尔曼滤波。
我意识到这是相当古老的,但是所提供的任何答案都没有解决手头的问题。
你所看到的是设备的线性加速度,包括重力的影响。 如果将手机放置在平坦的表面上,传感器将报告由于重力造成的加速度大约为9.80665 m/s2
,因此给出的是您所看到的10。 传感器不准确,但不是不准确! 在这里查看一些有用的链接和有关您可能在之后的传感器的信息。