手写VIO-使用Allen方差工具标定IMU

使用Allen方差工具标定IMU

所有的文件和代码我放在了社区里,水平有限,大家感兴趣可以访问看看
https://github.com/gisnewbird/VIO.git
在IMU采集数据时,会产生两种误差:确定性误差随机性误差,为获得精确的数据,需要对上述两种误差进行标定。

1、确定性误差

确定性误差主要包括bias(偏置)scale(尺度)、**misalignment(坐标轴互相不垂直)**等多种。常使用六面静置法标定加速度计和陀螺仪的确定性误差。

2、随机误差

随机误差主要包括:高斯白噪声bias随机游走(bias的导数)。加速度计和陀螺仪随机误差的标定通常使用Allan方差法,Allan方差法是20世纪60年代由美国国家标准局的David Allan提出的基于时域的分析方法。

3、Allan方差图读取误差系数

Allan方差法可用于5种随机误差的标定:

量化噪声(Quantization Noise):误差系数为Q,Allan方差双对数曲线上斜率为-1的直线延长线与t=10°的交点的纵坐标读数为√3 Q;
角度随机游走(Angle Random Walk):其误差系数N,Allan方差双对数曲线上斜率为-1/2的线的延长线与t=10°交点的纵坐标读数即为N;
零偏不稳定性(Bias Instability):其误差系数B,Allan方差双对数曲线上斜率为0的线的延长线与t=10°交点的纵坐标读数为√((2 ln⁡2)/π) B,一般常取底部平坦区的最小值或取t=101或t=102处的值;
角速率随机游走(Rate Random Walk):其误差系数K,斜率为+1/2的线的延长线与t=10°交点的纵坐标读数为K/√3;
角速率斜坡(Rate Ramp):其误差系数R,斜率为+1的线的延长线与t=10°交点的纵坐标读数为R/√2;
手写VIO-使用Allen方差工具标定IMU_第1张图片
手写VIO-使用Allen方差工具标定IMU_第2张图片

IMU标定Allan方差工具

常用的Allan方差工具,主要有以下两种:
https://github.com/gaowenliang/imu_utils
https://github.com/rpng/kalibr_allan

imu_utils

使用Ubuntu 18.04 + ros-melodic-desktop-full

安装ROS

//初始化catkin工作空间
	mkdir –p ~/catkin_ws/src
	cd ~/catkin_ws/src
	catkin_init_workspace //初始化工作空间
	cd ..
	catkin_make
	source devel/setup.bash //设置ros环境

安装ceres-solver

注意:https://github.com/ceres-solver/ceres-solver.git,编译之前需要安装一些基础库:

sudo apt-get install -y liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-devlibgoogle-glog-dev libgtest-dev

编译code_utils

//在catkin工作空间中:
	cd ~/catkin_ws/src 
	git clone https://github.com/gaowenliang/code_utils.git
	cd ~/catkin_ws 
	catkin_make

在编译之前需要对源码进行修改两种方法:

1.在~/catkin_ws/src/code_utils/CMakeLists.txt中,添加:include_directories("include/code_utils");
2.修改~/catkin_ws/src/code_utils/src/sumpixel_test.cpp文件中的#include "backward.hpp"为#include "code_utils/backward.hpp";

编译imu_utils

cd ~/catkin_ws/srcgit clone https://github.com/gaowenliang/imu_utils.git
cd ~/catkin_ws
catkin_make

生成imu.bag

roscore
source devel/setup.bash
rosrun vio_data_simulation vio_data_simulation_node

默认位置在~/根目录中

写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
source./devel/setup.bash

生成Allan方差

rosbag倍速回放imu.bag信息,并运行launch文件:

rosbag play -r 200 imu.bag
roslaunch imu_utils imu.launch

在imu_utils/data文件夹下,会生成16个txt文件:
手写VIO-使用Allen方差工具标定IMU_第3张图片

绘制Allan方差图

修改 draw_allan.m中文件路径:
手写VIO-使用Allen方差工具标定IMU_第4张图片
运行结果:
手写VIO-使用Allen方差工具标定IMU_第5张图片
根据Allan方差图即可读出相应的误差。

kalibr_allan

使用Matlab2018

编译kalibr_allan

cd ~/catkin_ws/src
	git clone https://github.com/rpng/kalibr_allan.git
	cd ..
	catkin_make

bag文件转换成mat

拷贝上述过程生成的imu.bag拷贝到~/catkin_ws/src/kalibr_allan/data文件夹中,参考:https://github.com/rpng/kalibr_allan ,使用bagconvert将.bag转换成.mat文件:

rosrun bagconvert bagconvert /home/dukeguo/imu_utils/src/kalibr_allan/data/imu.bag imu

在imu.bag文件的位置生成转换的结果imu.mat,许多文件是“/imu0”,记得修改。

生成曲线参数文件

修改~/catkin_ws/src/kalibr_allan/matlab文件夹下的SCRIPT_process_results.m中.mat路径,即可画出allan曲线。
手写VIO-使用Allen方差工具标定IMU_第6张图片
运行SCRIPT_allan_matparallel.m生成results_20191025T141518.mat文件,用时922s。

绘制Allan曲线:

运行SCRIPT_process_results.m生成Allan结果
手写VIO-使用Allen方差工具标定IMU_第7张图片
手写VIO-使用Allen方差工具标定IMU_第8张图片

你可能感兴趣的:(vslam,VIO)