上手一个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,标定完成后SAVE和COMMIT会亮起,点击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相机标定和启动
  • 下一节我们讲讲我们该如何对深度相机进行标定
  • 如有错误,欢迎指出!!!!感谢大家的支持!
相关推荐
敢敢のwings17 小时前
SimpleMemVLA 深度解读:把原生视频上下文变成机器人的记忆
数码相机·机器人·音视频
敢敢のwings1 天前
Super Odometry 2.0:相机与激光雷达退化后,机器人如何继续估计运动
人工智能·数码相机·机器人
高升说2 天前
手眼方案怎么选:眼在手上与眼在手外的工程对比
人工智能·数码相机
come112342 天前
手机与相机拍照入门
数码相机·智能手机
鹿野素材屋2 天前
U3D切换场景时候变黑怎么处理
数码相机·3d
GlobalInfo3 天前
2026年全球机器人用超平执行器市场研究报告:市场规模达7.51亿美元,人形机器人商业化与轻量化运动控制需求推动行业增长
大数据·人工智能·数码相机·microsoft·机器人
LaughingZhu3 天前
Product Hunt 热榜 2026-11-02:Screen Studio 4.0、ClawsGO Science、Riverside Agents
人工智能·深度学习·神经网络·数码相机·搜索引擎·百度
乐橙开放平台3 天前
离岗检测怎么实现?通过客流相机或 AI 摄像头识别岗位区域无人状态,再推送告警消息
人工智能·笔记·后端·数码相机·物联网·自动化·音视频
Hello-FPGA4 天前
PCIe-4005 相机模拟器在视觉系统开发中的实战应用
数码相机
FLJwu6 天前
《运动相机硬件防护选型实战》专栏|第二篇(PPTC 自恢复保险丝)
android·经验分享·数码相机·1024程序员节·运动相机