前言
为了后面的视觉激光融合SLAM以及跑通VINS-Fusion,需要标定双目相机和IMU得内参以及它们得外参(变换矩阵)。
准备工作
- 双目相机:ZED-m
- IMU:realsense-t265(仅使用它的imu信息)
- 系统:Ubuntu16.04 + ROS kinetic (ros推荐使用纯净的,就是新系统装ros,可以使用虚拟机)
双目相机标定
这里需要得到相机的内参矩阵,可以使用相机自带的标定信息,也可以使用标定工具包标定,比如VINS-Fusion,Kalibr,这里我以Kalibr为例。
Kalibr安装
因为后面联合标定也需要使用Kalibr,这里介绍一下它的安装。可以直接进Wiki看官方安装教程,教程写了两种安装方式,这里我们使用源码编译安装。官方使用的Ubuntu14.04+ ROS indigo,亲测Ubuntu16.04也行。
# 这里默认你已经做好了准备工作,比如创建工作空间kalibr_workspace,source了
# 安装libv4l,不然报错找不到libv4l
sudo apt install libv4l-dev
# 首先进入工作空间的src文件夹,克隆下源码
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
# 编译,时间有点长可以出去玩一下
cd ~/kalibr_workspace
catkin_make
安装完成后我们进行测试,是否安装成功,这里生成一张标定板,为了能够使用A4纸打印,命令如下
# 启动rosmaster
roscore
# 生成标定板(7行6列,每个棋盘格宽0.05m)
rosrun kalibr kalibr_create_target_pdf --type checkerboard --nx 6 --ny 7 --csx 0.05 --csy 0.05
在当前目录下能找到生成的pdf(如图),按实际大小打印出来,每个格子应该是2.92cm
新建target_6x7.yaml保存参数
target_type: 'checkerboard'
targetCols: 6
targetRows: 7
rowSpacingMeters: 0.029
colSpacingMeters: 0.029
标定过程
- 将相机固定,在前方移动标定板大概十几秒,记录下bag包:
rosbag record /cmaera/image_1 /camera/image_2 -O camera.bag
这里可以降低相机的发布频率,减小包的大小和后面处理时间
-
进行标定
rosrun kalibr kalibr_calibrate_cameras --target target_6x7.yaml --bag cameara.bag --models pinhole-radtan pinhole-radtan --topics /cmaera/image_1 /camera/image_2 --show-extraction --bag-from-to 5 20
-
标定结果在当前目录生成
yaml
文件:
cam0:
cam_overlaps: [1]
camera_model: pinhole
distortion_coeffs: [0.0067221785223551735, 0.0006309071251854829, -0.0009206033732726818,
-0.005807607326385791]
distortion_model: radtan
intrinsics: [374.8798664259513, 376.62433296380203, 633.6382978832153, 368.203361863134]
resolution: [1280, 720]
rostopic: /zedm/zed_node/left/image_rect_color
cam1:
T_cn_cnm1:
- [0.9999958135540992, 0.0007219875640781401, 0.002802072131479685, -0.06140952719752661]
- [-0.0007241075974458178, 0.9999994523273698, 0.0007556541173352181, -0.0009541268599771967]
- [-0.0028015250239860137