MATLAB 当从加速度到速度再到位置进行积分时,我得到非常高的 y 值

问题描述 投票:0回答:1

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

将用于获取数据的 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

android matlab accelerometer numerical-integration
1个回答
1
投票

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

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

这是解释此问题的 Google 技术讲座: https://youtu.be/C7JQ7Rpwn2k?t=23m33s

© www.soinside.com 2019 - 2024. All rights reserved.