VIO标定IMU随机误差——Allan方差法
程序员文章站
2022-03-07 12:53:48
...
在IMU采集数据时,会产生两种误差:确定性误差和随机性误差,为获得精确的数据,需要对上述两种误差进行标定。本文针对随机误差使用Allan进行标定。
Allan方差法
加速度计和陀螺仪随机误差的标定通常使用Allan方差法,Allan方差法是20世纪60年代由美国国家标准局的David Allan提出的基于时域的分析方法。
Allan方差法可用于5种随机误差的标定:
有关如何读取误差参数,这篇博客讲解的比较详细:陀螺 Allan 方差分析
标定IMU随机误差
常用的Allan方差工具,主要有以下两种:
https://github.com/gaowenliang/imu_utils
https://github.com/rpng/kalibr_allan
选用标定IMU的工具包参考港科大的imu_utils
- 安装依赖:
sudo apt-get install libdw-dev
- 下载、编译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
- 下载、编译imu_utils
cd ~/catkin_ws/srcgit clone https://github.com/gaowenliang/imu_utils
cd ~/catkin_ws
catkin_make
- 将
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
- 写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
- 生成Allan方差
rosbag倍速回放imu.bag信息,并运行launch文件:
rosbag play -r 200 imu.bag
roslaunch imu_utils imu.launch
在imu_utils/data文件夹下,会生成txt文件:
输出 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
- 绘制Allan方差图
在catkin_ws/src/imu_utils/scripts文件夹中,有很多使用Matlab写的.m文件,由于Ubuntu下安装Matlab比较麻烦,因此将数据和.m文件拷贝到Windows系统下绘制。
修改 draw_allan.m中文件路径:
参考:
https://blog.csdn.net/orange_littlegirl/article/details/98077564
https://blog.csdn.net/YunLaowang/article/details/95608107
上一篇: PHP基础函数汇总
下一篇: php iconv中文乱码怎么办