使用加速度计计算距离

Posted

技术标签:

【中文标题】使用加速度计计算距离【英文标题】:calculating distances using accelerometer 【发布时间】:2013-07-08 12:12:10 【问题描述】:

在阅读了许多论坛旁边关于如何根据加速度数据测量距离的研究和论文之后 我找到了双重积分方法,但与此方法相关的误差很大,并且随着时间的推移而增加。 此外,我发现一些建议卡尔曼滤波器的人我阅读了一些关于它的参考资料,但我不清楚如何使用它。 还有一些人在谈论聚变传感器……但在阅读了它们之后,我没有得到任何新的想法。 所以我仍然很困惑,我没有找到正确的答案...... 抱歉介绍这么长。


问题

让我们考虑一下,我手里拿着 9 轴传感器,并且我的手向某个方向移动,我如何才能找到我的手在空间中的新位置?如何获得从初始点到新点的运动矢量我的意思是如何知道三个轴上经过的距离?

如果没有直接的答案......一些建议或参考会很好,或者一些算法可以给出准确的答案,我可以自己学习和使用它。 非常感谢

【问题讨论】:

您基本上回答了您自己的问题:“我找到了双重积分方法,但是与此方法相关的错误很大,并且随着时间的推移而增加。”错误增长得如此之快,以至于该方法毫无用处。 Indoor Positioning System based on Gyroscope and Accelerometer的可能重复 它仍然是一个活跃的研究领域,所以我想说这真的很难。 【参考方案1】:

对您的问题的简短回答是您做不到。

双重积分方法确实是仅使用加速度计即可获取所需信息的唯一方法。你发现了这个方法的问题。误差会随着时间的推移而增加,并且通常无法提供许多人正在寻找的准确度。

卡尔曼滤波通常需要 2 台设备,基本上可以充分利用这两种设备并过滤掉不好的设备。请参见下面的示例。

卡尔曼滤波是我为高级设计尝试深入研究的一个非常困难的主题,但在我有限的测试中从未发现任何有意义的结果。开始理解这个主题的好地方是youtube video series 。

这是与斯坦福大学一起赢得 DARPA 挑战的人,他以易于理解的方式解释了该主题。整个课程是一个 6 单元的视频系列,内容是编程机器人在未知环境中移动和了解其位置。如果您有时间和兴趣,值得一看。

听起来您正在尝试做一些类似于我为高级设计所做的事情,以提供非常具体的相对位置信息。

另一个伟大的卡尔曼滤波read this(如果此链接不起作用谷歌卡尔曼滤波器平衡机器人并单击 TKJ 博客链接)。基本上,这个人使用加速度计和陀螺仪来跟踪现实世界中的方向。

还有其他要研究的东西 wiki 实时运动学。这在拖拉机上进行并结合以提供真正准确的位置信息。 John Deere 出售一个系统,但价格为 20,000 美元。这是穷人的版本,使用GPS and beagleboard

【讨论】:

略长一点的答案不是取决于您想要整合多长时间吗?如果你只是想在很短的时间内估计位置,那不可能吗?【参考方案2】:

通过 9 轴传感器,我假设这意味着:

3 轴陀螺仪(测量旋转速率) 3 轴加速度计(测量加速度) 3 轴磁力计(测量航向)

如果不使用另一个使用外部参考(如 GPS)的传感器,则无法从这种类型的 9 轴传感器获得实际的位置估计。

理论上,如果您知道物体在空间中的加速度及其初始位置和速度,您将能够通过将有关其加速度和速度的信息传播回初始位置(即积分加速两次)。在实践中不可能的原因是加速度计有噪音。该噪声将具有非零均值,因此在对加速度信号进行积分时,非零均值噪声会不断添加并累积在结果速度信号中。这被视为传感器漂移。速度估计开始时相当正确,但由于这种累积的噪声而迅速漂移。再次积分以获得该位置只会通过重复该过程而使情况恶化。

通过使用 GPS 等外部参考,卡尔曼滤波器可用于将缓慢更新的 GPS 信号和快速更新的加速度信号组合在一起,以产生可靠的位置估计。 GPS 具有将通过对加速度信号进行积分而累积的漂移归零的作用。

我建议看看 Khamey 建议的 Udacity Youtube 视频。在学习卡尔曼滤波器时,有助于清楚地了解目标是什么以及卡尔曼滤波器在做什么。然后算法的数学和实际步骤将更容易理解。学习卡尔曼滤波器时另一件有用的事情是一次对一个状态变量而不是整个状态向量进行学习。这只是帮助您将注意力集中在卡尔曼滤波器的实际作用上,这样您就不会被矩阵代数所困扰。

【讨论】:

【参考方案3】:

不考虑旋转:

让我们考虑在时间t=t0,您在位置[ x0 , y0 , z0 ],速度矢量为[ vx0 , vy0 , vz0 ]

t=t1,您读取[ ax1 , ay1 , az1 ] 的加速度矢量(t0t1 的平均加速度)。

那么,t=t1 处的速度向量将是:

[ vx1 , vy1 , vz1 ] = [ vx0 + ax1 * (t1 - t0) , vy0 + ay1 * (t1 - t0) , vz0 + az1 * (t1 - t0) ] 

t0t1 之间的平均速度将为

[ vx01 , vy01 , vz01 ] = [ (vx0 + vx1) / 2 , (vy0 + vy1) / 2 , (vz0 + vz1) / 2 ]

t=t1 的位置将是:

[ x1 , y1 , z1 ] = [x0 + vx01 * (t1 - t0), y0 + vy01 * (t1 - t0), y0 + vy01 * (t1 - t0) ]

如您所见,错误会通过t^2 传播,这就是惯性系统需要通过 GPS 等外部参考进行补偿的原因。

【讨论】:

【参考方案4】:

如果有底图,并且您确信传感器沿已知路径(例如道路)行驶,则可以使用底图来校正噪声读数。参见 Jun Han、Emmanuel Owusu、Thanh-Le Nguyen、Adrian Perrig 和 Joy Zhang “ACComplice:使用智能手机上的加速度计进行位置推断”在第四届通信系统和网络国际会议 (COMSNETS 2012) 论文集中,印度班加罗尔,1 月2012 年 3 月 7 日。

http://www.netsec.ethz.ch/publications/papers/han_ACComplice_comsnets12.pdf

【讨论】:

以上是关于使用加速度计计算距离的主要内容,如果未能解决你的问题,请参考以下文章

如何使用陀螺仪和加速度计找到行进的距离?

如何根据手机加速度计算距离

计算使用加速计步

Python GPU 加速数据科学 | 计算距离矩阵在用 cuPy 时快了约 100 倍

Python GPU 加速数据科学 | 计算距离矩阵在用 cuPy 时快了约 100 倍

为啥 np.hypot 和 np.subtract.outer 与香草广播相比非常快?使用 Numba 并行加速 numpy 进行距离矩阵计算