欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-18 10:12:30
...

使用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
手写VIO-使用Allen方差工具标定IMU

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

绘制Allan方差图

修改 draw_allan.m中文件路径:
手写VIO-使用Allen方差工具标定IMU
运行结果:
手写VIO-使用Allen方差工具标定IMU
根据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
运行SCRIPT_allan_matparallel.m生成results_20191025T141518.mat文件,用时922s。

绘制Allan曲线:

运行SCRIPT_process_results.m生成Allan结果
手写VIO-使用Allen方差工具标定IMU
手写VIO-使用Allen方差工具标定IMU