• Stars
    star
    474
  • Rank 92,640 (Top 2 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created about 3 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

ROS compatible tool to generate Allan Deviation plots

Allan Variance ROS

ROS package which loads a rosbag of IMU data and computes Allan Variance parameters

The purpose of this tool is to read a long sequence of IMU data and compute the Angle Random Walk (ARW), Bias Instability and Gyro Random Walk for the gyroscope as well as Velocity Random Walk (VRW), Bias Instability and Accel Random Walk for the accelerometer.

While there are many open source tools which do the same thing, this package has the following features:

  • Fully ROS compatable. Simply record a rosbag and provide it as input. No conversion required.
  • Written in C++ making use of rosbag::View means the rosbag is processed at maximum speed. No need to play back the bag file.
  • Designed for Kalibr. Will produce an imu.yaml file.

This tool is designed for Ubuntu 20.04. Attempting to use on another distro or version may require some code changes.

How to build

catkin build allan_variance_ros

How to use

  1. Place your IMU on some damped surface and record your IMU data to a rosbag. You must record at least 3 hours of data. The longer the sequence, the more accurate the results.

  2. Recommended Reorganize ROS messages by timestamp:

rosrun allan_variance_ros cookbag.py --input original_rosbag --output cooked_rosbag

  1. Run the Allan Variance computation tool (example config files provided):

rosrun allan_variance_ros allan_variance [path_to_folder_containing_bag] [path_to_config_file]

  1. This will compute the Allan Deviation for the IMU and generate a CSV. The next step is to visualize the plots and get parameters. For this run:

rosrun allan_variance_ros analysis.py --data allan_variance.csv

Press space to go to next figure.

Example Log

3 hour log of Realsense D435i IMU with timestamps already re-arranged.

Acceleration Gyroscope

Example terminal output:

ACCELEROMETER:
X Velocity Random Walk:  0.00333 m/s/sqrt(s)  0.19983 m/s/sqrt(hr)
Y Velocity Random Walk:  0.01079 m/s/sqrt(s)  0.64719 m/s/sqrt(hr)
Z Velocity Random Walk:  0.00481 m/s/sqrt(s)  0.28846 m/s/sqrt(hr)
X Bias Instability:  0.00055 m/s^2  7173.28800 m/hr^2
Y Bias Instability:  0.00153 m/s^2  19869.01200 m/hr^2
Z Bias Instability:  0.00052 m/s^2  6701.58000 m/hr^2
X Accel Random Walk:  0.00008 m/s^2/sqrt(s)
Y Accel Random Walk:  0.00020 m/s^2/sqrt(s)
Z Accel Random Walk:  0.00007 m/s^2/sqrt(s)
GYROSCOPE:
X Angle Random Walk:  0.00787 deg/sqrt(s)  0.47215 deg/sqrt(hr)
Y Angle Random Walk:  0.00987 deg/sqrt(s)  0.59204 deg/sqrt(hr)
Z Angle Random Walk:  0.00839 deg/sqrt(s)  0.50331 deg/sqrt(hr)
X Bias Instability:  0.00049 deg/s  1.76568 deg/hr
Y Bias Instability:  0.00136 deg/s  4.88153 deg/hr
Z Bias Instability:  0.00088 deg/s  3.15431 deg/hr
X Rate Random Walk:  0.00007 deg/s/sqrt(s)
Y Rate Random Walk:  0.00028 deg/s/sqrt(s)
Z Rate Random Walk:  0.00011 deg/s/sqrt(s)

Kalibr

Kalibr is a useful collection of tools for calibrating cameras and IMUs. For IMU calibration it needs the noise parameters of the IMU generated in a yaml file. allan_variance_ros automatically generates this file file as imu.yaml:

#Accelerometer
accelerometer_noise_density: 0.006308226052016165 
accelerometer_random_walk: 0.00011673723527962174 

#Gyroscope
gyroscope_noise_density: 0.00015198973532354657 
gyroscope_random_walk: 2.664506559330434e-06 

rostopic: '/sensors/imu' #Make sure this is correct
update_rate: 400.0 #Make sure this is correct

Allan Variance ROS Evaluation

IMU Noise Simulator

Thanks to @kekeliu-whu who contributed an IMU noise simulator is based on the Kalibr IMU noise model. You can generate a rosbag of simulated IMU noise and run allan_variance_ros to verify the tool is working. As shown in PR #24 accuracy is quite good.

To generate simulated noise

rosrun allan_variance_ros imu_simulator [path_to_output_bag_file] [path_to_simulation_config_file]

A simulation config file is provided in allan_variance_ros/config/simulation/imu_simulator.yaml

To test Allan Variance ROS on simulated rosbag

rosrun allan_variance_ros allan_variance [path_to_folder_containing_bag] [path_to_config_file]

A config file is provided in allan_variance_ros/config/sim.yaml

Additional Example bags

Some additional rosbags of real IMU data for different sensors is available here. Thanks to Patrick Geneva.

Author

Russell Buchanan

References

More Repositories

1

pronto

Pronto - Legged Robot State Estimator - libraries, ROS wrapper and messages
C++
200
star
2

plane_seg

Plane Segmentation Utilites
C++
159
star
3

isam

iSAM is an optimization library for sparse nonlinear problems as encountered in simultaneous localization and mapping (SLAM).
C++
90
star
4

pronto-distro

Pronto is now built in ROS and developed at https://github.com/ori-drs/pronto_core
C++
78
star
5

director

An intuitive user interface for operating field mobile robots
Python
27
star
6

pronto_anymal_example

Example binary running the Pronto state estimator on the ANYmal B robot
C++
24
star
7

recast_ros

C++
14
star
8

integrated-dynamic-motion-planning-framework

14
star
9

quadruped_robcogen

RobCoGen code generator for any quadruped robot from the xacro description
CMake
13
star
10

gaitmesh

C++
12
star
11

director_anymal_b_simple

Python
11
star
12

slam_tutorial

ORIentate tutorial: SLAM and factor graphs
Jupyter Notebook
9
star
13

hesai_description

URDF Model of hesai lidar products
CMake
8
star
14

trajectory_prediction_ros

C++
7
star
15

frontier_description

URDF of the Frontier Handheld Device
CMake
6
star
16

lfmc_gym

Training repository for learning Low-Frequency Motion Control (LFMC) policies using RL
C++
6
star
17

rloc_manuscript_supplementary_code

Supplementary code to the RLOC manuscript.
Python
5
star
18

fovis_ros

ROS node for FOVIS
C++
3
star
19

aicp_mapping

Auto-tuned Iterative Closest Point -- AICP -- Public
C++
3
star
20

vo_estimate

DEPRECIATED. DO NOT USE. LCM node for FOVIS. Uses pods.
C++
2
star
21

gpu_voxels_ros

C++
2
star
22

halo_description

Robot Model definition of the HALO (Handheld Alphasense Lidar Ouster)
CMake
2
star
23

apriltags_archived

C
1
star
24

hierarchical-planning-sequences

Learning Sequences of Approximations for Hierarchical Motion Planning (ICAPS 2020)
C++
1
star
25

director_digiforest

Python
1
star
26

drs-externals

(was called legacy_pods)
CMake
1
star
27

cdt_challenge_2021

CDT Challenge 2021: Autonomous exploration with wheeled robots
Python
1
star
28

surfel_map

C++
1
star
29

centermask_ros

A package for launching centermask and detectron nodes in a dockerised catkin workspace
1
star
30

ImMesh_hesai

C++
1
star
31

sdf_mp_integration

C++
1
star
32

manipulation_playground

A set of manipulation models used in the lab. Static and actuated models for visualisation and simulation
Python
1
star