ROS摄像机标定

news2025/1/13 5:53:31

文章目录

  • 一、环境准备
  • 二、摄像头标定
    • 2.1 为什么要标定
    • 2.2 标定前准备
      • 2.2.1 标定板
      • 2.2.2 摄像头调焦
    • 2.3 开始标定
    • 2.4 测试标定结果
  • 总结
  • 参考资料

一、环境准备

安装usb_cam相机驱动
sudo apt-get install ros-noetic-usb-cam
在这里插入图片描述

安装标定功能包
sudo apt-get install ros-noetic-camera-calibration
在这里插入图片描述
usb_cam提供了一个launch文件,可以直接roslaunch运行,打开usb_cam_node 和 image_view节点。launch文件在/opt/ros/noetic/share/usb_cam/launch文件夹下。直接在这个目录打开bash然后运行。执行这个命令:
roslaunch usb_cam usb_cam-test.launch
在这里插入图片描述
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="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="color_format" value="yuv422p" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

二、摄像头标定

2.1 为什么要标定

普通相机成像误差的主要来源有两部分,第一是相机感光元件制造产生的误差,比如成
像单元不是正方形、歪斜等;第二是镜头制造和安装产生的误差,镜头一般存在非线性的径
向畸变。
在对相机成像和三维空间中位置关系对应比较严格的场合(例如尺寸测量、视觉 SLAM等)就需要准确的像素和物体尺寸换算参数,这参数必须通过实验与计算才能得到,求解参数的过程就称之为相机标定。

2.2 标定前准备

2.2.1 标定板

在执行摄像头标定前,需要先准备一块标定板。
标定板有两种获得方法,第一种是采购成品的标定板,A4纸大小的标定板通常价格在300~400的样子。

如果不想采购,可以使用打印机将下面的文件按照1:1打印在A4纸上,然后贴在一块纯平的版上,例如亚克力板。

打印的标定板缺点在于,第一打印机的精度有限,边缘可能会产生模糊,另外就是在粘贴时很难做到极高的平整度,这两项都会对标定结果产生一定的影响,但是优点时便宜易得。

2.2.2 摄像头调焦

标定只针对手动对焦的相机,自动对焦的相机由于焦距变化,难以形成固定的标定参数。
相机在标定前,需要调整好焦距(拧镜头),使成像清晰,并将当前焦距固定住,防止焦距产生变化。

2.3 开始标定

准备标定板,可以使用这个网站生成标准的棋盘标定pdf,可以截图到平板上当成一块板子。

开始标定,bash中输入:
rosrun camera_calibration cameracalibrator.py --size 11x8 --square 0.02 image:=/usb_cam/image_raw
--size是指这个标定板的内角点数量详细说明戳这
--square是指每个小正方形的边长。
运行之后会出现下面这个窗口,然后用你的标定板缓慢各式各样的移动,会发现右边那几个进度条在变化,你要做的就是让这些血条变绿。X表示左右移动,Y表示上下,Size表示远近,Skew表示倾斜
在这里插入图片描述
在这里插入图片描述
全部绿了之后,会发现CALIBRATE按钮变颜色,然后点击,开始无尽的等待。直到控制台出现你的标定信息,就标定好了。如下图:
在这里插入图片描述
测试标定结果,再把标定板拿到镜头,右侧出现了一个数据,叫线性误差,通常这个值小于0.1或者显示acc都可以认为标定结果可用
在这里插入图片描述
除此之外,点击SAVE按钮后在/tmp目录下,出现了一个压缩包,这个压缩包存放了标定结果和图片。其中的.yaml就是标定结果,后续会使用。
在这里插入图片描述
在这里插入图片描述

2.4 测试标定结果

打开你的ros工作目录,在src下创建一个功能包,在这个功能包下创建config和launch目录,config存放刚才的标定结果yaml文件,launch目录存放launch文件,来运行节点。
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="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
    <param name="camera_name" value="my_camera"/>
    <param name="camera_info_url" type="string" value="file://$(find bingda_tutorials)/config/ost.yaml"/>
  </node>
</launch>

重要的是后面两个参数,一个是摄像头名称,你自定义,一个是info_url,写你的yaml文件路径
接下来launch一下:
在这里插入图片描述
使用echo将camera_info话题输出,可以看到摄像头的标定参数已经加载在话题中了
rostopic echo /usb_cam/camera_info
在这里插入图片描述
矫正图像
如果需要使用标定参数矫正图像,可以使用image_proc这个功能包
首先通过apt方式安装
在这里插入图片描述
安装完成后运行它,这里加入ROS_NAMESPACE是由于usb_cam这个功能包中发布的话题都带有了/usb_cam这个命名空间,所以为了保证图像和摄像头参数话题能正常的被image_proc节点接收需要给它加上命名空间/usb_cam
ROS_NAMESPACE=usb_cam rosrun image_proc image_proc
再开启两个rqt_image_view,直接终端输入就可以。
左边是校正了的,右边是原生图像。看不出什么区别,广角下就会比较明显
在这里插入图片描述

总结

在本实验中,操作了在Ubuntu 20.04上安装ROS并使用相机标定包对摄像头进行标定,了解了具体操作过程。通过进行标定,获取摄像头的内部参数和畸变系数,提高测量精度。

参考资料

让他火!!!神级教程

标定材料
标定教程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ERP系统直击模切企业痛点,提升企业供应链效率

随着全球化经济的不断发展&#xff0c;供应链管理越来越成为企业经营的核心竞争力之一。因此&#xff0c;越来越多的企业正在积极寻找转型升级之路&#xff0c;对于生产制造模切企业来说&#xff0c;ERP系统尤其关键。 尽管ERP系统解决了企业资源计划的问题&#xff0c;但在模…

【论文速读】|大语言模型(LLM)智能体可以自主利用1-day漏洞

本次分享论文&#xff1a; LLM Agents can Autonomously Exploit One-day Vulnerabilities 基本信息 原文作者&#xff1a;Richard Fang, Rohan Bindu, Akul Gupta, Daniel Kang 作者单位&#xff1a;无详细信息提供 关键词&#xff1a;大语言模型, 网络安全, 1-day漏洞, …

粤嵌—2024/4/24—删除有序数组中的重复项 ||

代码实现&#xff1a; 方法一&#xff1a;双指针 int removeDuplicates(int *nums, int numsSize) {int l 0, r 0;while (r < numsSize) {if (r > 1 && nums[r] nums[l - 1] && nums[r] nums[l - 2]) {r;} else {nums[l] nums[r];l;r;}}return l; }…

【面试题】java后端开发实习(含答案)

java后端开发实习生-常见面试题 1&#xff09;JDK,JRE,JVM的关系 JDK JRE java开发工具JRE JVM java核心类库 2&#xff09;String类的常用方法 1.关于字符串获取方面 length 获取长度charAt 获取指定索引的字符indexOf 获取字符所在的索引位置lastIndexOf 获取字符所在…

电脑自带dll修复在哪里打开?教你如何快速修复dll丢失问题

MSVCP140.dll文件作为Windows操作系统中不可或缺的一环&#xff0c;对众多基于C编译的应用程序的正常运行起着关键作用。在我深入研究和处理与该文件相关问题的过程中&#xff0c;积累了丰富的认知和实践经验。以下是我对MSVCP140.dll文件的总体介绍以及针对其丢失问题的解决方…

数据结构 - 链表详解(二)—— 带头双向循环链表

链表的介绍 链表的结构一共有八种&#xff1a;带头单向循环链表、带头单向非循环链表、带头双向循环链表、带头双向非循环链表、无头单向循环链表、无头单向非循环链表、无头双向循环链表、无头双向非循环链表。 今天我们来详解带头双向循环链表 带头双向循环链表是一种数据结…

融合公式调权思考

一般在多目标任务任务中有加法公式、乘法公式、混合加法、非线性公式等&#xff0c;通过业务特性和应用场景选择不同方式&#xff0c;线上调参也有很多方案&#xff0c;自动寻参&#xff08;成本较高&#xff0c;比如进化算法、网格搜索、随机搜索、贝叶斯优化、自动调参工具如…

南宁建筑模板供应商:贵港市能强优品木业有限公司

贵港市能强优品木业有限公司&#xff0c;作为南宁地区知名的建筑模板生产厂家&#xff0c;拥有25年的丰富生产经验。该公司生产的建筑覆膜板以其稳定的质量和高周转次数而闻名&#xff0c;多年来参与了国内各地区众多大型建筑项目&#xff0c;并获得广大客户的一致好评。 质量稳…

【前端】vue数组去重的3种方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数组去重说明二、Vue数组去重的3种方法 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发工具&#xff0c;本文…

昆明航空x-s3-s4e算法分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 这里只是我分析的分析过程,以及一些重要点的记录…

比亚迪海洋网再添实力爆款,海豹06DM-i、OCEAN-M、海狮07EV登陆北京车展

4月25日&#xff0c;比亚迪海洋网携海豹06DM-i、OCEAN-M、海狮07EV一齐亮相北京车展&#xff0c;引发关注热潮。其中&#xff0c;海洋网全新中型轿车海豹06DM-i价格区间12万-15万元&#xff0c;将于今年二季度上市&#xff1b;行业首款两厢后驱纯电钢炮OCEAN-M价格区间15万-20万…

【从浅学到熟知Linux】基础IO第四弹=>动静态库(含第三方动静态的使用、自制动静态库、关于动静态库加载调用原理)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 静态库静态库的介绍及使用方法自制静态库使用第三方提供的静态库 动态库动态库的介绍及使用方法自制动态库…

react之初识state

第二章 - 添加交互 State: 组件的记忆 组件通常需要根据交互更改屏幕上显示的内容。输入表单应该更新输入字段&#xff0c;单击轮播图上的“下一个”应该更改显示的图片&#xff0c;单击“购买”应该将商品放入购物车。组件需要“记住”某些东西&#xff1a;当前输入值、当前…

Linux操作系统的安装与配置

目录 (1)实验目的&#xff1a; (2)实验内容&#xff1a; (3)实验原理&#xff1a; (4)实验步骤&#xff1a; 1.先下载vmware workstation pro软件&#xff0c;下载地址:https://www.vmware.com/products/workstation-pr o/workstation-pro-evaluation.html 2.下载完成后&…

使用 pytorch训练自己的图片分类模型

如何自己训练一个图片分类模型&#xff0c;如果一切从头开始&#xff0c;对于一般公司或个人基本是难以实现的。其实&#xff0c;我们可以利用一个现有的图片分类模型&#xff0c;加上新的分类&#xff0c;这种方式叫做迁移学习&#xff0c;就是把现有的模式知识&#xff0c;转…

重要提醒!别再这样搭建帮助中心系统了

你们有没有这样的经历呢&#xff1f;当你使用某产品或服务时遇到问题&#xff0c;打开产品或服务的帮助中心&#xff0c;但界面设计太复杂&#xff0c;内容搜出来的内容多但是混乱不一致。或者更糟糕的是&#xff0c;帮助中心的界面设计看得人眼花缭乱。 所以&#xff0c;反思一…

全长直线度的检查方法和设备

关键字:全长直线度, 直线度测量仪,直线度测量机,直线度检测,直线度检测设备, 全长直线度的检测是确保机械部件、导轨、机床工作台等在全长范围内直线运动精度的重要手段。以下是一些常用的全长直线度检测方法和设备&#xff1a; --------直角尺和水平仪--------&#xff1a;…

bit、进制、位、时钟(窗口)、OSI七层网络模型、协议、各种码

1.bit与进制 &#xff08;个人理解&#xff0c;具体电路是非常复杂的&#xff09; 物理层数据流&#xff0c;bit表示物理层数据传输单位&#xff0c; 一个电路当中&#xff0c;通过通断来表示数字1和0 两个电路要通讯&#xff0c;至少要两根线&#xff0c;一根作为电势参照…

浓眉大眼的Apple开源OpenELM模型;IDM-VTON试衣抱抱脸免费使用;先进的语音技术,能够轻松克隆任何人的声音

✨ 1: openelm OpenELM是苹果机器学习研究团队发布的高效开源语言模型家族 OpenELM是苹果机器学习研究团队开发的一种高效的语言模型&#xff0c;旨在推动开放研究、确保结果的可信赖性、允许对数据和模型偏见以及潜在风险进行调查。其特色在于采用了一种分层缩放策略&#x…

定时器介绍

定时器简介 一、周期定时功能二、PWM功能三、脉冲捕获四、事件计数五、扩展触发功能 一、周期定时功能 定时器的时钟为所选时钟源LRC、OSC、HRC、PLL通过定时器内的预分频器TMRDIV分频得到。 二、PWM功能 包括向上、下、中央计数方式&#xff0c;以向上计数为例计数和引脚产生…