利用加速度计+陀螺仪计算汽车小型车的位置

时间:2012-06-18 16:28:19

标签: position accelerometer gyroscope inertial-navigation

我想计算一辆小型遥控车的位置(相对于起始位置)。汽车在平坦的表面上移动,例如:房间地板。 现在,我正在使用加速度计和陀螺仪。确切地说,这块板 - > http://www.sparkfun.com/products/9623

作为第一步,我只是在x和y轴上采用加速度计数据(因为汽车在表面上移动)并将数据双重整合以获得位置。我使用的公式是:

vel_new = vel_old + ( acc_old + ( (acc_new - acc_old ) / 2.0 ) ) * SAMPLING_TIME;
pos_new = pos_old + ( vel_old + ( (vel_new - vel_old ) / 2.0 ) ) * SAMPLING_TIME;
vel_old = vel_new;
pos_old = pos_new;
acc_new = measured value from accelerometer

上述公式基于此文档:http://perso-etis.ensea.fr/~pierandr/cours/M1_SIC/AN3397.pdf

然而,这是一个可怕的错误。

在这个论坛上阅读其他类似的问题后,我发现我需要通过陀螺仪以某种方式从上面的加速度值(每次从acc_new)中减去重力分量。 Google Tech Talks视频Sensor Fusion on Android Devices: A Revolution in Motion Processing在时间23:49详细解释了这个想法。

现在我的问题是如何减去重力成分? 我从陀螺仪获得角速度。如何将其转换为加速度,以便我可以从加速度计的输出中减去它?

3 个答案:

答案 0 :(得分:2)

It won't work,这些传感器不够精确,无法计算位置。

您所指的视频中也解释了原因。

你能做的最好的事情就是根据车轮的转速来获得速度。如果您还知道属于速度的航向,则可以将速度积分到位置。远非完美,但它应该给你一个合理的估计位置。

我不知道你怎么能得到汽车的标题,这取决于你的硬件。

答案 1 :(得分:0)

对于那些设备,我担心阿里的回答是完全正确的。但是你为什么不尝试搜索arduino dead reckoning,它将涵盖人们尝试类似电路板的故事?

以下是我认为可能对您有所帮助的搜索后出现的链接:

Converting IMU to INS

即使看起来所有这些都失败了,您可能会遇到变通方法,这会将误差降低到可接受的数量,或者使用其他传感器校准您的算法,使其恢复正常,因为加速度的平方误差以及陀螺仪白噪声会破坏精度。

答案 2 :(得分:0)

您遇到巨大错误的一个原因是该等式似乎是错误的。

示例:要获取更新的vel,请使用.. Velnew=velold+((accelold+accelnew)/2)*sampletime

看起来你在等式中有一个额外的加速项。单独使用它不会纠正所有错误....需要正如你所说的对重力和其他事物的影响是正确的。