因為實驗室的事情,需要做一下android手機IMU的標定,那就做一下吧,主要是計算加速度計(accelerometer)和陀螺儀(gyroscope)的bias和noise。
我查了一下,中文相關(guān)的文檔很少。英文的話還是比較多的。如果想詳細了解的話最好還是去看看英文相關(guān)資料,我只能告訴你怎么做。
大部分計算IMU噪聲都是通過Allan方差來計算的,什么是Allan方差,大家可以自己去看看維基百科上的定義。也可以看看這個,一個標定工具,里面有簡單的介紹。
首先計算bias,這個比較簡單,我是通過將傳感器靜置在水平桌面上100s,以50hz的頻率收集100s的傳感器數(shù)據(jù),然后計算平均值來計算的,gyroscope的z軸方向需要減去當(dāng)?shù)氐闹亓铀俣取?br>
因為懶,所以不想自己去算Allan方差,直接找個別人造的輪子吧,python或者matlab版本的都有。
我用的是matlab版本的。
首先你得收集數(shù)據(jù),這個需要你掌握一些基礎(chǔ)的android編程知識,大家自己學(xué)去吧,然后收集好數(shù)據(jù)之后,就可以用allantool來進行計算啦。
我的數(shù)據(jù)格式如下:
acce_x, acce_y, acce_z, gyro_x, gyro_y, gyro_z
之后可以用csvread
來讀取數(shù)據(jù),然后直接
allan(data, tau, 'data', 2)
其中tau = 1
,因為Allan方差tau為1s時對應(yīng)的值為噪聲值。
就能夠得到計算結(jié)果了。
示例結(jié)果如下:
allan: input data statistics:
numpoints: 1162
max: 10.1897
min: 9.6678
mean: 9.9294
median: 9.9311
linear: [-1.3524e-04 9.9310]
std: 0.0815
allan: 5x MAD value for outlier detection: 0.390455
allan: regular data (1162 data points @ 50 Hz)
allan: allowable tau range: 0.02 to 12 sec. (1/rate to total_time/2)
allan: calculating Allan deviation...
1
allan: Elapsed time for calculation: 5.460709e-03 seconds
allan: Minimum ADEV value: 0.0147884 at tau = 1 seconds