一、概述
相机标定的目标是获取双目相机参数、imu参数、几者之间的转换矩阵参数。标定的主要工作包括:
1.获取双目相机内参+双目转换矩阵;
2.获取imu参数,以测定噪声密度、随机游走;
3.双目+imu联合标定,获取双目到imu的转换矩阵;
二、相机参数说明
相机参数配置文件camchain.yaml,存储相机内外参的校准、IMU相对于相机的空间/时间校准参数。其所含的参数说明如下:
· CAMERA_MODEL:camera_model(pin_hole/omni),(针孔/全向)。
· intrinsics:包含给定投影类型的内部参数的向量。要素如下:
- pinhone: [fu fv pu pv]
- omni: [xi fu fv pu pv]
- ds: [xi alpha fu fv pu pv]
- eucm: [alpha beta fu fv pu pv]
· distortion_model:畸变模型,(radtan/equidistant)。
· distortion_coeffs:畸变参数。
· T_cn_cnm1:相机外在转换,总是相对于链中最后一个相机。(例如:cam1:T_cn_cnm1 = T_c1_c0,将cam0转换为cam1坐标)
· T_cam_imu:imu外参,从imu到相机坐标的转换(T_c_i)。
· timeshift_cam_imu:相机和imu时间戳之间的时间间隔,以秒为单位(t_imu = t_cam + shift)。
· rostopic:摄像机图像流的主题。
· resolution:相机分辨率[width,height]。
示例:
1.相机chain.yaml
|
|
2.imu配置:imu.yaml
|
|
三、标定环境搭建
1.ros安装
注意当前匹配使用的ubuntu系统版本。
然后是两个utils的安装,这之前有依赖和环境搭建:
以下2个包,注意:先编译code_utils,再编译imu_utils,不能放在一起编译,imu_utils依赖code_utils。先把code_utils放在工作空间src下编译。再将imu_utils放到src下编译。
2.core_utils安装
|
|
报错 fatal error: backward.hpp: 没有那个文件或目录,在code_utils下面找到sumpixel_test.cpp,修改#include “backward.hpp”为#include “code_utils/backward.hpp”后再catkin_make。
3.imu_utils安装
|
|
4.标定工具Kalibr
官网:https://github.com/ethz-asl/kalibr
安装文档:https://github.com/ethz-asl/kalibr/wiki/installation
四、双目相机标定
利用Kalibr工具进行双目标定。
1.创建新ros空间
已如上述说明。
2.标定板制作
下载链接,包含三种类型标定板(Aprilgrid, Checkerboard, Circlegrid),其中Aprilgrid含序号,能防止计算位姿时跳帧,故用Aprilgrid标定。
3.示例
下载链接同上,含多相机标定(Multiple camera calibration)、IMU+相机联合标定(IMU-camera calibration),此处先用前者标定相机,包括:相机参数文件camchain.yaml、标定结果文件target.yaml、录制数据集.bag文件。
4.录制bag数据集
为了之后imu+相机联合标定,此处采集双目+imu的数据。若已有通过ros发布image和imu消息节点,只需用rosbag record工具将拍摄到的标定板图像制作成.bag文件即可。注意默认设备采集的频率为20~60Hz,会使标定图像过多,计算量太大。采集时最好将ros topic频率降低到4Hz左右。
ros可更改topic发布频率的节点throttle,分别打开两个终端,运行以下命令:(其中原始话题名称:/mynteye/left/image_raw、/mynteye/right/image_raw,更改频率后话题名称:/left、/right)
然后录制bag,参考:Kalibr标定视频教程。
5.进行标定
进入下载示例Multiple camera calibration文件夹,修改camchain.yaml文件:话题名称、频率、标定板尺寸。(详见视频教程)
打开终端输入命令:
6.标定结果
标定完成后,生成cam-chain.yaml文件,包含:相机内参、畸变参数、基线等。

五、IMU标定
1.录制imu.bag
此处采用imu_utils进行标定。保持imu静止不动至少2小时,录制imu数据集.bag。
2.修改launch文件
自定义可选,修改src/imu_utils-master/launch文件,包括名字、时长之类。(比如: mynt_imu.launch)。
3.进行标定
|
|
|
|
4.标定结果
标定结束,生成cam-imu.yaml文件,在data目录: src/imu_utils/data/m210_imu_param.yaml,包含:各方向的随机噪声、随机游走。
六、双目+IMU联合标定
目标:获取相机内参到imu的相对转换矩阵。
与kalibr标定双目过程类似,这次在IMU-camera calibration例子基础上,标定imu与camera。首先以上两次标定结果修改.yaml参数,包括:标定结果、话题类型、频率等。
标定结果
.txt文件中的部分结果,包含相机与imu之间的转换矩阵。

七、参考文献
[1] Kalibr官网:https://github.com/ethz-asl/kalibr/wiki/
[2] Kalibr源码:https://github.com/ethz-asl/kalibr/
[3] Kalibr标定教程:https://www.youtube.com/watch?app=desktop&v=puNXsnrYWTY/