这篇文章介绍采用开源库Kalibr对zed mini双目相机的内外参进行标定,Kalibr在SLAM领域非常流行,因为他可以非常方便的对相机,IMU等传感器的内外参进行标定
Kalibr的官网:https://github.com/ethz-asl/kalibr
Kalibr是一个ros功能包,所以需要先安装ros
sudo apt-get install -y \
git wget autoconf automake nano \
libeigen3-dev libboost-all-dev libsuitesparse-dev \
doxygen libopencv-dev \
libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
git clone https://github.com/ethz-asl/kalibr.git
cd ../
catkin_make
标定板下载网址:Downloads · ethz-asl/kalibr Wiki · GitHub
这里采用Aprilgrid,因为他比checkboard具有更多的优势,标定结果更准确,同时在下载页面,也只有Aprilgrid可以下载。
下载下来的Aprilgrid如下图所示,是A0大小,但是我们也可以采用更小的纸来打印,比如采用A4大小的纸张。
打印的Aprilgrid最好粘贴在一个硬平面上,方便后续的标定过程。
下载Aprilgrid的同时,也需要把Aprilgrid的配置文件下载下来,文件名一般是:
april_6x6_80x80cm.yaml,该文件的内容如下:
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.088 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
codeOffset: 0 #code offset for the first tag in the aprilboard
其中:
用A4纸打印的Aprilgrid量出来的tagSize=0.021m, tagSpacing=0.285714.
ZED双目相机的SDK是需要英伟达的GPU支持的,但是因为穷,买不起GPU,所以只能在CPU上使用ZED双目相机。幸运的是ZED是一个UVC标准的摄像头,使用Opencv即可读取图像。这里安装一个ros功能包zed_cpu_ros。
虽然我们没有CUDA,但是我们还是需要安装ZED的SDK,可以在stereo公司官网下载(需要魔法)。安装好SDK后,我们需要从/usr/local/zed/settings中将zed相机的标定文件.conf复制到zed_cpu_ros/config。.conf包含zed相机的内参,畸变系数,基线长度,双目矫正矩阵(以旋转适量的形式提供)等信息。zed_cpu_ros功能包会读取这个配置文件,然后将左右图像的相机信息发布出去。至此,我们就可以在CPU上使用ZED相机了。
将ZED相机通过USB3.0(只能是3.0接口,2.0根本识别不出来)接口连接到电脑后,在终端运行如下命令,读取和发布ZED的图像:
roslaunch zed_cpu_ros zed_cpu_ros.launch
如果不出意外的话,肯定会发生意外
我们在运行zed_cpu_ros.launch之前还是需要看看他里面到底有啥
这个文件里右几个参数需要设置。
设置好之后,再运行zed_cpu_ros.launch,即可用rviz查看发布的图像。
下面可以开始录制标定bag文件,固定相机,移动标定板。终端运行:
rosbag record -O Kalib_data_vga.bag /camera/left/image_raw /camera/right/image_raw
标定板移动可以参考https://youtu.be/puNXsnrYWTY?t=57:
录制结束后会得到一个Kalib_data_vga.bag文件。
rosrun kalibr kalibr_calibrate_cameras --bag Kalib_data_vga.bag --topics /camera/left/image_raw /camera/right/image_raw --models pinhole-radtan pinhole-radtan --target april.yaml
可添加–show-extraction,在标定过程中可以可视化角点检测情况是否良好。
标定完成后,会生成三个文件
至此双目标定就结束了,可以将标定结果与ZED自带的标定做对比,评估标定的效果。后续就可以利用标定结果开展后续更有意思的工作了
使用kalibr做相机内参标定时,报错:“ImportError: No module named igraph”
1、sudo apt-get install -y libigraph0-dev
2、pip install python-igraph==0.7.1.post6
(python2只支持0.8X以前的版本)