ROS摄像头标定

一、内容概要

  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.youkuaiyun.com/qq_45990036/article/details/127579251
  2. https://blog.youkuaiyun.com/wakeup_high/article/details/138030786?spm=1001.2014.3001.5502
<think>嗯,用户现在的问题是在ROS中进行网络摄像头标定,但不想使用标定板。我需要先理解为什么标定通常需要标定板,以及有没有替代方法。 首先,标定板的作用是提供已知的几何图案,帮助计算相机的内参和畸变参数。比如棋盘格的黑白方格有明确的角点,方便算法检测并计算。如果没有标定板,可能需要其他自然特征或者替代图案。 接下来,用户提到的ROS环境,通常使用像`camera_calibration`这样的包,这些包依赖标定板。但用户可能没有物理标定板,或者无法使用。那么有没有其他方法? 我记得有些研究使用自然场景中的特征,比如边缘、纹理或者运动信息来进行标定,但可能在ROS中集成这样的方法比较复杂。或者,用户是否可以使用其他图案代替标准棋盘格?比如打印一张A4纸的方格,但用户可能连这个都不想用。 另外,如果相机本身的畸变较小,或者参数已知,可能可以直接应用预设参数。例如,某些摄像头厂商提供标定数据,用户可以直接在ROS中加载这些参数,而不需要实时标定。查看引用内容,用户提到在`camera_info`话题中已有标定参数,可能通过`camera_info_url`参数来加载已有的文件。 所以可能的解决方案包括:1)使用替代图案生成虚拟标定板;2)使用预先标定的参数;3)利用自然场景特征,但后者在ROS中可能不支持,需要自行开发。 需要检查引用中的信息。引用[1]提到标定后的效果,引用[2]显示如何查看`camera_info`中的参数,引用[3]涉及启动标定的命令。因此,用户可能已经尝试过标准流程,但缺少标定板。 总结可能的步骤:使用替代图案,如打印的棋盘格;或者使用已有参数文件。如果用户没有标定板,可能需要生成虚拟标定板,例如在屏幕上显示,然后用摄像头拍摄。不过ROS标定工具可能需要特定的话题或图像输入,需要确认是否支持。 另外,是否有ROS包支持无标定板的标定?可能需要搜索相关资源,但常见方法还是依赖标定板。因此,建议用户使用屏幕显示的标定图案,或者寻找已有的标定参数。 最终回答应分步骤,建议替代方案,并引用相关引用内容说明如何加载已有参数或调整标定流程。</think>### 分步解决方案 #### 1. **使用屏幕显示的虚拟标定板** 如果无法使用物理标定板,可在屏幕上显示标准棋盘格图案(如OpenCV提供的PDF文件),并通过摄像头拍摄屏幕完成标定。 **操作步骤:** - 下载棋盘格图像(如[A4尺寸棋盘格](https://docs.opencv.org/4.x/pattern.png))并全屏显示。 - 调整摄像头与屏幕的距离和角度,确保棋盘格清晰可见且无反光。 - 启动摄像头节点后,运行标定命令: ```bash rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam ``` - 移动摄像头或棋盘格以覆盖不同区域,直至标定完成[^1][^3]。 #### 2. **使用预设标定参数** 如果摄像头参数已知(如厂商提供),可直接加载到ROS中。 **操作步骤:** - 创建YAML格式标定文件(如`camera_calibration.yaml`),包含内参矩阵和畸变系数: ```yaml image_width: 640 image_height: 480 camera_name: usb_cam camera_matrix: rows: 3 cols: 3 data: [fx, 0, cx, 0, fy, cy, 0, 0, 1] distortion_coefficients: rows: 1 cols: 5 data: [k1, k2, p1, p2, k3] ``` - 在启动摄像头节点时指定参数文件: ```bash roslaunch usb_cam usb_cam-test.launch camera_info_url:=file:///path/to/camera_calibration.yaml ``` - 通过`rostopic echo /usb_cam/camera_info`验证参数是否生效[^2]。 #### 3. **利用自然场景特征(实验性)** 对于无标定板的场景,可使用环境中的直线、对称结构等特征,但需自行开发算法或集成第三方工具(如MATLAB/OpenCV的无标定板方法),ROS暂无官方支持。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值