積分就像計算曲線下方的面積。我們只考慮一個方向X.如果您想象一張隨時間變化的加速度圖表,您將有橫座標(水平)和縱座標(垂直)的加速度。
如果您有兩個標量值a1和a2表示時間t1和t2處的加速度,並且想象中間兩者之間存在線性轉換(時間(t1+t2)/2
加速度爲(a1+a2)/2
...),則可以用此曲線繪製形狀是基礎a1和a2以及長度爲t2-t1(也就是高度)的一側(具有矩形角)的直角梯形。
面積(base1+base2)*height/2
= (a1+a2)*(t2-t1)/2
或(a1+a2)/2 * delta_t
其中delta_t是,(T2-T1),傳感器讀數 和之間的時間間隔(A1 + A2)/ 2是最後兩個讀數值的平均值。
這樣做(如果你開始還是你可以假設爲零),你可能會得到近似的速度差從初始速度S0開始
s(n) = (a(n-1)+a(n))/2 * delta_t + s0
以同樣的方式,你可以得到重新整合從起始點X0
x(n) = (s(n-1)+s(n))/2 * delta_t + s0x + x0
如果您從0點開始仍然是 「空間」 x或距離,你可以放心地假設S0 = 0,X0 = 0
s(n) = (a(n-1)+a(n))/2 * delta_t
x(n) = (s(n-1)+s(n))/2 * delta_t
或程序,僅保存最後的值:
old_a=a;
old_s=s;
a=getAccelerationX();
s = (old_a+a) * delta_t/2.0;
x = (old_s+s) * delta_t/2.0;
請考慮,這裏假設固定不動(速度= 0)知(X = 0)開始位置,跟蹤加速度的一個組成部分的能力(無論傳感器如何在空間旋轉),並且一段時間後不可避免地會出現越來越多的錯誤,因爲最小的錯誤會加起來,所以它是理想的位置,可以經過一段時間後用其他方法進行測試。
P.S.如果你在C中的微控制器(Arduino)上執行操作,請注意如何表達公式:如果old_a和a是整數,則/ 2將截斷捨棄小數的分頻結果(壞主意),而/2.0將生成一個浮點數。 (old_a + a)/ 2 * delta_t比(old_a + a)* delta_t/2差。最後一個錯誤較少,但要小心它不會溢出。只是說每個錯誤都會總結出來,所以要小心如何計算它。
您必須收集一段時間內的加速度數據並將其整合兩次以獲得位移,即位移距離初始位置的距離。弗蘭克提到,當然有3個位移必須爲每個軸計算,以便計算3D空間中的合成位移 – 2015-06-05 14:59:51