【问题标题】:Acceleration to Displacement加速位移
【发布时间】:2016-12-29 10:51:17
【问题描述】:

我正在做一个实验程序。我有一个固定在汽车仪表板上的智能手机,在旅行期间,我从应用程序中读取了惯性传感器的一些值。

准确地说,我读到了每个注册的加速度计数据时间(以固定间隔),以秒为单位。

所以现在我想从垂直加速度传递到垂直位移,为此我应该进行双重积分。

我尝试了欧拉法。从初始条件如下:

v0=0.v0=0这是零时的初始速度。

x0=0.x0=0这是零时间的初始位置。

定义,

deltaT=registrationinterval.deltaT=registrationinterval(在我的情况下为 0.04 秒)

然后对于每次注册,我都会这样做:

vi=vi−1+ayi∗deltaT.vi=vi−1+ayi∗deltaT

xi=xi−1+vi∗deltaT.xi=xi−1+vi∗deltaT

其中i 代表当前,i-1 先例。

但是我得到的图表不是很真实,实际上速度和位移都只是增长,而我必须得到的效果是垂直位移出来的东西类似于加速度图。

鉴于应用此程序,我的错误率也很高,可能图形只是在增长,而我没有看到任何垂直振荡?

我还阅读了卡尔曼滤波器可以提前应用来清理信号,可以是一个解决方案吗?

或者我应该改变积分方法并从龙格库塔切换到欧拉? (不过最后一个,我一点儿也不知道怎么设置)。

或者有人知道可以帮助我的算法吗?

这里有一个注册数据的example,如果有帮助的话:

【问题讨论】:

    标签: algorithm accelerometer numerical-methods numerical-integration numerical-computing


    【解决方案1】:

    欧拉和龙格库塔都是数值积分器。一个可能比另一个更精确,具体取决于您要积分的方程类型,但两者都应该给出相同的定量结果。如果一个给你一个不断增加的速度而另一个没有,那么你就有一个错误。

    我认为这更像是一个物理问题而不是编程问题。

    从数据上看,垂直加速度计数据中似乎包含了重力加速度,在地球表面约为 9.8 m/s^2。当然,你的车是靠道路支撑的,所以它实际上并没有加速。

    您使用的方程式假设没有其他力在起作用,因此它们正确地表明汽车的速度和位置将不断增长(就像您从直升机上掉下汽车一样)。但是还有其他的力量在起作用(路面向上推轮胎),所以你必须找到一种方法来模拟这些力量。

    您可以做的一件事是将前几次测量值平均作为基线(应该接近 9.8 m/s^2),然后从后续读数中减去该值。随着汽车在山坡上上下移动,传感器值会相对于基线发生变化,而这些差异正是您所关心的。

    这是一个很好的初步近似。但是当你上山或下山时,手机相对于重力场不再是水平的,所以部分重力会反映在水平传感器上。为了获得准确的结果,您需要考虑到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多