• 143
基于OpenMV 图像识别智能小车以三轮小车为载体,以STM32F765VI 单片机为核心,结合了OV7725感光元件、L298N 电机驱动模块,电机等外围设备,借助OpenMV IDE 软件以及OpenMV 库,采用图像识别所追踪的颜阈值进行设置,采用PID 算法实现小球追踪功能。经过实验测试,小车能够追踪特定块的小球,且跟随速度较快。
1  引言
智能小车是机器人竞赛、大学生电子设计竞赛、职业技能大赛等各类竞赛中中不可或缺的竞赛项目。至今为止,智能小车应包含寻迹、避障、无线通信等功能。常见的设计方案是以51单片机、STM32或Arduino 为主控制器,辅助外围传感器接口电路进行信号检测,利用红外循迹传感器对小车进行寻迹,利用红外传感器或超声波传感器进行避障,利用蓝牙或Wifi 进行无线通信。机器人视觉测器对采集图像进行识别、处理。OpenMV 是一款在STM32控制器上集成了摄像头支持Python 的机器视觉模块,借助Python 的图像识别算法库函数,可以进行颜识别从而实现循迹、避障等功能,通过I/O 端口对机器系统进行控制,可以将采集到的信号通过串口送给其他控制器。将OpenMV 安装在智能小车上,相当于给智能小车安装了一双眼睛。
2  硬件设计方案
基于OpenMV 图像识别智能小车是以STM32为主控制器,以OV7725作为机器视觉模块,L298N 作为驱
动模块。通过OV7725采集图像并通过内置的图像处理算法控制智能小车到红小球,并追踪红小球运动。总体框图如图1
所示。
图1 总体框图
2.1  控制器
主控制器采用的是STM32F765VI 单片机,STM32F765VI 采用ARM Cortex-M7为内核,指令系统兼容了STM32系列单片机(安飒,廉小亲,成开元,等.基于OpenMV 的无人驾驶智能小车模拟系统[J].信息技术与信息化,2019,6:16-20)。STM32系列单片机含1组串口通信端口(TX\RX )用于与其它控制器进行串口通信,含1个ADC 转换器和1个DAC 转换器,可以将数字信号与模拟信号相互转换,10个I/O 接口,均具有中断和PWM 功能。STM32F765VI 单片机接收OV7725感光元件采集的图像,因为STM32F765VI 搭载了
一个Micro Python 解释器(梅妍玭,傅荣,基于openMV 的小车定位系统研究[J].扬州职业大学学报,2017,21(4):46-48),所以可以将感光元件所采集的图像调用图像处理相关算法以及Python 库到红块(田渠,罗淦,尹海涛,简鱼沛,基于OpenMV 的智能跟踪小车设计[J].2019,27(8):167-170+176)。2.2  OV7725感光元件
OV7725感光元件30万像素,分辨率为640*480处理8bit 灰度图或16bitRGB565彩图像,图像传感器将光信号转换成电信号,经过AD 转换器转换成数字信号,将处理好的数字图像信号送到数字处理芯片DSP 数字算法处理芯片,利用FIFO 存储器接收图像传感器传来的图像数据。2.3  驱动模块
本设计是一辆3轮车,2个电机分别驱动两个轮,尾部增加一个万向轮,因此需要使用2个电机驱动,主
控芯片输出的电流有限,无法保持较为稳定的电流
控制小车的运动姿态,因此需要使用驱动模块,本设计采用的驱动模块型号为L298N ,一个L298N 可以控制2个电机正反转,因此本设计使用1块L298N 控制2个电机,从而改变小车的运动状态。2.4  电源模块
STM32F765VI 单片机所有的I/O 引脚输出3.3V 并且5V 耐受,因此电源提供5V 即可。驱动模块L298N 耐受电压最高为12V ,电压越高,电机转速越快。因此本设计采用12V 航模电池供电,经过降压模块LM2596S ,将12V 将为5V 送到单片
机。而驱动模块L298N 可以直接供给12V 电压或降压后供电。
3  软件设计
3.1  设计思路
本设计任务是智能小车追踪特定颜的小球,小球往那边跑,小车往那边追。软件设计思路为:首先确定要追踪小球的颜,利用阈值设置工具确定块的阈值。然后利用PID 去控制追球小车的方向和速度控制。
• 144
3.2  寻块
thresholds 是颜的阈值,red_thresholds=(minL,maxL,minA,maxA,minB,maxB ),这个函数表示红的阈值,括号里面的数值分别是LAB 的最大值和最小值。可以直接填入希望追踪颜的LA B 值,也可以利用阈值设置工具来取值。使用方法如下:
步骤一:运行OpenMV IDE ,摄像头对准希望捕捉的块的小球,帧缓冲区中会出现摄像头所拍摄的图片,如果图片不够清晰可以调节OV7725的焦距。
步骤二:打开工具-机器视觉-阈值编辑器-选择帧缓冲区。
步骤三:拖动选择最佳颜跟踪阈值下的六个滑块,尽可能曝光我们的红小球区域,使其为白,其
他区域为黑。如图2所示。LAB 阈值(52,66,16,57,-12,16)就是我们希望的红小球的阈值red_thresholds=(52,66,16,57,-12,16)。3.3  PID算法
PID 控制是过程控制中最常用的一种算法,P 表示比例控制,I 表示积分控制,D 表示微分控制,改变3个参数中的一个或者多个,通过运算一步步逼近真实值,利用输出结果控制PWM 脉冲的占空比来调节直流电机的电压值,从而控制小车的转速。本设计采用PID 闭环设计,单片机对摄像头采集小球位置进行处理,如果数据值在小球的红阈值范围内,调用PID 函数,调整P,I,D 的3个参数,单片机控制电机运动,使小车到达选定的位置(徐琳,齐天峰,刘五一,基于PID 算法的板球控制系统设计[J].电子世界,2018,11:204)。如果数据值不在范围内让小车原地旋转,再次判断摄像头采集的数据,重复以上过程直到红小球出现在摄像头视野内(刘杰,蒋沁宏,基于OpenMV 的寻的赛车[J].电子技术与软件工程,2018,14:74)。
4  块追踪测试
4.1  调试
为了完成追小球的智能小车的调试,首先将小车根据文中硬件设计
部分完成小车的设计与制作,将OpenMV 摄像头安装在小车的车头。其次到OpenMV 上下载并安装
OpenMV IDE 这款软件,将控制小车运动的程序写到IDE 中并保存成c ar.py 同时将car.py 保存到OpenMV 中。car.py 中定义引脚及定时器,使用P0-P3四个I/O 端口分别控制2个电机的运动方向。将PID 算法程序写到IDE 中同时保存成pid.py 同时将pid.py 保存到OpenMV 中供主函数使用。主程序main.py ,调用car.py,pid.py 。根据颜识别改变电机的运动状态,控制PID 去追踪颜小球。程序中可以根据实际情况更改x_pid=PID(p=0.5,i=1,imax=100),主要完成对小车方向的控制,h_pid=PID(p=0.05,i=0.1,imax=50)主要完成对小车速度的控制中P,I 的参数。4.2  实验测试
将不同颜的小球,本实验测试中分
图2 颜阈值的设置方法
别将5个红小球,5个绿小球散落在地板上打开小车电源,测试小车追踪效果。测试结果表明当10个小球散落地板上,小车会去追踪摄像头视野中最大块的小球。
模块电源图片
5  总结
本文介绍基于OpenMV 图像识别的智能小车如何去追踪特定颜的小球。利用OpenMV 自带的单片机控制小车电机运动,利用PID 算法,通过改变P ,I 两个参数从而改变电机的运动速度以及运动方向来追踪特定块的小球。通过实验表明OpenMV 图像识别智能小车追踪效果较好,根据同样的原理同样可以完成小车巡线的功能。OpenMV 的使用减少了传统传感器的设计方案,使小车更加智能。
基金项目:2017海南省高等学校科学研究项目(Hnky2017-76);2017海南省自然科学基金项目(617165)。
作者简介:
王泽川(1970—),海南澄迈人,硕士,副教授,研究方向:教育信息化。
曾维鹏(1982—),海南海口市人,硕士,副教授,研究方向:人工智能、嵌入式技术。