声明:本文使用的TartanCalib的安装方法,它集成了Kalibr环境,项目运行基于Kalibr
一.环境准备
1.Ubuntun版本 20.04
2.安装Docker,克隆项目到本地
克隆并构建docker映像
git clone https://github.com/castacks/tartancalib cd tartancalib docker build -t tartancalib -f Dockerfile_ros1_20_04 .
挂载数据文件夹并在GUI容器中共享xhost。有关更多信息,请阅读ROS维基在Docker上。
FOLDER=/path/to/your/data/on/host xhost +local:root docker run -it -e "DISPLAY" -e "QT_X11_NO_MITSHM=1" \ -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \ -v "$FOLDER:/data" tartancalib
补充命令:source devel/setup.bash
//用于设置ROS的环境变量,以便在当前shell会话中能够使用ROS的命令和工具。
二.资源准备-并放入挂载的文件中
1.准备标定板与标定图片,并将标定图片转换为.bag格式
标定板:
可以使用Aprilgrid板或棋盘格
标定图片:
①准备不同角度的棋盘格照片30-50张,标定板需要拍全。官方的步骤:固定相机,移动标定板在不同的角度以获得校准图像。
②图片命名格式有要求,一般使用19位的数字命名。否则执行打包报错!
打包成bag文件:
rosrun kalibr kalibr_bagcreater --folder dataset-dir/. --output-bag awsome.bag
2.根据使用的标定板准备标定板参数YAML文件
参考网址:https://github.com/ethz-asl/kalibr/wiki/calibration-targets
target_type: 'checkerboard' #gridtype 这里采用了棋盘格 targetCols: 6 #内角点的列数 targetRows: 7 #内角点的行数 rowSpacingMeters: 0.06 #对于方形棋盘格来说 ,这里的角点间距指正方形棋盘格边长 colSpacingMeters: 0.06 #单位m
3.相机模型
相机模型的一些参数说明:
①omni-radtan:鱼眼相机-畸变模型
②omni-none:鱼眼相机无畸变
③pinhole-radtan:小孔相机(普通相机)-畸变模型
④eucm-none;通用型相机模型 无畸变
⑤
pinhole-equi:针孔相机-等距畸变模型,对鱼眼相机适用性更好⑥
pinhole-fov:针孔相机-fov畸变模型
三.运行脚本->输出
执行命令:
rosrun kalibr kalibr_calibrate_cameras --target checkerboard.yaml --models pinhole-radtan --topics /cam0/image_raw --bag awsome.bag
得到结果一个yaml文件和一个txt文件
yaml文件主要参数说明 intrinsics(内参) 焦距(Focal Length):通常以 f_x
和f_y表示或fu,fv
(fu,fv,pu,pv) 光心(Optical Center):也称为图像中心(Image Center),通常以 c_x
和c_y
表示或pu,pvdistortion_coeffs(畸变系数) 径向畸变和切向畸变系数 (k1,k2,r1,r2) distortion_model(畸变模型) camera_model(相机类型)
补充材料,针对不同的摄像头,得到的yaml文件参数也不同:
对于相机内参
对于畸变参数
四.总结
标定完成后我们得到了相机的内参和畸变系数,利用这两个数据可以矫正图像。本次矫正效果如图所示:
矫正前:
矫正后:
可以看出,左下角,右下角矫正效果存在不足,讨论自身的操作原因能够尝试优化的点:
①数据集数量和质量
②矫正模型和相机模型的选择
③标定板的选择、标定板的yaml文件参数