Home

Awesome

imu_utils

A ROS package tool to analyze the IMU performance. C++ version of Allan Variance Tool. The figures are drawn by Matlab, in scripts.

Actually, just analyze the Allan Variance for the IMU data. Collect the data while the IMU is Stationary, with a two hours duration.

refrence

Refrence technical report: Allan Variance: Noise Analysis for Gyroscopes, vectornav gyroscope and An introduction to inertial navigation.

Woodman, O.J., 2007. An introduction to inertial navigation (No. UCAM-CL-TR-696). University of Cambridge, Computer Laboratory.

Refrence Matlab code: GyroAllan

IMU Noise Values

ParameterYAML elementSymbolUnits
Gyroscope "white noise"gyr_n<img src="https://latex.codecogs.com/svg.latex?{%5Csigma_g}"><img src="https://latex.codecogs.com/svg.latex?{%5Cfrac%7Brad%7D%7Bs%7D%5Cfrac%7B1%7D%7B%5Csqrt%7BHz%7D%7D}">
Accelerometer "white noise"acc_n<img src="https://latex.codecogs.com/svg.latex?{%5Csigma_a}"><img src="https://latex.codecogs.com/svg.latex?{%5Cfrac%7Bm%7D%7Bs^2%7D%5Cfrac%7B1%7D%7B%5Csqrt%7BHz%7D%7D}">
Gyroscope "bias Instability"gyr_w<img src="https://latex.codecogs.com/svg.latex?{%5Csigma_b_g}"><img src="http://latex.codecogs.com/svg.latex?\frac{rad}{s}&space;\sqrt{Hz}" title="\frac{rad}{s} \sqrt{Hz}" />
Accelerometer "bias Instability"acc_w<img src="https://latex.codecogs.com/svg.latex?{%5Csigma_b_a}"><img src="http://latex.codecogs.com/svg.latex?\frac{m}{s^2}&space;\sqrt{Hz}" title="\frac{m}{s^2} \sqrt{Hz}" />

(according to technical report: Allan Variance: Noise Analysis for Gyroscopes)

sample test

<img src="figure/gyr.jpg"> <img src="figure/acc.jpg">

How to build and run?

to build

sudo apt-get install libdw-dev

to run

 rosbag play -r 200 imu_A3.bag
roslaunch imu_utils A3.launch

Be careful of your roslaunch file:

<launch>
    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <param name="imu_topic" type="string" value= "/djiros/imu"/>
        <param name="imu_name" type="string" value= "A3"/>
        <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>

sample output:

type: IMU
name: A3
Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 1.0351286977809465e-04
      gyr_w: 2.9438676109223402e-05
   x-axis:
      gyr_n: 1.0312669892959053e-04
      gyr_w: 3.3765827874234673e-05
   y-axis:
      gyr_n: 1.0787155789128671e-04
      gyr_w: 3.1970693666470835e-05
   z-axis:
      gyr_n: 9.9540352513406743e-05
      gyr_w: 2.2579506786964707e-05
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 1.3985049290745563e-03
      acc_w: 6.3249251509920116e-04
   x-axis:
      acc_n: 1.1687799474421937e-03
      acc_w: 5.3044554054317266e-04
   y-axis:
      acc_n: 1.2050535351630543e-03
      acc_w: 6.0281218607825414e-04
   z-axis:
      acc_n: 1.8216813046184213e-03
      acc_w: 7.6421981867617645e-04

dataset

DJI A3: 400Hz

Download link: 百度网盘

DJI A3: 400Hz

Download link: 百度网盘

ADIS16448: 200Hz

Download link:百度网盘

3dM-GX4: 500Hz

Download link:百度网盘

xsens-MTI-100: 100Hz

Download link:百度网盘