OpenMV视觉模块循迹/巡线功能实现(带TFT-LCD屏显示)

该文详细介绍了使用OpenMV摄像头通过设置ROI区域进行图像处理来实现循迹功能。首先设置ROI区域和颜色阈值,然后进行灰度处理,寻找最大黑色色块以确定线的质心,通过计算偏角来控制小车行驶方向。当偏角超出预设阈值时,小车执行相应的转弯或直行指令。

1. 实现原理

对于循迹功能的实现,首先需要设置ROI(Region of Interest)区域,即是图像感兴趣区域,合理的划分ROI区域可以在一定程度上减少OpenMV的计算资源的消耗从而提高系统运行速率。
本次使用的TFT-LCD屏在QQVGA的画质下的尺寸为160120,其循迹时的ROI区域的设置如图4-4所示。如图所示,总共设置了三个ROI区域,三个区域的大小均是120pix30pix尺寸的矩形。离视野越近的地方所设置权重值应该更大,所以ROI1、ROI2和ROI3的权值大小分别为0.7、0.3和0.1。

在这里插入图片描述
设置好阈值后,为便于循迹,需要对图像进行灰度处理,同时设置巡线的颜色阈值。本次巡线图的颜色为黑色,设置巡线的灰度颜色阈值为(0,64)。
配置好上述参数后,视觉模块开始循迹,其循迹原理如下图所示。
在这里插入图片描述
首先,摄像头将得到的图像进行转换,得到对应得灰度图。
之后,寻找灰度图ROI区域中的最大黑色色块,并返回三个色块的矩形元组框出位置。如下面公式所示,将三个色块的中心点的横坐标与对应ROI区域的权值相乘再将其求和可以近似得到线的质心和。
在这里插入图片描述
然后,由计算出的质心和和之前设置的权值和根据下述公式可以计算出当前的线心位置CenterPos。
在这里插入图片描述
最后,根据线心位置和图片的像素尺寸可以通过下述公式将线心位置转换成偏角大小。
在这里插入图片描述
本次巡线模式使用的像素尺寸为160*120,所以本次偏角DeflectAngle的计算使用下式。
在这里插入图片描述
不难发现, 的取值在0到160之间,所以偏角DeflectAngle的取值范围为 ,转换为角度即DeflectAngle取值范围为正负53.1度之间。
在得到图像中黑线的偏角之后,即可进行偏角大小的判断来确定小车的动作状态。当偏角绝对值小于角度阈值时,小车直行;当偏角绝对值大于角度阈值且为正偏角时,小车右转;当偏角绝对值值大于角度阈值且为负偏角时,小车左转。

2 循迹功能实现流程图与伪码

在这里插入图片描述
在这里插入图片描述

3 代码实现

#导入函数库
import sensor, image, time, math ,lcd
from pyb import UART
#开启时钟
clock = time.clock()# 跟踪FPS帧率
#变量初始化
#阈值设置 根据实际情况进行更改
TRA_TH= [(128, 255)]           #巡线的灰度值 阈值[(0, 64)][(128, 255)]
TRA_AngTH=30                   #巡线时角度阈值
#ROI区域设置
#(x,y,w,h,weight)=(矩形左上顶点的坐标(x,y),矩形宽度和高度(w,h),权重)
TRA_ROIS = [ # [ROI, weight]
        (0, 100, 160, 20, 0.7), # You'll need to tweak the weights for your app
        (0,  50, 160, 20, 0.3), # depending on how your robot is setup.
        (0,   0, 160, 20, 0.1)
       ]
Weight_Sum = 0                        #权值和初始化
for r in TRA_ROIS: Weight_Sum += r[4] #计算权值和
OBS_ROI = [(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公子易平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值