加速流离失所

时间:2016-12-29 10:51:18

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

我正在做一个实验计划。我在汽车仪表板上安装了一个带有支架的智能手机,在行程中我从一个应用程序中读取了惯性传感器的一些值。

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

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

我尝试过Euler方法。从最初的条件开始:

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

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

定义,

deltaT=registrationinterval.deltaT=registrationinterval(在我的情况下是0,04s)

然后对于每次注册,我做:

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

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

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

但是我获得的图表并不是很逼真,实际上速度和位移都只会增长,而我必须得到的效果是垂直位移与加速度图形相似。< / p>

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

我也看过卡尔曼滤波器可以提前应用来清理信号,可能是一个解决方案吗?

或者我应该改变整合方法并从Runge Kutta切换到Euler? (最后一点,我对如何设置它没有任何想法)。

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

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

1 个答案:

答案 0 :(得分:0)

Euler和Runge Kutta都是数值积分器。一个可能比另一个更精确,这取决于您整合的方程式类型,但两者都应给出相同的定量结果。如果一个人给你一个不断增加的速度而另一个没有,那么你就有一个错误。

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

根据数据,看起来垂直加速度计数据包括由于重力引起的加速度,在地球表面约为9.8 m / s ^ 2。当然,你的车是由道路支撑的,所以它实际上并没有加速下来。

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

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

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