MATLAB从加速度到速度到位置的积分时,我的y值非常高

时间:2016-04-13 16:44:59

标签: android matlab integration accelerometer

我从加速度计获取原始加速度数据,并尝试对其进行双重积分以获得位置。

用于获取数据的Android手机在平面上设置3秒钟以减少漂移。我在静止期间采取加速度的平均值将开始时归零。这很好,但是当我们整合到速度和位置时(使用cumtrapz),我们得到了不切实际的高y值(速度的米/秒和位置的米。)

原始数据正以一定的速度挥动手机。

有没有人知道为什么这个职位获得如此高的价值? 下面的图表显示了我描述的内容以及我的代码。

编辑:即使手机没有旋转,这些值也是不切实际的,并不表示手机的移动方式。在附图中,手机在平面上以盒子的形状移动,不涉及旋转。

 %VarName2 = accelerometer values in X direction
    %VarName3 = accelerometer values in Y direction
    %VarName4 = accelerometer values in Z direction
    %elapsedArray = time values for each sample of accelerometer data

    ddx = VarName2 - mean(VarName2(1:limit));
    ddx = ddx(1:length(ddx)-200);
    elapsedArray = elapsedArray(1:length(elapsedArray)-200);
    ddy = VarName3 - mean(VarName3(1:limit));
    ddy = ddy(1:length(ddy)-200);
    ddz = VarName4 - mean(VarName4(1:limit));
    ddz = ddz(1:length(ddz)-200);

    velX = cumtrapz(ddx .* elapsedArray);
    velY = cumtrapz(ddy .* elapsedArray);
    velZ = cumtrapz(ddz .* elapsedArray);

    dx = velX - mean(velX(1:limit));
    dy = velY - mean(velY(1:limit));
    dz = velZ - mean(velZ(1:limit));

    posX = cumtrapz(dx .* elapsedArray);
    posY = cumtrapz(dy .* elapsedArray);
    posZ = cumtrapz(dz .* elapsedArray);

    x = posX - mean(posX(1:limit));
    y = posY - mean(posY(1:limit));
    z = posZ - mean(posZ(1:limit));

    figure;
    plot(ddx);
    title('Acceleration in X')
    xlabel('Time (sec)')
    ylabel('Acc (meters squared');

    figure;
    plot(dx);
    title('Velocity in X')
    xlabel('Time (sec)')
    ylabel('Velocity (meters)');

    figure;
    plot(x);
    title('Position X')
    xlabel('Time (sec)')
    ylabel('Position (meters)');

    figure;
    plot(y);
    title('Position Y')
    xlabel('Time (sec)')
    ylabel('Position (meters)');

    figure;
    plot(z);
    title('Position Z')
    xlabel('Time (sec)')
    ylabel('Position (meters)');

X方向的加速

Acceleration in X direction

X方向的速度和位置

Velocity and Position in X direction

Acceleration of Box test in X direction

Velocity of Box test in X direction

Position of Box test in X direction

1 个答案:

答案 0 :(得分:1)

您所看到的是时间漂移的结果。让我们假设您正在测量的加速度计读数在每个时间点都有一个非常小的误差dErr。将这些值集成以获得速度后,每个时间点的误差将乘以系数t。第二次积分获得位置将导致原始误差乘以系数t ^ 2。因此,每个时间点的误差将在dErr(t)* t ^ 2处传播。

为了获得对位置的良好估计,您可以尝试合并有关位置的先验信息,但可能必须使用加速度计和陀螺仪数据的组合。您可能还需要研究卡尔曼滤波器。

以下是Google Tech Talk解释此问题: https://youtu.be/C7JQ7Rpwn2k?t=23m33s