文章目录
- 一、问题描述
- 二、imu_utils 工具的使用
- 1. 安装
- 1.1 下载与编译
- 1.2 编译bug解决
 
- 2. 标定 IMU
- 2.1 imu bag包录制
- 2.1.1 imu 数据格式
- 2.1.2 imu 数据录制
 
- 2.2 imu 标定
 
 
- 三、Kalibr 工具的使用
- 1. 安装
- 1.1 下载与编译
- 1.2 问题解决
 
 
一、问题描述
vins系列安装完成后,将自己采集的图像和imu数据进行测试时,发现很难初始化化,即使初始化成功机器位姿总是跑飞(尤其是旋转时),内外参必须标定!!过来整理标定的填坑过程。。。
二、imu_utils 工具的使用
1. 安装
1.1 下载与编译
mkdir -p imu_calib_WS/src
cd imu_calib_WS/src# 下载 code_utils 、imu_utils
# 注意:全局安装ceres库,code_imu依赖ceres;
git clone https://github.com/gaowenliang/code_utils.git
git clone https://github.com/gaowenliang/imu_utils.gitcd ..
catkin_make
1.2 编译bug解决
- error: “code_utilsConfig.cmake”
 编译过程中,遇到如下图中的Could not find the required component 'code_utils'的错误。
  原因是: 原因是:imu_utils功能包依赖code_utils功能包,而在编译imu_utils功能包时code_utils功能包尚未编译完成。解决方法:需指定依赖功能包,具体操作步骤如下:
// 1.在imu_utils 功能包的 CMakeLists.txt 添加
catkin_package(CATKIN_DEPENDS code_utils)// 2.在imu_utils 功能包的 package.xml 添加
<depend>code_utils</depend>
- error: “fatal error: backward.hpp”
 编译过程中,遇到如下图中的fatal error: backward.hpp的错误:
  
 解决方法:修改code_utils/src/sumpixel_test.cpp文件:
#include "backward.hpp"
改成
#include "code_utils/backward.hpp"
- error: “libdw.h”
 编译过程中,遇到如下图中的fatal error: libv4l2.h的错误,直接sudo apt-get install libdw-dev解决。
  
2. 标定 IMU
2.1 imu bag包录制
2.1.1 imu 数据格式
不同imu硬件驱动包驱动方式不同,此处只整理imu产生数据后的后期处理,下面为一帧imu数据(话题名为/imu0 ,话题消息格式采用ros官方的 sensor_msgs/Imu)。
rostopic echo -n 1 /imu0 header: seq: 5970stamp: secs: 1403637140nsecs: 448319000frame_id: "imu4"orientation: x: 0.0y: 0.0z: 0.0w: 1.0orientation_covariance: [99999.9, 0.0, 0.0, 0.0, 99999.9, 0.0, 0.0, 0.0, 99999.9]angular_velocity: x: 0.010471975511965976y: 0.10402162341886204z: 0.13683381335635544angular_velocity_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]linear_acceleration: x: 9.022118y: -0.8253930416666666z: -2.5415567916666664linear_acceleration_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
---
2.1.2 imu 数据录制
执行如下命令,进行imu的bag包录制。
# --duration=0.5h  		0.5h
# --duration=1m  		1min
# --duration=30  		30s
rosbag record -O imudata_30m.bag /imu0 --duration=0.5h  # 录制/imu0数据0.5h,并保存在imudata_30m.bag 中
2.2 imu 标定
上述步骤完成后,进入imu_utils功能包文件夹下 icm42652.launch 文件(自己添加)进行相关设置:
<launch><node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"><param name="imu_topic" type="string" value= "/imu0"/>					 <!-- imutopic名称 --><param name="imu_name" type="string" value= "icm42652"/>        <!-- imu名称 --><param name="data_save_path" type="string" value= "$(find imu_utils)/data/icm42652/"/>  <!-- 标定结果文件保存位置 --><param name="max_time_min" type="int" value= "60"/>            <!--使用bag数据的最大时长 60为60min,默认是120分钟,程序会在最大时间截断读取数据--><param name="max_cluster" type="int" value= "100"/></node><arg name="bag_name" default = "imudata_30m" /> 	<!--imu的bag名--><node pkg="rosbag" type="play" name="player" output="log" args="$(env HOME)/data/datasets/0428_localization/$(arg bag_name).bag  -r 5"/>		<!-- 5倍速播放bag包-->
</launch>
在
imu_utils/data路径下添加上面launch文件配置imu_name的内容,方便后续程序结束保存标定的结果文件(理论上应该程序自动生成路径,但实操后未生成)。
执行如下命令进行标定:
roslaunch imu_utils icm42652.launch
幸运的话,等待一会对应的目录文件夹会有yaml标定文件生成:
%YAML:1.0
---
type: IMU
name: icm42652
Gyr:unit: " rad/s"avg-axis:gyr_n: 1.4349307905863827e-03			# 陀螺仪误差模型高斯白噪声gyr_w: 1.9369393077422063e-05			# 陀螺仪biasx-axis:gyr_n: 1.4784338214134302e-03gyr_w: 2.1455538970808570e-05y-axis:gyr_n: 1.5718208003725456e-03gyr_w: 2.2505267719503148e-05z-axis:gyr_n: 1.2545377499731717e-03gyr_w: 1.4147372541954469e-05
Acc:unit: " m/s^2"avg-axis:acc_n: 1.4501213884079829e-02		# 加速度计误差模型高斯白噪声acc_w: 1.4807089586902465e-04		# 加速度计biasx-axis:acc_n: 1.4483543834083238e-02acc_w: 7.5054689915566628e-05y-axis:acc_n: 1.4540207652520546e-02acc_w: 1.9777915646436287e-04z-axis:acc_n: 1.4479890165635700e-02acc_w: 1.7137884122714445e-04
根据launch文件配置,标定文件生成路径:
 
建议 在
imu_utils/src/imu_an.cpp的 imu_callback 回调函数中添个获得imu数据的标记,否则,终端一直停留在wait for imu data.很容易让人自我怀疑(尤其是首次标定),,,
三、Kalibr 工具的使用
1. 安装
1.1 下载与编译
mkdir -p kalibr_cam_WS/src
cd kalibr_cam_WS/srcgit clone https://github.com/ethz-asl/kalibr.gitcd ..
catkin_make
1.2 问题解决
编译过程中,遇到如下图中的fatal error: libv4l2.h的错误,直接 sudo apt-get install libv4l-dev 解决。
 
# 生成4.5cm*4.5cm的aprilgrid(适应A3打印)
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 4 --tsize 0.045 --tspace 0.3 --eps# 生成 棋盘格标定板
rosrun kalibr kalibr_create_target_pdf --type checkerboard --nx 8 --ny 11 --csx 0.05 --csy 0.05
aprilgrid 生成图片如下所示:

 其对应的 checkboard.yaml 文件如下设置:
target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags
tagRows: 4               #number of apriltags
tagSize: 0.045           #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize
标定板参数说明:
--type apriltag标定板类型
--nx [NUM_COLS]列个数
--ny [NUM_ROWS]行个数
--tsize [TAG_WIDTH_M]二维码方格长度(size),单位m
--tspace [TAG_SPACING_PERCENT]小方格与二维码方格长度比例
--eps参数,可以生成eps文件
转换工具:EPS转PNG/JPG/TIFF工具 、PDF转PNG工具

