由于摄像头内部或者外部的一些原因,生成的图像往往会发生畸变,为了避免数据源造成的误差,需要对摄像头的参数进行标定。ROS官方提供了用于单目双目摄像头标定的功能包camera_calibration。
- camera_ calibration功能包
首先在使用以下命令安装摄像头标定功能包
sudo apt-get install ros-kinetic-camera-calibration
标定需要使用到棋盘格图案的标定靶,可以在网上找到。将该标定靶打印出来贴到平面硬纸板上备用。
- 启动标定程序
一切就绪后准备开始标定摄像头。首先使用以下命令启动usb摄像头
roslaunch usb_cam uab-cam-test.launch
然后使用以下命令启动标定程序:
rosrun camera_calibration cameracalibrator.py ––size 8x6 ––square 0.025 image:=/usb_cam/image_raw camera:=/usb_cam
Cameracalibrator.py标定程序需要以下几个输入参数。
- Size:标定靶的内部角点个数,这里使用的棋盘格一共六行,每行有八个内部角点。
- Square:这个参数对应每个棋盘格的边长,单位是米。
- Image和camera:设置摄像头发布的图像话题。
根据使用的摄像头和标定靶尺寸相应修改以上参数,即可启动标定程序。
- 开始标定
标定程序启动成功以后,将标定靶放在摄像头视野内,应该可以看到以下图形界面。在没有标定成功前,右边的按钮都为灰色,不能点击。为了提高标定的准确性,应该尽量让标定把出现在摄像头视野范围内的各个区域,界面右上角的进度条会提示标定进度.
- X:标定靶在摄像头视野中的左右移动
- Y:标定靶在摄像头视野中的上下移动
- Size:标定靶在摄像头视野中的前后移动
- Skew:标定靶在摄像头视野中的倾斜转动。
不断在视野中移动标定配,直到“CALIBRATE”按钮变色,表示标定程序的参数采集完成。点击”CALBRATE按钮,标定程序开始自动计算摄像头的标定参数,这个过程满要等待段时间, 界面可能会变成灰色无响应状态,注意无响应最长可达十到二十分钟,期间不要关闭。
参数计算完成后界面回复,而且终端也会有标定结果的显示。
点击save按钮,终端会打印生成文件及路径
('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')
我们在终端中可以看到路径是在计算机目录/tmp下。点击commit按钮,提交数据并退出程序,在计算机目录打开/tmp文件夹,可以看到calibrationdata.tar.gz,解压文件后从中找到ost.yaml文件,将文件放到“cam_info”文件夹下,将文件里面的参数camera_name改为head_camera,然后就可以在相机的launch文件加载该参数文件了
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="640" />
<param name="image_height" value="480" />
<param name="pixel_format" value="yuyv" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
<!--加载标定文件-->
<param name="camera_info_url" type="string" value="file://$(find ar_pose_adjust)/cam_info/ost.yaml"/>
</node>
<!--node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node-->
</launch>