在ROS中,标定摄像头是一个重要的步骤,它是为了获取摄像头的内参和外参,进而提高摄像头的定位精度。摄像头标定校正由镜头畸变、相机内参(焦距、主点坐标等)、相机外参(旋转和平移矩阵)等因素引起的图像失真和位置偏移。
ROS提供了camera_calibration功能包,可以用来进行单目或双目相机的标定。
对于棋盘格图案的标定靶,可以将其打印出来并贴到平面硬纸板上以备使用。
以下是使用ROS进行摄像头标定的简要步骤:
???sudo apt-get install ros-noetic-camera-calibration
???使用标准的棋盘格图案作为标定目标,其尺寸大小可以在标定过程中指定。
???将打印出来的棋盘格贴在一个平面硬纸板上,并确保在标定过程中能从不同角度和距离下捕捉到清晰的图像。
???根据摄像头类型启动相应的ROS驱动节点,如果是USB摄像头,则可以使用usb_cam包提供的launch文件启动。
启动camera_calibration工具,它会显示实时的摄像头画面并允许进行参数采集。
例如:rosrun?camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/camera/image_raw camera:=/camera
参数解释:
(1)size:标定棋盘格的内部角点个数,使用的棋盘一共有6行,每行有8个内部角点。
(2)square:这个参数对应每个棋盘格的边长,单位是米。
(3)image和camera:设置摄像头发布的图像话题。
根据使用的摄像头和标定靶棋盘格尺寸,相应修改以上参数,即可启动标定程序。
在摄像头视野中不断移动棋盘格,使其出现在不同的位置、角度和距离,直到所有进度条达到绿色满格状态。
?当有足够的样本后,"CALIBRATE"按钮将变为可用状态。
点击"CALIBRATE"按钮开始计算标定参数。
如果标定成功,程序将输出一个yaml文件,其中包含了标定结果,包括相机的内参、畸变系数以及外参。
?将生成的yaml文件加载到摄像头驱动节点配置中,以便在后续处理时自动对图像进行矫正。
可以通过查看矫正后的图像来验证标定效果是否良好。
在进行摄像头标定时,需要注意以下几点:
标定板与摄像头距离:
标定过程中应保证标定板与摄像头之间的距离变化多样,包括远近、不同角度和位置,以便采集到足够的数据来准确估计摄像头的内参(焦距、主点坐标、径向畸变系数)和外参(相对于世界坐标系的位置和旋转)。
标定板尺寸与格数:
使用棋盘状的标定靶时,确保已知其每格的实际尺寸,并正确输入到camera_calibration工具中。棋盘格的数量也应足够多以提高标定精度,通常至少为5x6以上。
视野覆盖范围:
尽可能让标定板在摄像头的整个视野范围内移动,包括中心区域以及边缘区域,这样才能得到全面的参数信息,有效校正畸变。
立体视觉标定:
如果是双目或多目摄像头系统,除了单个摄像头的标定之外,还需要进行立体视觉标定,确保左右摄像头之间的时间同步以及相对位置关系准确。