ROS摄像机的标定(这里很好的一点就是给出了标定结果的各个参数的含义,这个很多都没讲)

127 篇文章 13 订阅
本文详细介绍了ROS系统中单目相机的标定过程,包括下载和使用标定板、编译camera_calibration包、运行标定节点、移动标定板以收集数据,以及如何获取和理解标定结果。通过这个教程,读者可以了解如何校正摄像头的内部参数,提升图像质量。
摘要由CSDN通过智能技术生成

这里很好的一点就是给出了标定结果的各个参数的含义,这个很多都没讲

转载自:https://blog.csdn.net/artista/article/details/51125560

ROS摄像机的标定

ArtistA 2016-04-11 21:06:07 8418 收藏 8

分类专栏: ROS

本文主要为ROS camera_calibration 单目相机标定教程的翻译
原文:http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration
仅供英文苦手的同学参考使用

1.准备工作

首先,请在这里下载标定板。教程中使用的是8X6,边长为108mm的棋盘标定板。由于标定过程使用的是棋盘内部的角点进行,所以实际上我们使用的是9格X7格的棋盘标定板
请确保标定环境拥有一个5m×5m的无遮挡环境

1.1.编译

运行以下指令

$ rosdep install camera_calibration

$ rosmake camera_calibration

1.2.订阅摄像头信息

使用

$ rostopic list

来查阅当前发布的topic信息,请确认topic的列表中存在

/camera/camera_info
/camera/image_raw

如果不存在,请检查你的摄像头驱动是否正确安装
TIP:如果当前电脑连接了多个摄像头,或者你使用了自己编写的一些摄像头驱动,显示的信息可能会有一些不同

2.运行标定结点

2.1.运行结点

输入

$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera

来运行标定结点的python脚本,其中
–size 8x6 为当前标定板的大小
–square 0.108为每个棋盘格的边长
根据标定板的不同,可以按照需求更改这两个参数
image:=/camera/image_raw标定当前订阅图像来源自名为/camera/image_raw的topic
camera:=/camera为摄像机名

之后,将会出现如下图所示的UI
UI
如果没有出现如图所示的UI,请使用

 --no-service-check

来检查服务结点是否工作
如果没有看到如图所示的彩色点,请确认–size参数是否正确,尤其注意是否将size设置为了棋盘格数而非其标定角点的数目

2.1.1多个标定板

从Damondback版本开始,ROS就支持使用多个标定板来进行标定了,如果你使用多个标定板进行标定,请输入复数个–size和–square参数来说明各个标定板的大小

2.2.移动标定板

为了达到良好的标定效果,你需要在摄像机周围移动标定板,并完成以下基本需求:

  • 移动标定板到画面的最左、右,最上、下方
  • 移动标定板到视野的最近和最远处
  • 移动标定板使其充满整个画面
  • 保持标定板倾斜状态并使其移动到画面的最左、右,最上、下方
    当标定板移动到画面的最左、右方时,此时,UI的x会达到最小或满值
    同理,y指示标定板的在画面的上下位置,size表示标定板在视野中的距离
    每次移动之后,请保持标定板不动直到UI出现高亮提示
    当calibration按钮亮起时,代表你已经有足够的数据进行摄像头的标定,此时请按下calibration并等待一分钟左右

2.3取得标定结果

完成标定之后,你可以使用UI的滚动条来改变矫正后图像的尺寸,0.0表示//todo

D =  [-0.33758562758914146, 0.11161239414304096, -0.00021819272592442094, -3.029195446330518e-05]
K =  [430.21554970319971, 0.0, 306.6913434743704, 0.0, 430.53169252696676, 227.22480030078816, 0.0, 0.0, 1.0]
R =  [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P =  [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]
# oST version 5.0 parameters


[image]

width
640

height
480

[narrow_stereo/left]

camera matrix
430.215550 0.000000 306.691343
0.000000 430.531693 227.224800
0.000000 0.000000 1.000000

distortion
-0.337586 0.111612 -0.000218 -0.000030 0.0000

rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

projection
1.000000 0.000000 0.000000 0.000000
0.000000 1.000000 0.000000 0.000000
0.000000 0.000000 1.000000 0.000000

3.创建yml参数文件

使用camera_calibration_parsers来创建一个标定参数的yaml文件
运行
$ rosrun camera_calibration_parsers convert in-file out-file
完成yaml转换

4.标定参数的意义

ROS中的camera_calibration包,其代码实现主要使用了OpenCV中的calibration模块
一般来说,它包含以下内容

image_width: 2448
image_height: 2050
camera_name: prosilica
camera_matrix:
  rows: 3
  cols: 3
  data: [4827.94, 0, 1223.5, 0, 4835.62, 1024.5, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.41527, 0.31874, -0.00197, 0.00071, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
  rows: 3
  cols: 4
  data: [4827.94, 0, 1223.5, 0, 0, 4835.62, 1024.5, 0, 0, 0, 1, 0]

image_width、image_height代表图片的长宽
camera_name为摄像头名
camera_matrix规定了摄像头的内部参数矩阵
distortion_model指定了畸变模型
distortion_coefficients指定畸变模型的系数
rectification_matrix为矫正矩阵,一般为单位阵
projection_matrix为外部世界坐标到像平面的投影矩阵

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值