上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用

前言


1 相机标定

1-1 概念回顾
  • 相机标定(Camera Calibration)是计算机视觉中的一个基本步骤,其目的是确定相机的内参(internal parameters)和可能的外参(external parameters)。内参包括焦距(focal length)、主点(principal point)、畸变系数(distortion coefficients)等,而外参则包括相机的位置和方向。
  • 回顾上一次推导的结果
1-2 标定板
  • 标定板(Calibration Board)是相机标定过程中使用的物理图案,用于确定相机的内部和外部参数。标定板上的图案可以是棋盘格、圆点或其他可识别的模式。

  • 类型

    • 棋盘格(Chessboard):这是最常用的标定板类型,通常由黑白相间的方格组成。棋盘格的角点易于检测,并且可以提供丰富的特征点用于标定计算。

    • 圆点(Circle Grid):这种标定板由均匀分布的圆点组成,同样易于检测,并且在某些情况下可能比棋盘格更易于处理。

    • AprilTag:这是一种特殊的二维码,包含了编码信息,可以用于更高级的相机标定和增强现实应用。

  • 使用

    • 在相机标定过程中,标定板被放置在已知位置,相机从多个角度拍摄标定板的图像。通过分析这些图像中的特征点,可以计算出相机的内部参数(如焦距、主点和畸变系数)和外部参数(如旋转矩阵和平移向量)。
  • 这里我使用的是现成玻璃材质的标定板

    • 图中左下角有GP400 12*9-30的字样
      • GP400:标定板的型号
      • 12*9:棋盘格的大小,即12行和9列的方格。
      • 30:每个方格的尺寸,30mm
  • 下面我们看看如何使用这个棋盘格对相机的内参矩阵进行标定。


2 camera-calibration

2-1 介绍
  • camera_calibration 是 ROS 提供的一个相机标定工具包,适用于单目和双目相机的标定。它使用棋盘格作为标定板,而非 AprilTag。该工具包基于 OpenCV 的原理,能够方便地估计相机的内部参数(如焦距、主点和畸变系数)和外部参数(如旋转矩阵和平移向量)
2-2 安装
  • 新开一个终端,我们直接安装即可
bash 复制代码
sudo apt install ros-$ROS_DISTRO-camera-calibration
2-3 RGB标定
  • 老规矩我们连接好相机,打开驱动程序(astra.launch)

  • 标定程序需要订阅到摄像头话题,回顾上一节的内容,我们需要订阅的是/camera/color/image_raw

  • 运行标定程序

    bash 复制代码
    rosrun camera_calibration cameracalibrator.py --size 8x11 --square 0.030 image:=/camera/color/image_raw
    • --size 8x11:注意这里填的不是棋盘格的行列数,是内部角点的行列数

    • --square 0.030:每一小格的边长

    • image:=/camera/color/image_raw:图像话题

  • 上述程序运行后会弹出如下窗口

  • 相机类型选择

    • Camera type摄像头类型:,这里我们选择0
      • 0 pinhole针孔
      • 1 fisheye鱼眼
    • scale:比例,设置为1即可
  • 我们来看右侧这四个进度条

    • X:棋盘格在摄像头视野中的左右移动
    • Y:棋盘格在摄像头视野中的上下移动
    • Size:棋盘格在摄像头视野中的前后移动
    • Skew:棋盘格在摄像头视野中的倾斜转动
  • 我们需要不断移动棋盘格,不断采集四个进度条的数据,当数据采集完成时候,CALIBRATE按钮会变色(尽量让四个条都变成绿色)

  • 依次点击CALIBRATE,标定完成后SAVECOMMIT会亮起,点击SAVE进行保存,点击COMMIT进行提交关闭程序

  • 终端可以看到标定的结果和标定文件保存的位置
    ('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

  • 我们打开ost.yaml

yaml 复制代码
image_width: 640
image_height: 480
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [524.2458 ,   0.     , 320.59801,
           0.     , 522.832  , 240.49402,
           0.     ,   0.     ,   1.     ]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.016076, -0.099965, 0.000828, -0.000928, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1., 0., 0.,
         0., 1., 0.,
         0., 0., 1.]
projection_matrix:
  rows: 3
  cols: 4
  data: [519.10468,   0.     , 319.54747,   0.     ,
           0.     , 521.18512, 240.27539,   0.     ,
           0.     ,   0.     ,   1.     ,   0.     ]
  • image_width 和 image_height:即图像的宽度和高度
  • camera_name:这是相机的名称 "narrow_stereo"。
  • camera_matrix:相机矩阵(也称为内参矩阵)描述了相机的内部参数。
  • distortion_model:畸变模型描述了镜头的畸变类型。这里使用了 "plumb_bob" 模型,这是一种简化的径向畸变模型。
  • distortion_coefficients:畸变系数是与畸变模型相关的参数,用于校正镜头的畸变。这里有五个畸变系数:k1, k2, p1, p2, k3。这些系数用于校正镜头的径向和切向畸变。
  • rectification_matrix:校正矩阵用于校正相机的图像,使其更适合于立体视觉应用。在这个例子中,校正矩阵是一个单位矩阵,意味着没有应用特定的几何校正。
  • projection_matrix:
    投影矩阵用于将三维空间中的点投影到二维图像平面上。在这个例子中,投影矩阵与相机矩阵非常相似,但可能包含了一些额外的变换,用于校正图像的几何失真。

2-4 RGB标定使用
  • 根据上一节说的,在ros_astra_camera中,我们可以添加标定的结果到启动文件
xml 复制代码
<launch>
    <!--...-->
    <arg name="color_info_uri" default="file:///you_depth_camera_calib_path/rgb_camera.yaml"/>
    <!--...-->
</launch>
  • 我们观察以下默认的启动时候调用的默认标定文件

  • 我们需要修改我们的标定文件摄像机的名字为rgb_camera

yaml 复制代码
image_width: 640
image_height: 480
camera_name: rgb_camera
  • 同时我们修改启动文件的标定文件路径为我们存放标定文件的路径中
xml 复制代码
<arg name="color_info_uri" default="file:///home/zhlucifer2/ros-bicycle/src/ros_astra_camera/ost.yaml"/>
  • 重新启动相机,可以看到我们的标定文件已经被使用了

小结

  • 本节我们介绍了如何能使用camera-calibration进行RGB相机标定和启动
  • 下一节我们讲讲我们该如何对深度相机进行标定
  • 如有错误,欢迎指出!!!!感谢大家的支持!
相关推荐
CES_Asia1 天前
工信部“人工智能+”制造行动点亮CES Asia 2025
人工智能·科技·数码相机·制造·智能音箱·智能手表
只待花开2 天前
ROS2 python编写 intel realsense D405相机节点通过launch.py启动多个相机并发送图像话题,基于pyrealsense2库
数码相机
KeyPan2 天前
【ORB-SLAM3:相机针孔模型和相机K8模型】
数码相机
千穹凌帝2 天前
基于深度学习多图像融合的屏幕缺陷检测方案
人工智能·深度学习·数码相机
传说故事3 天前
相机内外参知识
数码相机·相机·相机参数
妄想出头的工业炼药师3 天前
imu相机EKF
数码相机
合方圆~小文3 天前
工业摄像机基于电荷耦合器件的相机
人工智能·深度学习·数码相机·目标检测
资源补给站4 天前
大恒相机开发(1)—Python调用采集彩色图像并另存为本地
开发语言·python·数码相机
OAK中国_官方4 天前
四相机设计实现全向视觉感知的开源空中机器人无人机
数码相机·机器人·无人机
s_daqing4 天前
解锁BL后的K40降级
数码相机