在上节: ROS 教程之 vision : 用笔记本摄像头获取图像
能够使用相机后,就需要对相机进行标定,在ROS上使用原始图像校准单目相机。
操作步骤
1、首先将catkin_ws/src/usb_cam/launch/usb_cam-test.launch的文件内容修改掉。
原有内容:
<launch>
<arg name="image_view" default="false" />
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<rosparam command="load" file="$(find usb_cam)/config/usb_cam.yml"/>
</node>
<node if="$(arg image_view)" 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>
修改后内容:
<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"/>
</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>
启动roslaunch usb_cam usb_cam-test.launch,发现摄像头可正常使用。
2、下载ROS的相机标定包
在终端下载:
sudo apt-get install ros-melodic-camera-calibration
3、打印标定板
可以自己随便搜一个,我参考了Will_Ye博主的。如下:
标定板最重要的属性:
(1)、size用于指明标定板的内角点数量,比如上图是4x6。否则相机识别不出来标定板,就不显示x,y,size和skew。
(2)、格子的大小,打印后量一下,上图在A4纸打印出来后。每个正方形边长为4cm=0.04m。
4、 开始标定
开启两个终端,第一个终端在~/catkin_ws/src/usb_cam/launch文件夹下开启,输入
roslaunch usb_cam usb_cam-test.launch
启动相机后,再开启第二个终端,启动标定程序
rosrun camera_calibration cameracalibrator.py --size 4x7 --square 0.04 image:=/usb_cam/image_raw camera:=/usb_cam
如图:
之后移动标定板到界面中,:
当识别出标定板,标定程序的界面右侧才能看到一些标识:
X:表示标定板在视野中的左右位置
Y:表示标定板在视野中的上下位置
Size:表示标定板在视野中的尺寸大小,离相机的远近
Skew:表示标定板在视野中的倾斜角度。
不断上下左右,来回靠近,转动标定板位置,直至X Y Size和Skew四个值下面长条全变绿,点击CALIBRATE按钮,开始计算相机的参数,稍等一会,出现如下画面,表示计算完毕。
点击变青的SAVE按钮,就会把数据保存到默认的目录/tmp/calibrationdata.tar.gz
下
打开这个压缩包,里面大概是这些内容,有一些图片,ost.yaml文件是我们需要的标定结果。
由于/tmp目录中的文件随时可能会被系统删除,于是将标定的文件ost.yaml拷贝到/catkin_ws/src/usb_cam/camera_info下。
在功能包的launch目录中创建launch文件,例如命名为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_info_url" value="package://usb_cam/camera_info/ost.yaml"/>
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</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>
在~/catkin_ws/src/usb_cam/launch文件夹下开启终端,输入
roslaunch usb_cam camera.launch
效果好很多。
参考链接: 1、【ROS】usb_cam相机标定
2、官方单目的标定教程
3、ROS 教程之 vision: 摄像头标定camera calibration
4、摄像头标定–camera_calibration