在IMU採集數據時,會產生兩種誤差:確定性誤差和隨機性誤差,爲獲得精確的數據,需要對上述兩種誤差進行標定。本文針對隨機誤差使用Allan進行標定。
Allan方差法
加速度計和陀螺儀隨機誤差的標定通常使用Allan方差法,Allan方差法是20世紀60年代由美國國家標準局的David Allan提出的基於時域的分析方法。
Allan方差法可用於5種隨機誤差的標定:
有關如何讀取誤差參數,這篇博客講解的比較詳細:陀螺 Allan 方差分析
標定IMU隨機誤差
常用的Allan方差工具,主要有以下兩種:
https://github.com/gaowenliang/imu_utils
https://github.com/rpng/kalibr_allan
選用標定IMU的工具包參考港科大的imu_utils
- 安裝依賴:
sudo apt-get install libdw-dev
- 下載、編譯code_utils
imu_utils的使用需要依賴code_utils,因此需要提前安裝。
cd ~/catkin_ws/src
git clone https://github.com/gaowenliang/code_utils
cd ~/catkin_ws
catkin_make
在編譯之前需要對源碼進行修改:
方法一:
在~/catkin_ws/src/code_utils/CMakeLists.txt中,添加:include_directories("include/code_utils")
方法二:
修改~/catkin_ws/src/code_utils/src/sumpixel_test.cpp文件中的#include "backward.hpp"爲#include "code_utils/backward.hpp"
避免出現如下錯誤:
catkin_ws/src/code_utils/src/sumpixel_test.cpp:2:24: fatal error: backward.hpp: No such file or directory
- 下載、編譯imu_utils
cd ~/catkin_ws/srcgit clone https://github.com/gaowenliang/imu_utils
cd ~/catkin_ws
catkin_make
- 將vio_data_simulation-ros_version(提取碼: 7nua)文件拷貝到
catkin_ws/src
文件夾下
修改vio_data_simulation-ros_version/src/gener_alldata.cpp中imu.bag的存儲路徑爲:
bag.open("./imu.bag", rosbag::bagmode::Write);
編譯源碼:
cd ~/catkin_ws
catkin_make
將ros空間的setup.bash
路徑加入到~/.bashrc
文檔裏,然後更新環境變量。
5. 生成包imu.bag
roscore
rosrun vio_data_simulation vio_data_simulation_node
若使用實際的imu數據,則讓IMU靜止不動兩個小時,錄製IMU的bag:
rosbag record /imu/data_raw -o imu120.bag
- 寫launch文件
進入 catkin_ws/src/imu_utils/launch文件夾,新建imu.launch文件:
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/imu"/>
<param name="imu_name" type="string" value= "imutest"/>
<param name="data_save_path" type="string" value= "$(find
imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "120"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
重新編譯:
cd ~/catkin_ws
catkin_make
- 生成Allan方差
rosbag倍速回放imu.bag信息,並運行launch文件:
rosbag play -r 200 imu.bag
roslaunch imu_utils imu.launch
在imu_utils/data文件夾下,會生成txt文件:
輸出 imutest_imu_param.yaml
,標定結果:
%YAML:1.0
---
type: IMU
name: imutest
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 2.1242468924808286e-01
gyr_w: 8.9158957577237447e-04
x-axis:
gyr_n: 2.1199186085293037e-01
gyr_w: 9.6557877803019737e-04
y-axis:
gyr_n: 2.1266100348586117e-01
gyr_w: 7.1610419763893990e-04
z-axis:
gyr_n: 2.1262120340545693e-01
gyr_w: 9.9308575164798614e-04
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 2.6858987313912458e-01
acc_w: 3.4777371017775806e-03
x-axis:
acc_n: 2.7331792677621103e-01
acc_w: 3.4791089405732775e-03
y-axis:
acc_n: 2.6836114647319026e-01
acc_w: 3.1182931634086398e-03
z-axis:
acc_n: 2.6409054616797251e-01
acc_w: 3.8358092013508235e-03
- 繪製Allan方差圖
在catkin_ws/src/imu_utils/scripts文件夾中,有很多使用Matlab寫的.m文件,由於Ubuntu下安裝Matlab比較麻煩,因此將數據和.m文件拷貝到Windows系統下繪製。
修改 draw_allan.m中文件路徑:
參考:
https://blog.csdn.net/orange_littlegirl/article/details/98077564
https://blog.csdn.net/YunLaowang/article/details/95608107