文章目录
前言
计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体,而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型参数就是摄像机参数。在大多数条件下,这些参数必须通过实验与计算才能得到。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。
一、准备工作
1、安装usb_cam相机驱动
sudo apt-get install ros-noetic-usb-cam
2、安装标定功能包
sudo apt-get install ros-noetic-camera-calibration
usb_cam提供了一个launch文件,可以直接roslaunch运行,打开usb_cam_node 和 image_view节点。launch文件在/opt/ros/noetic/share/usb_cam/launch文件夹下。直接在这个目录打开bash然后运行。执行这个命令:
roslaunch usb_cam usb_cam-test.launch
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="color_format" value="yuv422p" />
<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>
二、摄像头标定
1、准备标定板
准备标定板,可以使用这个网站生成标准的棋盘标定pdf,可以截图到平板上当成一块板子。
2、标定过程
(1)在bash中输入
rosrun camera_calibration cameracalibrator.py --size 11x8 --square 0.02 image:=/usb_cam/image_raw
(2) 全部绿了之后,会发现CALIBRATE按钮变颜色,然后点击,开始无尽的等待。直到控制台出现你的标定信息,就标定好了。如下图:
(3)测试标定结果,再把标定板拿到镜头,右侧出现了一个数据,叫线性误差,通常这个值小于0.1或者显示acc都可以认为标定结果可用
(4)测试标定结果
打开你的ros工作目录,在src下创建一个功能包,在这个功能包下创建config和launch目录,config存放刚才的标定结果yaml文件,launch目录存放launch文件,来运行节点。
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_name" value="my_camera"/>
<param name="camera_info_url" type="string" value="file://$(find bingda_tutorials)/config/ost.yaml"/>
</node>
</launch>
使用echo将camera_info话题输出,可以看到摄像头的标定参数已经加载在话题中了
rostopic echo /usb_cam/camera_info
运行image_pro功能包,再开启两个rqt_image_view
,直接终端输入就可以。