ROS 摄像头标定-camera_calibration

摄像头这种精密仪器对光学器件的要求较高,由于摄像头内部与外部的一些原因,生成的物体图像往往会发生畸变,为了避免数据源造成的误差,需要针对摄像头的参数进行标定。

ROS官方提供了用于双目和单目摄像头标定的功能包—camera_calibration

camera_calibration功能包

首先使用以下命令安装摄像头标定功能包camera_calibration:

sudo apt-get install ros-kinetic-camera-calibration

标定需要用到图所示棋盘格图案的标定靶,可以在本书配套源码中找到(robot_vision/doc/checkerboard.pdf),请你将该标定靶打印出来贴到平面硬纸板上以备使用。

在这里插入图片描述

启动标定程序

一切就绪后准备开始标定摄像头。首先使用以下命令启动USB摄像头:

roslaunch robot_vision usb_cam.launch

然后使用以下命令启动标定程序:

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/im

cameracalibrator.py标定程序需要以下几个输入参数。

1)size:标定棋盘格的内部角点个数,这里使用的棋盘一共有6行,每行有8个内部角点。

2)square:这个参数对应每个棋盘格的边长,单位是米。

3)image和camera:设置摄像头发布的图像话题。

根据使用的摄像头和标定靶棋盘格尺寸,相应修改以上参数,即可启动标定程序。

标定摄像头

标定程序启动成功后,将标定靶放置在摄像头视野范围内,应该可以看到如图所示的图形界面。

在这里插入图片描述
在没有标定成功前,右边的按钮都为灰色,不能点击。为了提高标定的准确性,应该尽量让标定靶出现在摄像头视野范围内的各个区域,界面右上角的进度条会提示标定进度。

1)X:标定靶在摄像头视野中的左右移动。
2)Y:标定靶在摄像头视野中的上下移动。
3)Size:标定靶在摄像头视野中的前后移动。
4)Skew:标定靶在摄像头视野中的倾斜转动。

不断在视野中移动标定靶,直到“CALIBRATE”按钮变色,表示标定程序的参数采集完成。点击“CALIBRATE”按钮,标定程序开始自动计算摄像头的标定参数,这个过程需要等待一段时间,界面可能会变成灰色无响应状态,注意千万不要关闭。

参数计算完成后界面恢复,而且在终端中会有标定结果的显示。

在这里插入图片描述
点击界面中的“SAVE”按钮,标定参数将被保存到默认的文件夹下,并在终端中看到该路径,如图所示。

在这里插入图片描述

点击“COMMIT”按钮,提交数据并退出程序。然后打开/tmp文件夹,就可以看到标定结果的压缩文件calibrationdata.tar.gz;解压该文件后的内容如下 图所示,从中可以找到ost.yaml命名的标定结果文件,将该文件复制出来,重新命名就可以使用了。

在这里插入图片描述

标定Kinect

除了一个RGB摄像头,Kinect还有一个红外深度摄像头,两个摄像头需要分别标定,方法与USB摄像头的标定相同。

启动Kinect后,分别使用以下命令

roslaunch robot_vision freenect.launch
rosrun camera_calibration cameracalibrator.py image:=/camera/rgb/image_raw camera:=/camera/rgb --size 8x6 --square 0.024
rosrun camera_calibration cameracalibrator.py image:=/camera/ir/image_raw camera:=/camera

在这里插入图片描述

加载标定参数的配置文件

标定摄像头生成的配置文件是YAML格式的,可以在启动摄像头的launch文件中进行加载,例如加载摄像头标定文件的robot_vision/launch/usb_cam_with_calibration.launch:

<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="1280" />
<param name="image_height" value="720" />
<param name="pixel_format" value="yuyv" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
<param name="camera_info_url" type="string" value="file://$(find robot_vision)/
camera_calibration.yaml" />
</node>
</launch>

Kinect标定文件的加载方法相同,分别设置RGB摄像头和红外深度摄像头的标定文件即可,详见robot_vision/launch/freenect_with_calibration.launch:

<launch>
<!-- Launch the freenect driver -->
<include file="$(find freenect_launch)/launch/freenect.launch">
<arg name="publish_tf" value="false" />
<!-- use device registration -->
<arg name="depth_registration" value="true" />
<arg name="rgb_processing" value="true" />
<arg name="ir_processing" value="false" />
<arg name="depth_processing" value="false" />
<arg name="depth_registered_processing" value="true" />
<arg name="disparity_processing" value="false" />
<arg name="disparity_registered_processing" value="false" />
<arg name="sw_registered_processing" value="false" /><arg name="hw_registered_processing" value="true" />
<arg name="rgb_camera_info_url"
value="file://$(find robot_vision)/kinect_rgb_calibration.yaml" />
<arg name="depth_camera_info_url"
value="file://$(find robot_vision)/kinect_depth_calibration.yaml" />
</include>
</launch>

启动加载了标定文件的传感器后,可能会看到如下图所示的警告信息。

在这里插入图片描述
这是因为标定文件中的camera_name参数与实际传感器的名称不匹配,按照警告提示的信息进行修改即可。比如根据上图日志中所示的警告,分别将两个标定文件中的camera_name参数修改为“rgb_A70774707163327A”、“depth_A70774707163327A”即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/156976.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop分布式集群搭建教程

目录 前言环境准备一、创建虚拟机二、虚拟机网络配置三、克隆虚拟机四、Linux系统配置五、Hadoop的部署配置六、Hadoop集群的启动Bug解决参考文章 前言 大数据课程需要搭建Hadoop分布式集群&#xff0c;在这里记录一下搭建过程 环境准备 搭建Haoop分布式集群所需环境&#x…

数据结构和算法——线性结构

文章目录 前言线性表顺序表链表合并有序链表反转链表 队列循环队列双端队列资源分配问题 栈共享栈表达式求值递归处理迷宫问题 串串的模式匹配BF算法KMP算法next数组的求解next数组的优化 前言 本文所有代码均在仓库中&#xff0c;这是一个完整的由纯C语言实现的可以存储任意类…

Mybatis--动态sql

XML映射文件&#xff08;简单的SQL用注解&#xff0c;复杂的用xml&#xff09; 规范&#xff1a; XML映射文件的名称和Mapper接口名称一样&#xff08;同包同名&#xff09;注意&#xff1a;不能直接用.创建文件夹,用/分层 xml映射文件的namespace属性为mapper接口全限定名一致…

Python数据分析实战-实现T检验(附源码和实现效果)

实现功能 T 检验&#xff08;Students t-test&#xff09;是一种常用的统计方法&#xff0c;用于比较两个样本之间的均值是否存在显著差异。它可以应用于许多场景&#xff0c;其中一些常见的应用场景包括&#xff1a; A/B 测试&#xff1a;在市场营销和用户体验研究中&#xf…

迁移Linux服务器用户数据(将一个服务器的Linux用户数据迁移到另一个Linux服务器用户的流程)

文章目录 1、打包源Linux服务器用户的数据2、发送源Linux服务器用户的数据3、查看目的服务器用户接受到的数据 1、打包源Linux服务器用户的数据 先来到根目录&#xff0c;再使用tar命令打包数据&#xff1a;tar czvf root.zip.gz ./* 2、发送源Linux服务器用户的数据 在根目…

探秘PMP和六西格玛的不同:哪一个能为你的职业生涯加分?

今天&#xff0c;我们将带你深入了解一项相对冷门但价值不菲的证书——六西格玛黑带。 可能你曾听说过PMP&#xff0c;但相比之下&#xff0c;六西格玛黑带的资源分享似乎较少&#xff0c;考试内容却更为广泛深入。这里&#xff0c;让我为你详细解析这一考试&#xff0c;带你进…

Python操作Hive数据仓库

Python连接Hive 1、Python如何连接Hive&#xff1f;2、Python连接Hive数据仓库 1、Python如何连接Hive&#xff1f; Python连接Hive需要使用Impala查询引擎 由于Hadoop集群节点间使用RPC通信&#xff0c;所以需要配置Thrift依赖环境 Thrift是一个轻量级、跨语言的RPC框架&…

latex如何对.pdf格式的图片实现裁剪

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在使用draw.io进行绘图&#xff0c;导出的时候不知道为什么周围会有留白&#xff0c;比如下图&#xff1a; 在导入latex的时候&#xff0c;会因为两侧的留白导致整张图片缩小。 如果直接进行裁剪.pdf&a…

简要归纳UE5 Lumen全局光照原理

文章目录 一、Jim kajiya老爷子的渲染方程&#xff1a;二、工程上的实时全局光照技术&#xff1a;三、Lumen的解决办法&#xff1a;1、用距离场 Distance Field&#xff08;SDF&#xff09;判断光线和三角面相交&#xff1a;2.表面缓存&#xff08;Surface Cache&#xff09; 四…

《论文阅读:Dataset Condensation with Distribution Matching》

点进去这篇文章的开源地址&#xff0c;才发现这篇文章和DC DSA居然是一个作者&#xff0c;数据浓缩写了三篇论文&#xff0c;第一篇梯度匹配&#xff0c;第二篇数据增强后梯度匹配&#xff0c;第三篇匹配数据分布。DC是匹配浓缩数据和原始数据训练一次后的梯度差&#xff0c;DS…

Apache Shiro 漏洞复现

文章目录 Apache Shiro 漏洞复现1. Apache Shiro 1.2.4 反序列化漏洞1.1 漏洞描述1.2 漏洞原理1.3 漏洞复现1.3.1 环境启动 1.4 漏洞利用1.5 修复方案 Apache Shiro 漏洞复现 链接地址&#xff1a;Vulhub - Docker-Compose file for vulnerability environment 1. Apache Shi…

MySQL中使用函数会使索引失效?

文章目录 1、前置准备2、ChatGPT的答案3、实践证明SQL1SQL2SQL3SQL4SQL5 4、总结 1、前置准备 首先创建我们要测试的库表 CREATE TABLE lianhe_index (id int(11) NOT NULL AUTO_INCREMENT COMMENT id,name varchar(255) DEFAULT NULL,age int(11) DEFAULT NULL,number int(1…

相似与不同:数字孪生和元宇宙的对比

数字孪生和元宇宙是两个备受瞩目的概念&#xff0c;都在数字领域产生了巨大的影响。它们有一些相似之处&#xff0c;但也存在显著的不同。本文将介绍它们的相同点和不同点&#xff0c;以及它们在不同应用领域的前景。 1. 相同点 虚拟性质&#xff1a; 数字孪生和元宇宙都是虚…

AlphaPose Pytorch 代码详解(一):predict

前言 代码地址&#xff1a;AlphaPose-Pytorch版 本文以图像 1.jpg&#xff08;854x480&#xff09;为例对整个预测过程的各个细节进行解读并记录 python demo.py --indir examples/demo --outdir examples/res --save_img1. YOLO 1.1 图像预处理 cv2读取BGR图像 img [480,…

LATR:3D Lane Detection from Monocular Images with Transformer

参考代码&#xff1a;LATR 动机与主要工作&#xff1a; 之前的3D车道线检测算法使用诸如IPM投影、3D anchor加NMS后处理等操作处理车道线检测&#xff0c;但这些操作或多或少会存在一些负面效应。IPM投影对深度估计和相机内外参数精度有要求&#xff0c;anchor的方式需要一些如…

【图像融合】差异的高斯:一种简单有效的通用图像融合方法[用于融合红外和可见光图像、多焦点图像、多模态医学图像和多曝光图像](Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

淘宝价格,淘宝商品优惠券数据接口,淘宝商品销量接口,淘宝商品详情数据接口,淘宝API接口

淘宝价格和商品优惠券数据接口是淘宝平台提供的官方数据接口&#xff0c;通过调用接口&#xff0c;可以获取到淘宝商品的价格信息和优惠券数据。 获取淘宝价格和商品优惠券数据接口的步骤如下&#xff1a; 输入淘宝网址登陆淘宝账号密码。点击获取key和secret。调用获取buyer…

android 与 flutter 之间的通信

文章目录 前言集成 flutter 混合开发android 与 flutter 之间的通信总结 一、前言 因为flutter 具有跨平台的属性&#xff0c;既可以在android上跑&#xff0c;也能在ios 上跑&#xff0c;所以为了节约开发的成本&#xff0c;减少人力&#xff0c;势必就会用到它。然而已有的…

04在命令行中使用Maven命令创建Maven版的Web工程,并将工程部署到服务器的步骤

创建Maven版的Web工程 使用命令生成Web工程 使用mvn archetype:generate命令生成Web工程时&#xff0c;需要使用一个专门生成Web工程骨架的archetype(参照官网看到它的用法) -D表示后面要附加命令的参数&#xff0c;字母D和后面的参数是紧挨着的&#xff0c;中间没有任何其它…

Ceph介绍与部署

Ceph介绍与部署 一、存储基础1.1、单机存储设备1.1.1、单机存储的问题 1.2、商业存储解决方案1.3、分布式存储&#xff08;软件定义的存储 SDS&#xff09;1.3.1、分布式存储的类型 二、Ceph 简介三、Ceph 优势四、Ceph 架构五、Ceph 核心组件5.1、Pool中数据保存方式支持两种类…