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

VIO标定IMU随机误差——Allan方差法

程序员文章站 2022-03-07 12:53:48
...

在IMU采集数据时,会产生两种误差:确定性误差和随机性误差,为获得精确的数据,需要对上述两种误差进行标定。本文针对随机误差使用Allan进行标定。

VIO标定IMU随机误差

Allan方差法

加速度计和陀螺仪随机误差的标定通常使用Allan方差法,Allan方差法是20世纪60年代由美国国家标准局的David Allan提出的基于时域的分析方法。
Allan方差法可用于5种随机误差的标定:
VIO标定IMU随机误差——Allan方差法
有关如何读取误差参数,这篇博客讲解的比较详细:陀螺 Allan 方差分析

标定IMU随机误差

常用的Allan方差工具,主要有以下两种:

https://github.com/gaowenliang/imu_utils
https://github.com/rpng/kalibr_allan

选用标定IMU的工具包参考港科大的imu_utils

  1. 安装依赖:
sudo apt-get install libdw-dev
  1. 下载、编译code_utils
    imu_utils的使用需要依赖code_utils,因此需要提前安装。
cd ~/catkin_ws/src 
git clone https://github.com/gaowenliang/code_utils 
cd ~/catkin_ws 
catkin_make

在编译之前需要对源码进行修改:

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

避免出现如下错误:

catkin_ws/src/code_utils/src/sumpixel_test.cpp:2:24: fatal error: backward.hpp: No such file or directory
  1. 下载、编译imu_utils
cd ~/catkin_ws/srcgit clone https://github.com/gaowenliang/imu_utils
cd ~/catkin_ws
catkin_make
  1. vio_data_simulation-ros_version文件拷贝到catkin_ws/src文件夹下
    修改vio_data_simulation-ros_version/src/gener_alldata.cpp中imu.bag的存储路径为:
bag.open("./imu.bag", rosbag::bagmode::Write);

编译源码:

cd ~/catkin_ws
catkin_make

将ros空间的setup.bash路径加入到~/.bashrc文档里,然后更新环境变量。
5. 生成包imu.bag

roscore
rosrun vio_data_simulation vio_data_simulation_node

若使用实际的imu数据,则让IMU静止不动两个小时,录制IMU的bag:

rosbag record /imu/data_raw -o imu120.bag
  1. 写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
  1. 生成Allan方差
    rosbag倍速回放imu.bag信息,并运行launch文件:
rosbag play -r 200 imu.bag
roslaunch imu_utils imu.launch

VIO标定IMU随机误差——Allan方差法
在imu_utils/data文件夹下,会生成txt文件:
VIO标定IMU随机误差——Allan方差法
输出 imutest_imu_param.yaml,标定结果:

%YAML:1.0
---
type: IMU
name: imutest
Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 2.1242468924808286e-01
      gyr_w: 8.9158957577237447e-04
   x-axis:
      gyr_n: 2.1199186085293037e-01
      gyr_w: 9.6557877803019737e-04
   y-axis:
      gyr_n: 2.1266100348586117e-01
      gyr_w: 7.1610419763893990e-04
   z-axis:
      gyr_n: 2.1262120340545693e-01
      gyr_w: 9.9308575164798614e-04
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 2.6858987313912458e-01
      acc_w: 3.4777371017775806e-03
   x-axis:
      acc_n: 2.7331792677621103e-01
      acc_w: 3.4791089405732775e-03
   y-axis:
      acc_n: 2.6836114647319026e-01
      acc_w: 3.1182931634086398e-03
   z-axis:
      acc_n: 2.6409054616797251e-01
      acc_w: 3.8358092013508235e-03
  1. 绘制Allan方差图
    在catkin_ws/src/imu_utils/scripts文件夹中,有很多使用Matlab写的.m文件,由于Ubuntu下安装Matlab比较麻烦,因此将数据和.m文件拷贝到Windows系统下绘制。
    修改 draw_allan.m中文件路径:
    VIO标定IMU随机误差——Allan方差法
    VIO标定IMU随机误差——Allan方差法
    参考:
    https://blog.csdn.net/orange_littlegirl/article/details/98077564
    https://blog.csdn.net/YunLaowang/article/details/95608107
相关标签: 笔记 VIO matlab