ROS标定海康威视摄像头

ROS视摄像头标定----海康威视

引言:

​ 摄像头标定是为了确保视觉系统能够准确反映现实世界中的对象,并消除图像中的畸变效果。在本实验中,我们使用了ROS中的功能包进行摄像头标定。标定的原理包括畸变校正和摄像头参数估计。通过移动标定板并捕获不同角度和距离的图像,我们可以获取摄像头的内参和外参。这些参数将使得图像处理和三维构建更加准确和可靠。通过本实验,我们将深入了解标定的流程,并熟悉使用ROS功能包进行标定的方法。这将为我们提供可靠的摄像头数据,为后续的机器人视觉任务奠定基础。

希望你在本次学习过后,能够有一定的收获!!!

推荐歌曲—不在联系-程响

​ 冲啊!!!! ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶

文章目录

  • ROS视摄像头标定----海康威视
    • 一、实验前言
    • 二、准备工作
      • 实验器材
      • 实验环境
    • 三、安装功能包
    • 四、标定流程
    • 五、心得总结

一、实验前言

在进行相关的实验之前,让我们先来了解一下相关的内容!!!

为什么要进行标定

  1. 准确性: 通过标定摄像头,可以确保视觉系统捕获的图像准确反映现实世界中的对象。这对于机器人的导航、物体识别和操作等任务至关重要。
  2. 畸变校正: 几乎所有的摄像头镜头都会引入某种形式的畸变,特别是广角镜头。畸变会使得图像呈现出凹凸不平的效果,通过标定过程可以识别并校正这种畸变。
  3. 世界坐标系映射: 在进行物体抓取或场景理解时,必须将图像坐标转换为现实世界的三维坐标。标定过程能够建立图像像素与实际物理世界坐标之间的关系。

标定的原理

视摄像头标定的原理主要涉及两大部分:畸变校正和摄像头参数估计。

  1. 畸变校正: 摄像头镜头畸变主要分为径向畸变和切向畸变。

    • 径向畸变是最常见的一种畸变类型,随着离镜头中心的距离增加变得越来越显著,主要表现为图像的拉伸或压缩。
    • 切向畸变通常发生因为摄像头镜片没有完全平行于成像平面,造成的图像位置偏移。

    畸变参数的估算通过标定过程进行,使用这些参数,可以准确地校正图像,消除畸变效果。

  2. 摄像头参数估计: 主要分为内参和外参。

    • 内参包括焦距(f)、主点坐标(c_x,c_y)以及畸变系数,这些参数反映了摄像头自身特性。
    • 外参反映了摄像头相对于某个世界坐标系的位置和方向。外参对于确定摄像头视角、进行多摄像头系统同步和世界坐标系映射尤为重要。

标定过程

ROS典型的视摄像头标定过程使用棋盘格标定板,捕获不同角度和距离的棋盘格图像,利用这些图像计算摄像头的内外参数。通过这一过程,可以完成摄像头的标定,进而用于准确地图像处理和三维构建。

综上所述,摄像头标定是确保视觉系统在实际应用中发挥出良好性能的基础。正确的标定过程可以显著提升机器人视觉任务的准确度和可靠性。

接下来然我们进行相应的实验内容。

二、准备工作

实验器材

  1. 一个摄像头–啥摄像头都可以,只要对应的电脑能够读取(我这边采用海康威视
  2. 一台可以开启并且正常运行的电脑
  3. 一个标定板 (我这边就拿手机放标定板图片作为标定目标)

如为对应的实验器材图片

  • 海康威视摄像头

    在这里插入图片描述

  • 标定板图片

    在这里插入图片描述

实验环境

  1. ROS版本 —> Melodic Morenia
  2. ubuntu版本—> 18.04 LTS

三、安装功能包

在ROS中安装camera_calibration功能包是非常简单的。可以通过以下步骤来安装camera_calibration功能包:

  1. 打开终端窗口。
  2. 输入以下命令以更新软件包列表:
   sudo apt-get update
  1. 然后,输入以下命令以安装camera_calibration功能包:
   sudo apt-get install ros-melodic-camera-calibration
  1. 系统将提示您输入密码以进行安装。输入密码并按下Enter键。

  2. 系统将自动下载并安装camera_calibration功能包以及其相关依赖项。请耐心等待安装完成。

安装完成后,就可以在ROS中使用camera_calibration功能包进行相机标定实验。

并且我们也可以阅相关文档或实验报告,按照给定的指导进行后续操作和使用camera_calibration功能包进行相机标定。

就比如安装完后,我们可以进行摄像头的测试,检测摄像头是否正确连接对应的功能包是否安装正确

  1. 启动ROS

    roscore
    
  2. 启动摄像头驱动节点:

    roslaunch usb_cam usb_cam-test.launch
    

    在这里插入图片描述

  3. 查看话题

    rostopic list  #列出 topic 确保相机正在通过ROS发布图像
    ———————输出—————————
    /image_view/output
    /image_view/parameter_descriptions
    /image_view/parameter_updates
    /rosout
    /rosout_agg
    /usb_cam/camera_info
    /usb_cam/image_raw
    /usb_cam/image_raw/compressed
    /usb_cam/image_raw/compressed/parameter_descriptions
    /usb_cam/image_raw/compressed/parameter_updates
    /usb_cam/image_raw/compressedDepth
    /usb_cam/image_raw/compressedDepth/parameter_descriptions
    /usb_cam/image_raw/compressedDepth/parameter_updates
    /usb_cam/image_raw/theora
    /usb_cam/image_raw/theora/parameter_descriptions
    /usb_cam/image_raw/theora/parameter_updates                        
    

四、标定流程

  1. 启动摄像头驱动节点:

    rosrun usb_cam usb_cam_node
    roslaunch usb_cam usb_cam-test.launch
    
  2. 查看图像话题是否发布:

rostopic list  #列出 topic 确保相机正在通过ROS发布图像

在这里插入图片描述

  1. 新开一个终端,运行标定节点:
rosrun camera_calibration cameracalibrator.py --size 7x9 --square 0.1 image:=/usb_cam/image_raw camera:=/head_camera --no-service-check

此命令运行标定结点的python脚本,其中 :
(1)–size 7x9 为棋盘内部角点的个数,方格几列几行(需要减1),比如我的标定板方格是8X10,则siez为7x9。
(2)–square 0.1为每个棋盘格的边长
(3)image:=/usb_cam/image_raw 为当前订阅的图像来自名为/usb_cam/image_raw的topic
(4)camera:=/head_camera为摄像机名(我试过写camera:=/camera也可以,目前还不知道是什么原因…)
(5)加上–no-service-check是因为一开始运行后出现下面的错误,参考官网加上此参数后就可正常显示:

('Waiting for service', '/camera/set_camera_info', '...')
Service not found

这将打开标定窗口,如下图所示:

在这里插入图片描述

  1. 移动标定板:

为了达到良好的标定效果,需要在摄像机周围移动标定板,并完成以下基本需求:
(1)移动标定板到画面的最左、右,最上、下方。
(2)移动标定板到视野的最近和最远处。
(3)移动标定板使其充满整个画面。
(4)保持标定板倾斜状态并使其移动到画面的最左、右,最上、下方 。
当标定板移动到画面的最左、右方时,此时,窗口的x会达到最小或满值。同理,y指示标定板的在画面的上下位置,size表示标定板在视野中的距离,也可以理解为标定板离摄像头的远近。skew为标定板在视野中的倾斜位置。每次移动之后,请保持标定板不动直到窗口出现高亮提示。
直到条形变为绿色。当calibration按钮亮起时,代表已经有足够的数据进行摄像头的标定,此时请按下calibration并等待一分钟左右,标定界面会变成灰色,无法进行操作,属于正常情况。

在这里插入图片描述

  1. 获得标定结果:
    在标定完成后,终端会输出校正结果。如下所示:
    在这里插入图片描述

如下为对应的字段解析

  • distortion为畸变系数矩阵。
  • camera matrix:摄像头的内部参数矩阵
  • distortion:畸变系数矩阵
  • rectification:矫正矩阵,一般为单位阵
  • projection:外部世界坐标到像平面的投影矩阵
  • K:相机内参矩阵
  1. 保存查看结果

    点击SAVE按钮。

    如果对标定结果满意,点击COMMIT按钮将结果保存到默认文件夹
    并且我们可以将它修改为对应的yaml文件,便于以后使用

    在这里插入图片描述

五、心得总结

通过本次实验,我对ROS视摄像头标定的过程有了更深刻的理解和实践经验。以下是我的一些心得和总结:

  1. 理论与实践相结合:在理论学习中了解到的标定原理,如畸变校正和摄像头参数估计,在实践操作中得到了具体应用。亲手进行标定过程,使我能够更直观地理解参数如何影响图像质量,并实际观察到校正畸变后图像的改善。
  2. 细节至关重要:实验过程中,我认识到了准确操作和细节处理的重要性。如确保标定板的清晰度、多角度和多位置的捕捉对提高标定精度有显著影响。此外,学会解读标定过程中的图形界面反馈,以及如何通过这些反馈改善数据采集,是成功标定的关键。
  3. 实验环境的重要性:良好的环境条件对于实验结果具有一定影响。例如,稳定的照明可以减少图像中的噪声,并提高角点检测的准确性。
  4. 耐心与仔细观察:在标定过程中,一定要保持耐心。多次调整标定板至不同位置和角度直到所有指示条都变为绿色,才能确保收集到足够用于计算的数据点。

最后感谢大佬友情链接:

  • ROS摄像头标定_rosrun camera_calibration cameracalibrator.py-CSDN博客

  • ROS下采用camera_calibration进行单目相机标定_rosrun camera_calibration cameracalibrator.py-CSDN博客

  • 基于ros的机器视觉–摄像头标定_sudo apt-get install ros-kinetic-camera-calibratio-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java 创建和请求sse服务

主要依赖 <!--spring-boot父工程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version></parent><dependency><gro…

SAP采购订单-条件类型-配置开发步骤

由于采购业务变更&#xff0c;需要创建新的价格类型&#xff0c;并添加新的计算逻辑计算。首先在例程&#xff08;VOFM&#xff09;中创建计算逻辑&#xff0c;然后在系统配置&#xff08;SPRO&#xff09;中找到配置点&#xff0c;创建新的条件类型‘ZMM00’,创建定价过程‘ZM…

算法-动态规划专题

文章目录 前言 : 动态规划简述1 . 斐波那契模型1.1 泰波那契数列1.2 最小花费爬楼梯1.3 解码方法 前言 : 动态规划简述 动态规划在当前我们的理解下,其实就是一种变相的递归,我们查看一些资料也可以知道,动态规划其实属于递归的一个分支,通过把递归问题开辟的栈帧通过一定的手…

模拟信号的离散化

本文介绍模拟信号的离散化。 1.采样定理 定义&#xff1a;若想重建输入的模拟信号&#xff0c;采样频率必须大于等于输入模拟信号最高频率的2倍&#xff0c;即&#xff1a; 其中&#xff0c;为采样频率&#xff0c;为输入模拟信号最高频率 否则&#xff0c;信号会发生混叠 2…

榕城·江上图三居装修攻略,硬装费用18万。福州中宅装饰,福州装修

设计亮点 **方案分析:** 整体墙面采用纯白色为主&#xff0c;搭配木质元素设计&#xff0c;室内铺设浅色木地板。客厅区域设计了一个嵌入式工作区&#xff0c;满足日常办公需求。餐厅、走廊和卧室充分利用每一处空间&#xff0c;扩大收纳空间。 **改造方案:** 1. 采用白色和原木…

Emby for Mac 1.9.9中文激活永久使用(多媒体影音库)

Emby 是一款流媒体服务器软件&#xff0c;可以用于在不同设备上共享音乐、电影、电视节目和照片等多媒体资源。用户可以将自己的媒体文件添加到Emby服务器中&#xff0c;并通过网络将它们发送到其他设备&#xff0c;如电视、手机、平板电脑等。 Emby for Mac 1.9.9中文激活下载…

Linux多进程(三) 信号信号集与统一事件源

信号是由用户、系统或者进程发送给目标进程的信息&#xff0c;以通知目标进程某个状态的改变或系统异常。Linux信号可由如下条件产生&#xff1a; 对于前台进程&#xff0c;用户可以通过输入特殊的终端字符来给它发送信号。比如输入CtrlC通常会给进程发送一个中断信号。系统异…

LeetCode:51. N 皇后

leetCode51.N皇后 题解分析 代码 class Solution { public:int n;vector<vector<string>> ans;vector<string> path;vector<bool> col, dg,udg;vector<vector<string>> solveNQueens(int _n) {n _n;col vector<bool> (n);dg …

如何在阿里云快速配置自动定时重启ECS云服务器?

背景 无论是电子商务、在线教育、游戏&#xff0c;还是流媒体等业务&#xff0c;服务器的稳定运行都是至关重要的。然而&#xff0c;在实际运行中&#xff0c;我们可能会遇到这样一些场景&#xff1a; 系统更新&#xff1a;一些操作系统或者软件的更新可能需要重启服务器才能…

政企版 WPS Pro 专业版注册安装教程

政企版 WPS Pro 专业版安装及激活步骤 第 1 步&#xff1a;下载压缩包&#xff08;内含注册码&#xff09;【无解压密码】。 第 2 步&#xff1a;解压缩后&#xff0c;运行 exe 文件&#xff0c;默认步骤安装即可。 第 3 步&#xff1a;安装完成后&#xff0c;新建一个 Word …

【Camera Sensor Driver笔记】五、点亮指南之Actuator配置

<slaveInfo> actuatorName dw9714v dirver IC 型号 slaveAddress 0x18 i2c write address i2cFrequencyMode FAST i2c 操作频率(400KHz) actuatorType VCM/BIVCM 马达类型 BIVCM&#xff08;中置马达&#xff…

Andorid进程间通信之 UNIX SOCKET

1&#xff0c;什么是UNIX SOCKET UNIX SOCKET&#xff0c;域套接字&#xff0c;UNIX SOCKET可用于同一台设备进程间通信&#xff0c;它不需要经过网络协议栈&#xff0c;不需要打包拆包、计算校验和、维护序列号应答等&#xff0c;只需要将数据从一个进程复制到另一个进程&…

WPS-EXCEL:快速删除多个线条对象

问题图 我需要将线条快速删除 方法一:使用定位对象功能 使用定位功能&#xff1a;按Ctrl G打开定位对话框。在对话框中&#xff0c;点击“定位条件”。 定位对象&#xff1a;在定位条件对话框中&#xff0c;勾选“对象”选项&#xff0c;然后点击“确定”。这样&#xff0c;…

git忽略文件配置 !

.gitignore中!表示取反 注意&#xff0c;如果父目录被排除&#xff0c;则父目录下的子目录也会被排除&#xff0c;此时对父目录下的子目录取反也不会生效&#xff0c;比如存在目录结构&#xff0c;再.gitignore目录下配置的 /*&#xff08;排除所有文件&#xff09;&#xff0c…

探索 Python 的动态类型系统:变量引用、不可变性及高效内存管理与垃圾回收机制的深入分析

文章目录 1. 动态类型及其内存管理解析1.1 变量与对象的引用关系1.2 对象的不可变性和内存地址的变化 2. 垃圾回收与内存优化策略2.1 动态内存分配的基础2.2 Python 的垃圾回收 Python作为一种流行的高级编程语言&#xff0c;以其代码的易读性和简洁性著称。尤其是它的动态类型…

U盘无法正常格式化?教你一个强力的办法

前言 电脑格式化U盘或者移动硬盘的操作&#xff0c;相信各位小伙伴都是有一定经历的。 如果设备正常&#xff0c;那么进入到【此电脑】&#xff0c;在对应的分区点击【鼠标右键】-【格式化】就可以把对应的存储设备恢复到初始状态。 但凡事都会有例外&#xff0c;比如在格式化…

SKF 与KISSSOFT的连接

SKF 与KISSSOFT的连接 HEDZER TILLEMA&#xff0c;荷兰SKF B.V.产品线经理 最近&#xff08;2019年&#xff09;&#xff0c;瑞典滚动轴承制造商斯凯孚&#xff08;SKF&#xff09;和瑞士齿轮箱设计软件开发商KISSsoft已将斯凯孚的轴承计算服务整合到KISSsoft的软件中。借助 K…

分布式技术在文本摘要生成中的应用

摘要 自然语言处理首先要应对的是如何表示文本以供机器处理&#xff0c;随着网络技术的发展和信息的公开&#xff0c;因特网上可供访问的数字文档成爆炸式的增长&#xff0c;文本摘要生成逐渐成为了自然语言处理领域的重要研究课题。本文主要介绍了分布式技术在文本摘要生成中…

软件工程中的耦合和内聚

耦合 在软件工程中&#xff0c;耦合是一个重要的概念&#xff0c;用于描述模块或组件之间的相互依赖程度。 从非直接耦合到内容耦合的耦合性依次升高&#xff0c;所以非直接耦合是我们最想见到的结果&#xff0c;内容耦合是我们最不想见到的结果。 非直接耦合数据耦合标记耦…

开源数据集分享———猫脸码客

猫脸码客作为一个专注于开源数据集分享的公众号&#xff0c;致力于为广大用户提供丰富、优质的数据资源。我们精心筛选和整理各类开源数据集&#xff0c;涵盖机器学习、深度学习、自然语言处理等多个领域&#xff0c;以满足不同用户的需求。 (https://img-blog.csdnimg.cn/d98…