ROS摄像机的标定
来源:互联网 发布:高德交通大数据 编辑:程序博客网 时间:2024/06/05 16:31
1.准备工作
首先,请在这里下载标定板。教程中使用的是8X6,边长为108mm的棋盘标定板。由于标定过程使用的是棋盘内部的角点进行,所以实际上我们使用的是9格X7格的棋盘标定板
请确保标定环境拥有一个5m×5m的无遮挡环境
1.1.编译
运行以下指令
$ rosdep install camera_calibration
- 1
- 2
$ rosmake camera_calibration
1.2.订阅摄像头信息
使用
$ rostopic list
- 1
- 2
来查阅当前发布的topic信息,请确认topic的列表中存在
/camera/camera_info/camera/image_raw
- 1
- 2
- 3
如果不存在,请检查你的摄像头驱动是否正确安装
TIP:如果当前电脑连接了多个摄像头,或者你使用了自己编写的一些摄像头驱动,显示的信息可能会有一些不同
2.运行标定结点
2.1.运行结点
输入
$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera
- 1
- 2
来运行标定结点的python脚本,其中
–size 8x6 为当前标定板的大小
–square 0.108为每个棋盘格的边长
根据标定板的不同,可以按照需求更改这两个参数
image:=/camera/image_raw标定当前订阅图像来源自名为/camera/image_raw的topic
camera:=/camera为摄像机名
之后,将会出现如下图所示的UI
如果没有出现如图所示的UI,请使用
--no-service-check
- 1
- 2
来检查服务结点是否工作
如果没有看到如图所示的彩色点,请确认–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]width640height480[narrow_stereo/left]camera matrix430.215550 0.000000 306.6913430.000000 430.531693 227.2248000.000000 0.000000 1.000000distortion-0.337586 0.111612 -0.000218 -0.000030 0.0000rectification1.000000 0.000000 0.0000000.000000 1.000000 0.0000000.000000 0.000000 1.000000projection1.000000 0.000000 0.000000 0.0000000.000000 1.000000 0.000000 0.0000000.000000 0.000000 1.000000 0.000000
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
3.创建yml参数文件
使用camera_calibration_parsers来创建一个标定参数的yaml文件
运行
$ rosrun camera_calibration_parsers convert in-file out-file
完成yaml转换
4.标定参数的意义
ROS中的camera_calibration包,其代码实现主要使用了OpenCV中的calibration模块
一般来说,它包含以下内容
image_width: 2448image_height: 2050camera_name: prosilicacamera_matrix: rows: 3 cols: 3 data: [4827.94, 0, 1223.5, 0, 4835.62, 1024.5, 0, 0, 1]distortion_model: plumb_bobdistortion_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]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
image_width、image_height代表图片的长宽
camera_name为摄像头名
camera_matrix规定了摄像头的内部参数矩阵
distortion_model指定了畸变模型
distortion_coefficients指定畸变模型的系数
rectification_matrix为矫正矩阵,一般为单位阵
projection_matrix为外部世界坐标到像平面的投影矩阵
- ROS摄像机的标定
- ROS摄像机的标定
- ROS kinetic 下单目摄像机的标定
- 摄像机标定的基础知识
- Opencv摄像机的标定
- 摄像机的标定
- 摄像机标定方法(二)----Faugeras的摄像机标定方法
- 基于opencv的摄像机标定
- 读取 摄像机标定的参数
- 单目摄像机-ros-opencv-MATLAB-标定过程
- 摄像机标定
- 摄像机标定
- 摄像机标定
- 摄像机标定
- 摄像机标定
- 摄像机标定
- 摄像机标定
- 摄像机标定
- 获取一个年份、月份、一段时间的年月份sql,例如从某年到今年的时间段2017-01、2017-02
- 35、Selenium + Python 实现 UI 自动化测试-正片7
- spring-boot 项目启动时执行的方法实现
- Spring的基本用法:
- 缓存技术的详解
- ROS摄像机的标定
- Android开发:XML简介及DOM、SAX、PULL解析对比
- 【Extjs6.0译文系列】架构之 --- 使用路由
- 面试题37:两个链表的第一个公共节点
- list.add()存储对象的值的时候应注意
- numpy.random模块中提供啦大量的随机数相关的函数
- IS-IS路由器——level-1 区域间路由
- C#高级学习第五章线程,任务和同步
- 实验二之静态链表