Wiki:http://wiki.ros.org/camera_calibration
普通相机:https://github.com/bosch-ros-pkg/usb_cam.git
单目教学:http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration
由于摄像头内部与外部的一些原因会给图像带来极大的失真,主要是径向变形和切向变形,导致直线变的弯曲,离图像中心越远的像素,失真越严重。为了避免数据源造成的误差,需要针对摄像头的参数进行标定。标定本质上是借助一个已知确定的空间关系(标定板),通过分析拍照的图片像素,逆向推出相机固有且真实的参数(内参)。
一个已知尺寸的大棋盘。本教程使用9x6棋盘格和20毫米正方形,标定的时候要展平。
校准使用棋盘格的内部顶点,因此“10x7”棋盘使用内部顶点参数“9x6”,如下例所示。
什么规格的标定板都可以,只不过改一下参数就好。
空旷一点的区域,没有障碍物和标定板图案
通过 ROS 发布图像的单目相机
棋盘格(标定板)
启动相机
roscore
rosrun uvc_camera uvc_camera_node device:=/dev/video0
输入rostopic list可以查看图像话题
启动标定节点
xxxxxxxxxx
rosrun camera_calibration cameracalibrator.py image:=/image_raw camera:=/ --size 9x6 --square 0.02
size:标定棋盘格的内部角点个数,例如9X6,角点一共六行九列。
square:棋盘格的边长,单位是米。
image和camera:设置摄像头发布的图像话题。
标定界面
X:棋盘格在摄像头视野中的左右移动
Y:棋盘格在摄像头视野中的上下移动
Size :棋盘格在摄像头视野中的前后移动
Skew:棋盘格在摄像头视野中的倾斜转动
启动成功后,将棋盘格放入画面中心,变换不同位姿。系统会自主识别,最好的情况是【X】、【Y】、【Size】、【Skew】下面的线条随着数据的收集先由红色变黄再变绿,尽可能填充满。
点击【CALIBRATE】计算相机内参,图片越多,时间越久,等待就好。(六七十张就差不多了,太多容易卡死)
点击【SAVE】保存不标定结果,出现最下面一行,点击【COMMIT】,退出。
标定结束后,标定结果存在【/tmp/calibrationdata.tar.gz】,可以移动出来看看内容
xxxxxxxxxx
sudo mv /tmp/calibrationdata.tar.gz ~
解压后,里面有刚刚标定的图片,一个ost.txt文件和一个ost.yaml文件。yaml文件是我们需要的,不过还需要修改才可以使用。