ROS摄像头标定

目录

  • 一、内容概要
  • 二、 配置ubuntu摄像头环境
    • 2.1 硬件准备
    • 2.2 软件准备
  • 三、 完成摄像头标定
  • 四、 标定结果运用
  • 五、 实验心得
  • 参考链接

一、内容概要

  1. 配置ubuntu摄像头环境
  2. 进行摄像头标定

二、 配置ubuntu摄像头环境

2.1 硬件准备

1.电脑自带摄像头

2.USB外设摄像头
在原系统测试下相机是否可用
在这里插入图片描述
在这里插入图片描述
没问题
3. 标定板
Ⅰ 购买成品标定板(略贵)
Ⅱ 将标定图案打印在A4纸上 (精度略低)
文件下载地址:
https://gitee.com/liangbo1996/chessboard_27mm

2.2 软件准备

  1. 安装usb_cam相机驱动
sudo apt-get install ros-noetic-usb-cam
  1. 安装标定功能包
sudo apt-get install ros-noetic-camera-calibration
  1. 检测虚拟机相机状态
ls ~/dev/video*

在这里插入图片描述

如若无结果则需进行如下配置

关闭虚拟机,进入虚拟机设置
将USB兼容性设置为3.1版本

在这里插入图片描述
启动虚拟机
在移动设备中找到末尾是camera的设备,将其与主机断开
在这里插入图片描述
然后再次输入

ls ~/dev/video*

在这里插入图片描述
环境配置完成
测试一下usb_cam

	roslaunch usb_cam usb_cam-test.launch

成功启动
在这里插入图片描述

三、 完成摄像头标定

首先启动roscore

roscore

然后启动摄像头

rosrun usb_cam usb_cam_node

最后启动摄像头标定
注意!,这段代码里面--size后面的8x5是根据实际情况定的,即x方向和y方向角点数量,我此次标定使用的为8x5,可以看下面成功标定图,上面的彩色点就是角点。(最外层的黑白方块不能算,因为探测不到最外层的角点)。

rosrun camera_calibration cameracalibrator.py --size 8x5 --square 0.02 image:=/usb_cam/image_raw

在这里插入图片描述
成功标定是这样:

在这里插入图片描述
将标定板在摄像头前进行移动后,CALIBRATE按钮会亮起,点击一下后等待系统恢复运行即标定完毕,点击SAVE后即可得到标定数据(/tmp 目录下,可以这样进入:

cd ~/../../tmp/

)
可以看到标定文件:
在这里插入图片描述

四、 标定结果运用

将展示运用标定结果进行摄像头矫正
创建功能包:

在这里插入图片描述
将标定文件解压后,yaml文件放在config里,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>

然后打开yaml文件,找到:
在这里插入图片描述
记住这里的配置信息,前往launch文件把对应词条修改一下

在这里插入图片描述
记得修改包名
在这里插入图片描述

然后运行launch文件

接下来订阅imag_proc:

ROS_NAMESPACE=usb_cam rosrun image_proc image_proc

两个终端打开两个rqt_image_view

rqt_image_view

选择usb_cam/image_raw(原始),/usb_cam/image_rect_color(修复后)
在这里插入图片描述
在这里插入图片描述

最后是对比:
在这里插入图片描述

五、 实验心得

在进行ROS摄像头标定的过程中,我深刻体会到了ROS(Robot Operating System)在机器人视觉系统中的重要性和实用性。以下是我的一些心得体会:

ROS生态系统的便捷性:
ROS为机器人开发者提供了一个强大的生态系统,其中包含了大量的开源工具和库。通过安装ros-noetic-usb-cam和ros-noetic-camera-calibration这两个功能包,我能够快速地搭建起摄像头标定的环境,而无需从头开始编写代码。这种模块化、标准化的开发方式大大提高了开发效率。

硬件与软件的兼容性:
在配置摄像头环境时,我遇到了虚拟机无法识别USB摄像头的问题。通过调整虚拟机的USB兼容性设置和断开与主机的连接,我最终解决了这个问题。这让我意识到在机器人开发中,硬件与软件的兼容性是一个重要而复杂的问题,需要耐心和细心地调试。

标定过程的精确性:
摄像头标定是机器视觉系统中的关键步骤,其精度直接影响到后续图像处理和分析的准确性。通过仔细调整标定板的大小和角点数量,我得到了较为准确的标定结果。这让我深刻体会到了精确标定对于机器人视觉系统的重要性。

ROS社区的支持:
在标定过程中,我参考了ROS社区的大量教程和文档,这些资源对我解决遇到的问题起到了很大的帮助。同时,我也通过ROS论坛和其他开发者进行了交流,共同探讨和解决问题。这让我感受到了ROS社区的强大凝聚力和支持力。

实践中的挑战与收获:
虽然整个标定过程充满了挑战,但我也从中收获了很多。通过实际操作,我更加深入地理解了摄像头标定的原理和方法,也提高了自己的动手能力和解决问题的能力。同时,我也意识到了在机器人开发中,理论知识和实践经验是相辅相成的,需要不断地学习和实践。

总之,这次ROS摄像头标定的经历让我深刻体会到了ROS在机器人视觉系统中的重要性和实用性,也让我更加深入地了解了摄像头标定的原理和方法。我相信这些经验和收获将对我未来的机器人开发工作产生积极的影响。

参考链接

  1. https://blog.csdn.net/qq_45990036/article/details/127579251
  2. https://blog.csdn.net/wakeup_high/article/details/138030786?spm=1001.2014.3001.5502

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

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

相关文章

ASV1000视频监控平台:接入支持JT808标准的设备

目录 一、JT/T 808标准简介 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;标准内容简介 1、消息分类 2、位置信息 3、报警信息 4、车辆控制 5、数据转发 二、在ASV1000上通过JT808添加设备 &#xff08;一&#xff09;登录视频监控平台管理端 &#x…

Hass哈斯数控数据采集网络IP配置设置

机床数据采集&#xff08;MDC&#xff09;允许你使用Q和E命令通过网络接口或选项无线网络从控制系统提取数据。设置143支持该功能&#xff0c;并且指定控制器使用这个数据端口。MDC是一个需要一台附加计算机发送请求&#xff0c;解释说明和存储机床数据的软件功能。这个远程计算…

使用pytorch构建GAN网络并实现FID评估

上一篇文章介绍了GAN的详细理论&#xff0c;只要掌握了GAN&#xff0c;对于后面各种GAN的变形都变得很简单&#xff0c;基础打好了&#xff0c;盖大楼自然就容易了。既然有了理论&#xff0c;实践也是必不可少的&#xff0c;这篇文章将使用mnist数据集来实现简单的GAN网络&…

如何从Mac上的清空垃圾箱中恢复已删除的文件?

Mac用户几乎每天都会删除文件。当您将文档删除到 Mac 垃圾箱时&#xff0c;该文件将被剪切到 Mac 垃圾箱中&#xff0c;并且可以轻松放回原处。但是&#xff0c;在某些情况下&#xff0c;您错误地删除了文档和文件&#xff0c;并在您意识到自己犯了一个大错误之前清空了垃圾箱。…

Advanced RAG 06:生成结果的相关性低? 快用 Query Rewriting 优化技术

编者按&#xff1a;在现实生活中&#xff0c;普通用户很难编写合适的提示词&#xff08;prompt&#xff09;来指示 LLM 完成期望任务。用户提出的 queries 往往存在词汇不准确、缺乏语义信息等问题&#xff0c;导致 LLM 难以理解并生成相关的模型响应。因此&#xff0c;如何优化…

刷代码随想录有感(58):二叉树的最近公共祖先

题干&#xff1a; 代码&#xff1a; class Solution { public:TreeNode* traversal(TreeNode* root, TreeNode* p, TreeNode* q){if(root NULL)return NULL;if(root p || root q)return root;TreeNode* left traversal(root->left, p, q);TreeNode* right traversal(r…

JuiceFS v1.2-beta1,Gateway 升级,多用户场景权限管理更灵活

JuiceFS v1.2-beta1 今天正式发布。在这个版本中&#xff0c;除了进行了大量使用体验优化和 bug 修复外&#xff0c;新增三个特性&#xff1a; Gateway 功能扩展&#xff1a;新增了“身份和访问管理&#xff08;Identity and Access Management&#xff0c;IAM&#xff09;” 与…

泛型编程四:栈、堆,内存管理

文章目录 前言一、栈、堆栈&#xff08;Stack&#xff09;堆&#xff08;Heap&#xff09; 二、static生命期三、heap生命期四、new、delete的作用机制五、动态分配的内存&#xff08;in VC&#xff09;如图&#xff0c;第一列为调试模式下的复数的内存分配&#xff0c;复数有两…

电子合同:纸质合同的未来替代者?

随着科技的迅猛发展&#xff0c;电子合同作为一种新兴的合同形式&#xff0c;逐渐在各行各业中崭露头角。那么&#xff0c;电子合同是否会替代纸质合同&#xff0c;成为未来合同形式的主流呢&#xff1f;本文将就此话题展开探讨。 首先&#xff0c;我们来看电子合同的优势。电…

cookie没有携带的问题

背景&#xff1a; build-model应用在hcs迁移的时候&#xff0c;前、后端各自部署了一个新应用&#xff0c;但是调试时候发现没有cookie&#xff0c;导致鉴权失败&#xff01; 注&#xff1a; 后端通过cookie中的token做鉴权的&#xff0c;前端调用接口的时候&#xff0c;查看&…

SPD1179 电路设计---汽车电机控制设计

概述 SPD1179 是旋智针对汽车应用推出的一颗高度集成的片上系统&#xff08;SOC&#xff09; 微控制器&#xff0c;内置 32 位高性能 ARMCortex-M4F 内核&#xff0c;最高 100MHz 的软件可编程时钟频率&#xff0c; 32KB SRAM&#xff0c; 128KB 嵌入式 FLASH&#xff0c; 1KB …

04-18 周四 为LLM_inference项目配置GitHub CI过程记录

04-18 周四 为LLM_inference项目配置GitHub CI过程记录 时间版本修改人描述2024年4月18日10:30:13V0.1宋全恒新建文档 简介和相关文档 04-15 周一 GitHub仓库CI服务器配置过程文档actions-runner 是托管与GitHub上的仓库&#xff0c;下载最新的客户端程序即可。self hosted r…

多C段的美国站群服务器有什么用途?

多C段的美国站群服务器有什么用途? 多C段的美国站群服务器是一种常见的网络运营策略&#xff0c;其用途主要体现在以下几个方面&#xff1a; 多C段的美国站群服务器有什么用途? 1. 提高站点排名和流量 部署多个站点在不同的C段IP地址上&#xff0c;可以通过不同的IP地址发布…

BGP协议应用:SW1、SW2、SW3、RT1、RT2之间运行BGP协议

8.SW1、SW2、SW3、RT1、RT2之间运行BGP协议,SW1、SW2、RT1 AS号65001、RT2 AS号65002、SW3 AS号65003。 (1)SW1、SW2、SW3、RT1、RT2之间通过Loopback1建立IPv4 BGP邻居。SW1和SW2之间财务通过Loopback2建立IPv4 BGP邻居,SW1和SW2的Loopback2互通采用静态路由。 (2)SW1…

运行一个jar包

目录 传送门前言一、Window环境二、Linux环境1、第一步&#xff1a;环境配置好&#xff0c;安装好jdk2、第二步&#xff1a;打包jar包并上传到Linux服务器3、第三步&#xff1a;运行jar包 三、docker环境1、Linux下安装docker和docker compose2、Dockerfile方式一运行jar包2.1、…

优思学院|HR部门如何制定公司的精益六西格玛培训计划?

在许多企业中&#xff0c;精益六西格玛作为一种提升效率和质量的重要方法论&#xff0c;越来越受到重视。HR部门在推广和实施精益六西格玛培训计划中其实也扮演着关键角色。以下是HR部门可以采取的几个步骤&#xff0c;以有效地制定和实施这样的培训计划。 1. 需求分析 首先&…

人工智能学习+Python的优势

1.人工智能的发展阶段 1.1 强人工智能&#xff1a; 1.2 弱人工智能&#xff1a; 2.符号学习 符号学习的本质就是&#xff1a;规定好的逻辑和顺序&#xff0c;根据这个模板告诉机器接下来需要做什么&#xff0c;遵循if...then原则——>缺点&#xff1a;不能根据新的场景…

本地主机访问服务器的Redis -- 配置 ssh 端口转发

前言 在进行Java开发时&#xff0c;高度的依赖 Windows 上的开发软件 idea &#xff0c;那么我们想访问位于服务器上的 redis 怎么办呢&#xff1f;在平时我们想访问位于服务器上的程序&#xff0c;只需要开放它的端口即可&#xff0c;比如我们创建的网站&#xff0c;比如 tomc…

Go通过CRUD实现学生管理系统

虽然这个项目没有什么含金量&#xff0c;但是可以熟悉go的语法和go开发项目的一般流程 项目结构 项目实现了五个功能&#xff1a; &#xff08;1)增加一个学生 &#xff08;2&#xff09;删除一个学生 &#xff08;3&#xff09;修改一个学生的信息 &#xff08;4&#xf…

基于微信小程序的图书馆预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…