回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

行空板无人驾驶系列课程 第12课:智能视觉导航机器人 简单

头像 zoey不种土豆 2025.09.23 38 0

在智能机器人技术中,视觉识别和自主导航是实现智能化操作的关键。本课程将带领学生探索如何通过摄像头进行图像采集与处理,实现基于视觉的自动巡线功能。通过操控行空板控制的Maxbot小车,学生将学习如何利用摄像头识别地面线条、提取路径特征,并根据这些信息控制小车的运动,使其能够沿着预定的路径精准行驶。

第18课 智能视觉导航机器人189.png

 

任务目标

小车启动后,USB摄像头开始采集图像数据。对采集到的图像进行处理,提取巡线路线的特征,根据图像处理的结果,生成相应的控制指令,实现小车沿巡线轨迹,精准自主移动。

第18课 智能视觉导航机器人279.png

知识点

1.掌握视觉巡线的方法

2.认识质心算法

3.了解图像二值化的相关知识

4.了解图像处理和控制算法

 

材料清单

硬件清单

b2280950a6faccc2c298789bca00a192.png

 

软件使用:Mind+编程软件

下载地址:https://mindplus.cc/

第18课 智能视觉导航机器人479.png

 

课前准备  环境设置

在开始正式学习之前,我们需要对行空板进行一些基础准备,确保系统和环境设置都正确。

具体步骤,请参考:行空板无人驾驶系列课程 第一课 课前准备 部分内容。

 

动手实践

本项目旨在帮助学生掌握基本的图像采集与处理技术,并学会如何将图像数据转化为控制信号,以驱动小车实现路径跟踪。通过以下两个任务,学生将逐步学习如何利用图像处理技术实现自动导航和控制。

任务一:图像采集与处理

学生将学习如何使用摄像头进行实时图像采集,并将图像转换为适合处理的格式。学生将掌握调整图像大小、转换颜色空间(如从BGR到HSV),以及应用颜色过滤技术提取黑色线条。

任务二:路径跟踪与控制

基于任务一中获取的图像数据,分析图像中的路径特征,进行实时的控制决策。学习如何通过计算路径的“质心”并与图像中心进行比较,判断小车当前的行驶方向。通过调整电机控制信号,小车将能够纠正其运动轨迹,确保沿着巡线路径精确行驶。

 

 

任务一:图像采集与处理

1.硬件连接

使用Type-C转A数据线,将USB音频模块与行空板M10连接,然后再使用Type-C转A线将摄像头连接在音频模块上。

注意:

①这个项目中,只用到摄像头,可以只连接摄像头。

②为了实现精准巡线,建议拆除将夹持器。

第18课 智能视觉导航机器人984.png

2.软件准备

(1)打开Mind+:按照下面的图示完成软件准备工作。

第18课 智能视觉导航机器人1043.png

 

(2)添加官方库:点击“扩展”,在“官方库”中找到“OpenCV”,并完成添加。

第18课 智能视觉导航机器人1110.png

(3)添加用户库:点击“扩展”,在“用户库”中找到“numpy”、“OpenCV_maxbot”、“Maxbot行空板电机驱动”,并完成添加。

第18课 智能视觉导航机器人1208.png

3.编写程序

(1)图像捕捉与预处理

通过摄像头实时捕获图像,使用“对象名 初始化 号摄像头并设置帧缓冲”指令,创建一个视频捕获对象“cap”,并初始化摄像头的编号为0。使用“创建窗口winname并设置为全屏”指令,在屏幕上创建一个名为winname的窗口,并将窗口设置为全屏模式,以便将摄像头中的视频流全屏显示在行空板屏幕上。

第18课 智能视觉导航机器人1398.png

接下来,使用“从VideoCapture对象vd中抓取下一帧grab以及状态ret”指令,从捕获的视频流中抓取一帧图像。抓取图片后,需要使用“如果……那么执行”指令与“逻辑运算符 =”指令,判断状态ret的值是否True(判断读取帧是否成功)。

第18课 智能视觉导航机器人1550.png

捕获图像成功后,使用“对象名 用opencv将图片 裁剪为宽 高 ”指令,将该图像进行裁剪,裁剪为宽240,高320的图像。

第18课 智能视觉导航机器人1642.png

对图像进行颜色空间转换,使用“对象名 将图片 转换为HSV格式”指令,将摄像头捕获的图像img从BGR颜色空间转换为HSV颜色空间。

第18课 智能视觉导航机器人1738.png

新建“变量mask”,用于生成黑色区域的掩模。使用“提取图片 的范围内像素 范围下限 范围上限 并进行形态学去噪”指令,通过设定范围上限和范围下限的阈值,提取图像中符合指令颜色范围的区域,并将该区域的值赋值给“变量mask”。范围下限与范围上限,使用“创建Numpy数组 ”指令,创建数组,设置下限为“[0,0,0]”,上限为“[180,255,100]”。

[0,0,0]:表示黑色的低端范围,色调(Hue)为 0,饱和度(Saturation)和明度(Value)都为 0。

[180, 255, 100]:表示黑色的高端范围,色调为 180(整个色调范围),饱和度和明度为较高的值。

第18课 智能视觉导航机器人2062.png
第18课 智能视觉导航机器人2091.png

(2)定义感兴趣的区域

接下来,我们先来分析一下,图像中,哪一部分区域是我们感兴趣要保留的。将图片平均分成12份,下图蓝色区域框选出来的位置,就是对我们项目有用的图像(选择一个只有线条且与小车位置最近的区域)。

注意:定义感兴趣区域的方法,可以查看“知识园地”。

第18课 智能视觉导航机器人2249.png

如何才能获取感兴趣的区域呢?首先,使用“获取图片 的高度 和宽度 ”指令,获取掩模图片的高(h)和宽(w)。

第18课 智能视觉导航机器人2333.png

知道图像的高和宽之后,使用“对象名 对对象 进行矩形遮罩,顶点坐标()()()()”指令,对掩模图像通过确认4个顶点后,定义一个四边形区域(感兴趣的区域)。

注意:在定义感兴趣的区域时,确保该区域的四个顶点不能形成交叉点,这意味着需要确保所选区域是一个凸形状或矩形,而不是一个不规则或自交的多边形。这样可以保证后续的图像处理和计算能够准确地识别和提取感兴趣的部分。

第18课 智能视觉导航机器人2545.png

(3)轮廓分析与质心计算

新建“列表center”,并在“循环执行”程序中初始化列表的值为[1,1],列表中的第一个值,代表质心x坐标,第二个值代表质心y坐标。然后使用“列表 设置索引 的值为 ”指令,将质心的x坐标设为img.shape[1]//2,也可以直接设置为120(由于我们知道图片宽为240,那图片的中轴线x坐标就应该为120)。

第18课 智能视觉导航机器人2743.png

知道质心坐标后,需要新建“变量centerx”,并在“Python主程序开始”下,初始化变量的值为0。这个变量,是用来获取质心坐标到中轴线的偏移量。

注意:偏移量是一个绝对值。

第18课 智能视觉导航机器人2861.png

轮廓分析和质心算法的程序是封在“返回图片 质心的坐标 和横坐标偏移量 ”指令中的,这里我们只需要填写质心坐标和偏移量就可以了。

第18课 智能视觉导航机器人2954.png

(4)控制判断与输出

当我们计算出质心坐标和偏移量后,如何才能判断质心点在左侧还是在右侧呢?可以通过判断质心点x坐标与中轴线的位置来判断。

第18课 智能视觉导航机器人3050.png

使用“列表 索引 的值”指令,索引出质心点的x坐标,中轴线为img.shape[1]//2(即120)。使用“如果……那么”指令,对质心点和中轴线进行判断。当质心点x坐标大于120时,打印“质心在右侧”;否则打印“质心在左侧”。

第18课 智能视觉导航机器人3194.png

 

最后,使用“显示图片 到窗口 ”与“每1毫秒刷新图像”指令,将有质心点的img图像,显示在行空板上。完整程序如下:

第18课 智能视觉导航机器人3281.png

4.程序运行

远程连接192.168.1.80,连接成功后,点击运行。程序运行后,摄像头将实时采集画面并显示在行空板屏幕上。如果感兴趣的区域出现了黑色线条,黑色区域上会出现质心点,终端打印区域根据判断的结果,打印质心点在左侧还是右侧;如果该区域内没有黑色线条,将不会出现质心点。

注意:这里需要调节摄像头,让摄像头中不能出现小车与地图无关的画面。

第18课 智能视觉导航机器人3482.png

 

任务二:路径跟踪与控制

1.软件准备

(1)在任务一的基础上,在“官方库”中,添加“pinpong初始化”。

(2)在“用户库”中,添加“Maxbot行空板小车电机驱动”。

第18课 智能视觉导航机器人3590.png

2.编写程序

要实现巡线的功能,利用质心点判断小车的行驶方向是关键。任务一中,已经对质心的位置进行了判断,当质心点在中轴线的左侧时,小车向左行驶;当质心点在中轴线右侧时,小车向右行驶。

第18课 智能视觉导航机器人3710.png

 

下面就根据偏移量的值,来判断小车在转向时,应该转多一点还是少一点。这里以质心点在右侧为例,当偏移量centerx大于25时,表示偏离较远,需要大幅转向。

第18课 智能视觉导航机器人3816.png

使用“电机 以 速度正转”指令,根据偏移量centerx(单位:像素)调整电机速度:若centerx > 25:M1速度=150+centerx * 6,M2速度=150+centerx * 2;

第18课 智能视觉导航机器人3945.png

当偏移量centerx小于等于25时,说明质心点距离中轴线较近,偏离较轻,仅需轻微调整方向。使用“电机 以 速度正转”指令,设置M1电机以150+centerx * 6的速度正转,M2以150-centerx * 2的速度正转。

第18课 智能视觉导航机器人4089.png

同理,当质心点在左侧时,使用同样的方法控制小车左转。完整程序如下:

第18课 智能视觉导航机器人4152.png

 

3.程序运行

远程连接192.168.1.80,连接成功后,将小车放到地图上,点击运行。程序运行成功后,摄像头打开,摄像头检测到的画面将实时显示在行空板屏幕上,小车会根据地图上的黑色线条进行巡线。

第18课 智能视觉导航机器人4278.png

 

知识园地

1.什么是质心算法

质心算法是一种用来确定图像中某一区域中心点位置的方法,通常应用于目标跟踪、路径规划等领域。在图像处理中,质心表示一个物体的“平衡点”或“重心”,即所有像素分布的平均位置。

质心算法的实现步骤,大致分为:图像提取与预处理、定义感兴趣的区域、轮廓分析与计算、控制判断与输出这四个步骤,下面我们将重点放到定义感兴趣的区域上。

如何才能确定那些区域是我们感兴趣的区域呢?例如下图,是我们安装加持器后,摄像头拍摄到的图像。图像中,有很多与线条无关的元素,如果我们不定义感兴趣的区域,这些元素都会成为巡线的干扰。

第18课 智能视觉导航机器人4571.png

要定义感兴趣的区域,这个区域应该如何来确定呢?从图中可以看到,图像的上半部分是地图的线条,图像下半部分是无关元素,是否可以将上半部分的图像定义为感兴趣的区域呢?

观察图1发现,在蓝色感兴趣的区域中,还出现的夹持器的两个角,这两个角在实际的过程中也会影响判断的,因此将感兴趣的区域进一步缩小,缩小到上半部分中间位置(图2)。

由于我们摄像头采集的图像范围比较广,图像上方位置的线条与小车本身的距离较远。将这部分的区域定义为感兴趣的区域后,会导致小车在巡线过程中,还没有到达该位置就开始执行对应的操作。因此,将适合巡线的区域锁定到最后的位置,如图3。

第18课 智能视觉导航机器人4874.png

当确认好感兴趣的区域后,程序会对除感兴趣以外的区域进行处理,将其他区域都变成黑色(如图1)。即使在其他区域有出现黑色的线条,质心点也只会出现感兴趣的区域中(如图2)。

第18课 智能视觉导航机器人4987.png

在实际过程中,你可以根据该方法自行对图像进行区域划分,并调节你感兴趣的区域。如果你想得到二值化处理后的图,可以修改程序中显示的图像为mask,如果你想得到感兴趣的区域,你可以修改显示的图像为cropped_edges。

第18课 智能视觉导航机器人5126.png

2.指令学习

c487a3af9ab0d6a09f0fd3afb52096de.png

该指令用于获取指定图像的高度和宽度。

 

 

c5cb4526c6e2914554780fa45f6e6afa.png

该指令用于通过四个顶点,确认一个四边形区域,作为我们感兴趣的区域。

 

4f3911ca759546d3c04d732652cd5a7e.png

该指令用于对输入的图像进行轮廓检测,并将计算出最大轮廓的质心位置,对质心点进行绘制,同时计算出质心点到中轴线的偏移量。

 

挑战自我

在知识园地中,我们对装有夹持器的小车进行了感兴趣的区域分析。接下来,我们修改程序,使得当小车装上夹持器时,依然能够通过质心算法实现巡线功能。


 

获取课程资源,添加小助手微信:DFRobot2018

 

评论

user-avatar