目录
- 一、内容概要
- 二、 配置ubuntu摄像头环境
- 2.1 硬件准备
- 2.2 软件准备
- 三、 完成摄像头标定
- 四、 标定结果运用
- 五、 实验心得
- 参考链接
一、内容概要
- 配置ubuntu摄像头环境
- 进行摄像头标定
二、 配置ubuntu摄像头环境
2.1 硬件准备
1.电脑自带摄像头
或
2.USB外设摄像头
在原系统测试下相机是否可用
没问题
3. 标定板
Ⅰ 购买成品标定板(略贵)
Ⅱ 将标定图案打印在A4纸上 (精度略低)
文件下载地址:
https://gitee.com/liangbo1996/chessboard_27mm
2.2 软件准备
- 安装usb_cam相机驱动
sudo apt-get install ros-noetic-usb-cam
- 安装标定功能包
sudo apt-get install ros-noetic-camera-calibration
- 检测虚拟机相机状态
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在机器人视觉系统中的重要性和实用性,也让我更加深入地了解了摄像头标定的原理和方法。我相信这些经验和收获将对我未来的机器人开发工作产生积极的影响。
参考链接
- https://blog.csdn.net/qq_45990036/article/details/127579251
- https://blog.csdn.net/wakeup_high/article/details/138030786?spm=1001.2014.3001.5502