目的:摄像头是一种精密仪器,对光学器件要求较高,由于摄像头内部及外部一些原因,生成图像往往会发生畸变,为避免数据源造成误差,需要针对摄像头的参数进行标定。(引自ROS培训古月老师)这里我把视频学习整理了一下,仅用于个人记忆学习。
1.安装标定功能包
sudo apt-get install ros-kinetic-camera-calibration
2.摄像头标定流程
(1)启动摄像头 (在工作空间下 /home/catkin_ws)
roslaunch robot_vision usb_cam.launch
这里注意:采用的外接摄像头参数显示是无驱动版,但是却报错 error 22 ....,这里认为可能需要安装驱动,这里借鉴了一篇博客:
https://blog.csdn.net/qq_39989653/article/details/80393912
(2)启动标定包(~$)另外打开一个终端
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam
这时会有显示标定窗口display。然后把棋盘格放入,角点会被识别,并被连接起来,如下图:
上下左右移动旋转棋盘格,右边上部X,Y,Size,Skew表示各个方向标定进度,直到CALIBRATE呈绿色,标定结束并点击,这时后台计算标定数据,耐心等待几分钟后,下面的SAVE、CMMIT会变成绿色,表示后台计算完毕。
同时终端会显示获得的标定参数。接着点击SAVE保存标定数据。
终端显示将标定数据默认保存路径:/tmp/calibrationdate.tar.gz(在目录Computer/tmp文件夹下的压缩文件)
关闭标定程序,标定结束。
(3)Kinetic的标定
Kinetic的标定与普通摄像头类似,要分别标定彩色摄像头和红外摄像头。(这里暂时没有拿Kinetic实际标定,待后面再记录)
(4)标定文件使用
标定完成以后,在/tmp/calibrationdate.tar.gz压缩包解压之后可以看到标定过程中的图像帧,主要用到的是生成的标定文件ost.yaml
打开该文件,是标定生成的参数。
将yaml该文件复制到功能包下,并在launch文件中写入就可以使用了
(5)kinetic标定文件使用
kinetic标定会生成两个标定文件,一个是彩色相机,一个是红外相机的。使用的时候把这两个文件都写入到launch文件。
例如:robot_vision是功能包名称,kinetic rgb calibration.yaml是彩色相机标定生成文件。
(6)使用标定文件可能会产生的错误
标定文件如ost.yaml(在此处复制到功能包后更名为camera_calibration.yaml)更改位置如下: