手写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 ln2)/π) B,一般常取底部平坦区的最小值或取t=101或t=102处的值;
角速率随机游走(Rate Random Walk):其误差系数K,斜率为+1/2的线的延长线与t=10°交点的纵坐标读数为K/√3;
角速率斜坡(Rate Ramp):其误差系数R,斜率为+1的线的延长线与t=10°交点的纵坐标读数为R/√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文件:
绘制Allan方差图
修改 draw_allan.m中文件路径:
运行结果:
根据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曲线。
运行SCRIPT_allan_matparallel.m
生成results_20191025T141518.mat文件,用时922s。
绘制Allan曲线:
运行SCRIPT_process_results.m生成Allan结果
上一篇: zigbee CC2530读取陀螺仪、加速度传感器MPU6050
下一篇: 伪静态说的个什么东东