VIO標定IMU隨機誤差——Allan方差法

在IMU採集數據時,會產生兩種誤差:確定性誤差和隨機性誤差,爲獲得精確的數據,需要對上述兩種誤差進行標定。本文針對隨機誤差使用Allan進行標定。

VIO標定IMU隨機誤差

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

  1. 安裝依賴:
sudo apt-get install libdw-dev
  1. 下載、編譯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
  1. 下載、編譯imu_utils
cd ~/catkin_ws/srcgit clone https://github.com/gaowenliang/imu_utils
cd ~/catkin_ws
catkin_make
  1. 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
  1. 寫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
  1. 生成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
  1. 繪製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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章