机器视觉介绍
机器视觉概念
机器视觉, 就是用计算机来模拟人的视觉功能,但这并不仅仅是人眼的简单延伸,更重要的是像人脑一样,可以从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、控制等场景。
获取图像信息相对简单,但想让机器人理解图像中千变万化的物品,就难上加难了。
为了解决这一系列复杂的问题,机器视觉也是一个涉猎广泛的交叉学科,横跨人工智能、神经生物学、物理学、计算机科学、图像处理、模式识别等诸多领域。时至今日,在各个领域中,都有大量开发者或组织参与其中,也积累了众多技术,不过依然还有很多问题亟待解决,就像我们对自己大脑的研究也只是冰山一角一样,机器视觉的研究也将会是一个长久的工作。
机器视觉相关的关键技术也有不少,比如视觉图像的采集和信号处理,这个过程主要是通过传感器硬件采集外部光信号的过程,光信号最终会转变成数字电路的信号,便于下一步的处理;类似左边图片中看到的效果,获取图像之后,更重要的是要识别图像中的物体、确定物体的位置、或者检测物品的变化,这就要用到模式识别或者机器学习等技术,这个部分也是当今机器视觉研究的重点。
和人类的两只眼睛不同,机器用于获取图像的传感器种类较为丰富,可以是一个摄像头,也可以是两个摄像头,还可以是三个、四个、很多个摄像头,不仅可以获取颜色信息,还可以通过红外相机获取深度或者能量信息,这可比人眼获取的信息丰富多了,当然,这也会对后期的处理带来不同的计算压力。
在工业领域,机器视觉系统已经被广泛用于自动检验、工件加工、装配自动化以及生产过程控制等工作。随着机器人的快速发展和应用,机器视觉也逐渐应用于农业机器人、AMR物流机器人、服务机器人、无人驾驶汽车等各种机器人,活跃在农场、物流、仓储、交通、医院等多种环境中。
机器视觉流程
人类视觉擅长于对复杂、非结构化的场景进行定性解释,但机器视觉凭借速度、精度和可重复性等优势,非常适合对结构化场景进行定量测量。
一般来讲,典型的机器视觉系统可以分为如图所示的三个部分:图像采集、图像分析和控制输出。
图像采集注重对原始光学信号的采样,是整个视觉系统的传感部分,核心是相机和相关的配件。
其中光源用于照明待检测的物体,并突显其特征,便于让相机能够更好的捕捉图像。光源是影响机器视觉系统成像质量的重要因素,好的光源和照明效果对机器视觉判断影响很大。当前,机器视觉的光源已经突破人眼的可见光范围,其光谱范围跨越红外光(IR)、可见光、紫外光(UV)乃至X射线波段,可实现更精细和更广泛的检测范围,以及特殊成像需求。
相机被喻为机器视觉系统的“眼睛”,承担着图像信息采集的重要任务。图像传感器又是相机的核心元器件,主要有CCD和CMOS两种类型,其工作原理是将相机镜头接收到的光学信号转化成数字信号。选择合适的相机是机器视觉系统设计的重要环节,不仅直接决定了采集图像的质量和速度,同时也与整个系统的运行模式相关。
图像处理系统接收到相机传来的数字图像之后,通过各种软件算法进行图像特征提取、特征分析和数据标定,最后进行判断。这是各种视觉算法研究最为集中的部分,从传统的模式识别算法,到当前热门的各种机器学习方法,都是为了更好的让机器理解环境。
对于人来讲,识别某一个物体是苹果似乎理所当然,但是对于机器人来讲,就需要提取各种各样不同种类、颜色、形状的苹果特征,然后训练得到一个苹果的“模型”,再通过这个模型对实时图像做匹配,从而分析面前这个东西到底是不是苹果。
在机器人系统中,视觉识别的结果最终要和机器人的某些行为绑定,也就是第三个部分——控制输出,包含I/O接口、运动控制、可视化显示等。当图像处理系统完成图像分析后,将判断的结果发给机器人控制系统,接下来机器人完成运动控制。比如视觉识别到了抓取目标的位置,通过IO口控制夹爪完成抓取和放置,过程中识别的结果和运动的状态,都可以在上位机中显示,方便我们监控。
就机器视觉而言,在这三个部分中,图像分析占据了绝对的核心,涉及的方法、使用的各种开源软件或者框架非常多,这也是我们后续开发的重点,TogetherROS中提供了大量的算法、工具和功能支持。
旭日X3派配置
了解了机器视觉的基本原理和流程,相信大家对视觉应用已经充满了期待,我们这就准备开始。
后续课程中,我们将继续在旭日X3派的开发板上,使用TogetherROS实现各种各样的视觉例程,不过我们得先找到一个相机,比如usb相机或者MIPI接口配套的相机模块,然后连接到开发板对应的接口上。
电脑和开发板之前通过网线连接,便于我们查看视觉处理的结果,速度更快。
如果有HDMI屏幕的话,也可以准备好,稍后需要使用的时候插上查看结果,如果没有的话,也没有影响,后续我们会使用一套网络传输工具,通过板卡的IP地址,就可以看到图像处理的实时状态啦。
USB相机图像采集
关于相机的驱动,请大家也再确认一下,这是后续视觉处理的基础。
如果是USB相机的话,可以参考这个过程验证下是否可以顺利看到图像。
# 旭日X3派
$ sudo apt install ros-foxy-usb-cam
$ cd /opt/tros
$ python3 create_soft_link.py --foxy /opt/ros/foxy/ --tros /opt/tros
$ source /opt/tros/local_setup.bash
$ ros2 launch usb_cam demo_launch.py # 修改params.yaml配置文件中的设备号
# PC
$ source /opt/ros/foxy/local_setup.bash
$ ros2 run rqt_image_view rqt_image_view
MIPI相机图像采集
如果使用的是MIPI相机的话,可以参考这个流程驱动相机并显示图像。
# 旭日X3派
$ source /opt/tros/local_setup.bash
$ ros2 run mipi_cam mipi_cam --ros-args -p video_device:=F37 -p image_width:=960 -p image_height:=540
# PC
$ source /opt/ros/foxy/local_setup.bash
$ ros2 run rqt_image_view rqt_image_view
为了提高图像的编码和传输效率,我们建议大家使用MIPI接口的相机,后续应用功能我们也会以该相机为主。