文章目录
- 一、问题描述
- 二、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工具