0

我正在一个项目中使用 MPU6050 和我设计的芯片来检测物体运动。项目分为2个阶段:

  • 第一阶段:可视化面向对象(完成)
  • 第二阶段:使用陀螺仪和加速器在 3D 坐标中可视化对象位置。我按照以下网站的说明进行操作:http ://www.x-io.co.uk/oscillator-motion-tracking-with-x-imu/ 。位置必须通过“双重整合”由此得出;加速度计首先被积分以产生速度,然后再次产生位置。

    void COpenGLControl::Update()
    {
      double mX;
      double mY;
      double mZ;
      mX = mXCordinate*9.81;  // mXCordinate-> X accelerator
      mY = mYCordinate*9.81;  // mYCordinate-> Y accelerator
      mZ = mZCordinate*9.81;  // mZCordinate-> Z accelerator
    
      /* linear velocity*/
      curVelX = preVelX  + mX *sampleRate;
      curVelY = preVelY  + mY*sampleRate;
      curVelZ = preVelZ  + mZ*sampleRate;
      /* linear location*/
      curLoX = preLoX + curVelX*sampleRate;
      curLoY = preLoY + curVelY*sampleRate;
      curLoZ = preLoZ + curVelZ*sampleRate;
    
      preVelX = curVelX;
      preVelY = curVelY;
      preVelZ = curVelZ;
    
      preLoX = curLoX;
      preLoY = curLoY;
      preLoZ = curLoZ;
     }
    

然后使用 curLoX、curLoY、curLoZ 用 openGL 可视化 3D 对象:

glPushMatrix();
glTranslatef(curLoY,curLoX,curLoZ); //-> object moving visualization
glBegin(GL_QUADS);  
........       
glPopMatrix();

我的目的是当向上、向下、向左、向右移动对象时,3D 对象将具有相同的运动。但是只有当我在http://www.x-io.co.uk/oscillatory-motion-tracking-with-x-imu/中旋转我的设备而不是线性运动时,物体才会移动。我该如何解决这个问题? 在此处输入图像描述

4

1 回答 1

1

加速度计不会给你物体的位置,但它的名字就是加速度,即速度的变化率。

您必须随着时间的推移对加速度计的值进行双重积分,以确定物体的位置。但有一个问题:从技术上讲,这样做只对自由落体的物体有效。在地球上(以及宇宙中所有其他巨大的物体)有重力。重力的机械效应是加速度。所以在地球下面,你可以测量到朝向地球重心的大约 9.81m/s² 的恒定加速度(你已经有一个 9.81 的常数,但你完全误解了它的含义)。

没有物理上正确的方法来弥补这一点加速度就是加速度,事实上我们都被它在时空中移动(这就是为什么地球上的时间比外太空慢一点)如果你绘制 IMU 在 4D 时空中的运动,那将是实际的适当的运动。

然而,您可能想看到的是局部加速参考系中的相对运动。如果假设加速度恒定,则可以取该加速度矢量并将其从测量值中减去。当然,随着 IMU 的每一次旋转,加速度矢量都会旋转,因此您必须在减去之前对 IMU 旋转进行积分并将其应用于加速度偏移矢量。假设相对运动很短并且具有相当高的频率,您可以通过对加速度计信号进行低通滤波来确定重力偏移矢量来摆脱困境。

于 2016-01-12T08:57:19.807 回答