网站大量收购闲置独家精品文档,联系QQ:2885784924

《鸿蒙机器人编程》10-机器视觉--教案.docx

《鸿蒙机器人编程》10-机器视觉--教案.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

ROS星火计划 从0到1搭建ROS环境 NXROBOExBot

PAGE8

机器视觉初步

机器视觉概述

机器视觉就是用机器代替人眼来做测量和判断。

机器视觉检测系统采用CCD或CMOS照相机将被检测的目标转换成图像信号,传送给专用的图像处理系统。根据像素分布和亮度、颜色等信息,转变成数字化信号。图像处理系统对这些信号进行各种运算来抽取目标的机器视觉特征,如面积、数量、位置、长度。再根据预设的允许度和其他条件输出结果,包括尺寸、角度、个数、合格/不合格、有/无等,实现自动识别功能。

在ROS系统中,我们常用的视觉传感器是USB摄像头,价格低廉并且大家都很熟悉。但是不同于windows,我们可能需要自己安装驱动程序。在驱动程序搞定之后,我们就可以使用image_view包来显示图像,然后进一步提供给其他算法包来做进一步处理。

当然了,和其他传感器不同的是,我们在正式使用摄像头的数据之前需要对它进行标定,以获取摄像头的各项参数,在后面的处理中进行校正。

用ros获取并显示图像显示

当我们把摄像头通过USB与计算机连接之后,下一步便是通过ROS来调取摄像头图像了。

不过,在ROS系统中,USB摄像头并不被原生支持,我们需要自己安装驱动包来获取摄像头图像并发布出去,这样image_view包才能够获取图像并显示出来。

用以下命令编译usb_cam包:

$cd~/你的工作空间/src

$gitclone/bosch-ros-pkg/usb_cam.git

$cd..

$catkin_make

编译界面如下图:

用下列命令运行test脚本后,我们就可以获取并显示图像。

$cd~/catkin_make/

$roslaunchusb_camusb_cam-test.launch

在usb_cam-test.launch这个脚本中,开启了两个节点。

一个是usb_cam自身的节点,它附带了几个参数以确定图像的来源及格式。其中,video_device设定图像来源的设备。在Ubuntu中,可以通过以下命令查看当前系统中可用的视频设备。另一个是image_view节点,用于显示获取到的图像数据。

$ls/dev/|grepvideo

摄像头的标定

由于大部分摄像头经过镜头获取图像之后会产生失真,对我们后期的图像处理造成误差所以,我们需要首先对此摄像头进行标定,以此获取摄像头内参。标定方法主要是使用一种已知的标定图案,通过对不同角度的视图进行辨识来实现。

在这里我们使用经典的棋盘图案来做标定,当然也有其他的标定图案,不过不在我们本次的讨论范围,大家有兴趣可自行查询。

我们使用camera_calibration包进行标定,不过在标定之前我们需要打开摄像头并将图像发布出来,并不需要开启image_view包来显示图像,所以,我们需要精简上一步所使用的launch文件,去掉开启image_view包的脚本。以下为修改后的脚本:

启动上面的脚本之后,执行下面的指令:

$rosruncamera_calibrationcameracalibrator.py--size8x6--square0.036

image:=/usb_cam/image_rawcamera:=/camera--no-service-check

上面的命令中,传递了几个参数,含义如下:

--size 标定使用棋盘大小,棋盘内部角落数量

--square 棋盘中每个棋格的边长,以米为单位

--image 使用的图像topic

--no-service-check 在启动时禁用检查set_camera_info服务

启动后,显示界面如下:

界面正常出现后,需要手持棋盘板在不同的距离不同的角度位置让程序识别棋盘。所以需要确保棋盘全部保持出现在图像中,大致的几个位置如下图(转自官网)显示:

在每个不同位置保持片刻,等棋盘被彩色高亮标示后即可移动。

在移动过程中可以看到窗口右上角的几个进度条在增长,同时颜色也渐渐趋向绿色。

当右侧的calibration按钮亮起之后,表示我们已经采集够了标定所需数据,点击按钮便会自动计算并显示结果。

camera_info

关于ROScameradriver中最难以理解的一点camera_info:

首先我们需要了解camera本身的模型参数,具体分为内参与外参,camera还存在不同程度的畸变,描述这些畸变也有对应的模型及其参数。对于双目相机来说,相机成像平面与等本征矩阵参数也需要记录。

这些信息被ROS统一整合到了一起,放在camera_info里面与image资料一起发布。

最让人难以上手的地方在于,在ROS系统体系中,一般默认cam

您可能关注的文档

文档评论(0)

青柠职教 + 关注
实名认证
服务提供商

从业10年,专注职业教育专业建设,实训室建设等。

1亿VIP精品文档

相关文档