zoukankan      html  css  js  c++  java
  • 利用加速度求解位置的算法——三轴传感器对比

    早晨看到了一个加速度求法,原文章地址在这里:

    利用加速度求解位置的算法——三轴传感器

    里面主要讲积分后的累计误差中的采样误差,

    积分的值可以约等于区域面积之和。
    如果采样时间趋近于0,那么结论将是正确的。但在实际中,将会产生如下错误,在处理的过程中,这个误差将会一直累积。
    Ashampoo_Snap_2015.03.27_23h50m46s_004_.png           
    这些错误称为采样损失。为了减少这些错误,我们再做进一步的假设。结果区域能够看成由两块小的区域的组合:
    Ashampoo_Snap_2015.03.27_23h57m54s_005_.png
    区域1是前一次采样的值(方形),区域2是一个三角形,是前一次采样和当前采样之差的一半。
     
    最后得到一个近似公式:
    Ashampoo_Snap_2015.03.28_00h06m26s_006_.png
    注意:这里的信号应该采用当前周期信号,即A(n) = S(n) + abs(S(n)-S(n-1))/2 如果使用A(n) = S(n-1) + abs(S(n)-S(n-1))/2,会出现明显的信号延时现象。
    当T=1时,就是一种移动均值的滤波处理了。
    我们的采样周期只要足够小,我们的求解就越贴近我们的采样样本,反过来采样的样本间隔越大,我们的误差越大,相对应的处理出来的信号延时也会越明显。
    当T为0.1时,
     

    基本看不出区别,但是随着时间的推移,数据出现的大幅度的漂移。

    而在T最小,采样效果越好,数据越靠近真实情况。

    这样的话,当采样周期足够小的时候,采样的数据的采样误差就会被弥补啦。

    clc;
    clear;
    load('walk3.1.txt');
    
    y = walk3_1(:,6)/8192;
    %y = signal;
    velocity =[];
    for i=1:1194
    	velocity =[velocity;(sum(y(1:i)))];
    end    
    distance = [];
    for i=1:1194
    	distance =[distance;(sum(velocity(1:i)))];
    end    
    figure;
    hold on
    plot(y)
    y1 = [];
    y1(1,:) = y(1,:);
    for i = 2:1194
        y1 = [y1;(y(i,:)+abs(y(i,:)-y(i-1,:))*0.1/2)];
    end
    plot(y1)
    
    y2 = [];
    y2(1,:) = y(1,:);
    for i = 2:1194
        y2 = [y2;(y(i,:)+(y(i,:)-y(i-1,:))*0.5/2)];
    end
    %plot(y2)
    y3 = [];
    y3(1,:) = y(1,:);
    for i = 2:1194
        y3 = [y3;(y(i,:)+abs(y(i,:)-y(i-1,:))*1/2)];
    end
    %plot(y3)
    
    
    
    velocity1=[];
    for i=1:1194
    	velocity1 =[velocity1;(sum(y(1:i)))];
    end    
    distance1 = [];
    for i=1:1194
    	distance1 =[distance1;(sum(velocity1(1:i)))];
    end    
    
    
    velocity2=[];
    for i=1:1194
    	velocity2 =[velocity2;(sum(y1(1:i)))];
    end    
    distance2 = [];
    for i=1:1194
    	distance2 =[distance2;(sum(velocity2(1:i)))];
    end 
    
    velocity3=[];
    for i=1:1194
    	velocity3 =[velocity3;(sum(y3(1:i)))];
    end    
    distance3 = [];
    for i=1:1194
    	distance3 =[distance3;(sum(velocity3(1:i)))];
    end    
    figure;
    subplot(2,1,1)
    hold on
    plot(velocity1,'p')
    plot(velocity2)
    plot(velocity3,'--')
    subplot(2,1,2)
    hold on
    plot(distance1,'p')
    plot(distance2)
    plot(distance3,'--')

     这里对比的数据采集自MPU6050。

    参考资料:

    【翻译】利用加速度求解位置的算法——三轴传感器

  • 相关阅读:
    -lpopt is not found while cross compiling for aarch64
    设置进程的cpu亲和性
    在ARM64位开发板上兼容ARM32位的可执行程序
    ARM开发板上查看动态库或者可执行程序的依赖关系
    交叉编译tmux
    使用PSCI机制的SMP启动分析
    将qemu使用的设备树dump出来
    故障review的一些总结
    理解Compressed Sparse Column Format (CSC)
    统计分析工程的依赖项
  • 原文地址:https://www.cnblogs.com/TIANHUAHUA/p/8022590.html
Copyright © 2011-2022 走看看