APP下载

基于OpenMV的智能跟踪小车设计

2019-08-29

计算机测量与控制 2019年8期
关键词:障碍物小车超声波

(西南科技大学 信息工程学院,四川 绵阳 621000)

0 引言

智能车具有自主性、交互性、适应性等特征,它融合了人工智能、自动控制、数字图像处理、机械设计、信息传输等多个专业领域的先进研究成果[1]。而视觉系统作为智能车的“眼睛”,综合了图像处理、模式识别等相关领域的知识,使小车在各种复杂环境下都能快速而准确地寻找到目标。

近年来,随着人工智能、计算机视觉等技术的快速发展,基于视觉跟踪的智能车在物流运输、科学勘察、生活服务等领域得到了广泛的应用[2]。同时,智能跟踪小车的跟踪效果、避障能力、智能程度、运输能力等也受到了人们的高度重视。因此,研究运动目标的检测和跟踪具有极为重要的理论意义和现实价值[3]。

目前市面上出现的智能跟踪小车普遍存在两种问题:一是小车只有固定的行驶路径,智能化程度较低;二是只适合在一些比较空阔且平坦的场所进行作业,避障和适应能力较差。而本设计的智能跟踪小车以单片机为核心,通过视觉模块完成对二维码的采集和处理[4],保证了对标记物的精准锁定,并借助超声波测距模块辅助完成跟踪和道路勘测任务,从而实现小车实时跟踪和自主避障的功能。

1 系统结构及原理

智能跟踪小车选用Arduino作为主控制器,外围设备包括视觉模块OpenMV、超声波模块、电机驱动模块、电机与舵机模块等,另外还包括12 V航模电池和12 V转5 V的稳压模块。电机驱动模块由航模电池直接供电,而单片机的供电则需要将12 V通过稳压模块降到5 V。系统设计如图1所示。

图1 系统设计框图

小车在一个完整的智能跟踪过程中主要完成以下两项任务。

首先,锁定标记物。利用视觉模块采集二维码图像,并发送二维码坐标给单片机,单片机根据位置信息调节舵机转向,使小车正对标记物,完成对标记物的锁定。

然后,跟踪标记物。无障碍物时,超声波模块实时测量小车与标记物的距离并发送给单片机,单片机收到距离数据后及时进行处理,并通过PID控制算法调节电机速度,保证小车对标记物的实时跟踪。当有障碍物阻挡在小车与标记物之间时,由于单片机检测到超声波测量的距离发生突变,因此判断小车前方出现障碍,此时单片机通过调节电机舵机使小车避开障碍物,然后重新跟踪标记物。

2 系统硬件设计

2.1 车身设计

智能跟踪小车为了适用于各种场所运输物品,所以对车身的稳定性要求较高。小车在工作时需要保证车体的平衡能力,使其重量平均分布,重心尽量居中,以此避免在崎岖路面行驶时发生侧翻的情况,因此采用轮式移动结构[5]。4个独立的驱动轮在各自驱动电机的驱动下能够在目标环境中作全方位的移动,可以在目标区域中完成前、后行驶、转弯以及爬坡动作、下坡运动等[5]。小车车身如图2所示。

图2 小车车身图

2.2 主控模块

主控制器采用Arduino。Arduino具有开发简单清晰、扩展模块强大、开源性强等特点。无需掌握其硬件结构和软件底层原理就可轻松使用各种模块,并且支持跨平台开发,因此应用十分广泛。本设计需要用Arduino的串口通信接收视觉模块和超声波测距模块传送来的数据,输出PWM控制电机和舵机等。

2.3 视觉模块

视觉模块采用机器视觉开发组件OpenMV。在进行开发时,可直接使用Python语言在OpenMV IDE上编程调用图像处理相关算法和Python库[6]。OpenMV最高像素可达30万[6],由于只有OpenMV3及以上版本才能识别二维码,所以本设计采用OpenMV系列的OpenMV3。

2.4 超声波模块

超声波测距模块采用HC-SR04。其具体工作过程为:I/O口Trig触发测距,若有信号返回,则I/O口Echo输出一个高电平,高电平持续的时间为测距时间,从而可算出小车距障碍物的距离s=高电平时间/2*声速。

2.5 电机驱动模块

小车驱动模块采用A4950全桥式DMOS PWM电动机驱动器,直流电动机的速度通过脉宽调制PWM来控制。此模块可以控制2个电机正反转,4个PWM引脚就可以控制小车的前进与后退,同时其使用方法比L298N更简单,性能比TB6612更强。

2.6 电源模块

电源模块包括12 V航模电池和稳压模块。航模电池供电电压稳定,使用广泛。电机驱动模块可由航模电池直接供电,而单片机以及其他模块的供电范围在4.25 V到6 V左右,因此必须采用12 V转5 V的电源稳压模块实现降压。

稳压模块是一个模拟电路构成的集成块,结构复杂,稳压能力比稳压管强,稳压范围更小,精度更高。

3 系统软件设计

3.1 软件总体设计

软件总体设计主流程图如下图3所示。首先进行所有设备的初始化,分配资源。然后视觉模块开始扫描,获取周围环境中的二维码图像,并将获取的二维码进行图像处理和解码信息判断,若判断为目标,则将数据发送给单片机,目标锁定完成,开始跟踪。在跟踪过程中,超声波测距模块实时测量小车与标记物的距离,同时调整舵机转向和电机速度,使小车能保持一定距离紧随标记物之后。

当超声波模块测量的距离发生突变时,则表示有障碍物出现,开始避障。与跟踪不同的是,此时超声波所测距离变为小车与障碍物的距离。为了规避障碍,单片机控制舵机方向使小车左右偏转,并使电机减速,若小车与障碍物的距离又发生突变且摄像头能扫描到二维码,则避障结束,继续跟踪,否则小车继续左右偏转直至避开障碍物。

图3 软件总体设计主流程图

3.2 二维码识别与解码

本设计在OpenMV视觉模块基础上,使用OpenMV IDE软件和OpenCV库完成图像处理。OpenCV库提供的许多常用视觉识别算法也为开发降低了难度[7]。

视觉模块在扫描二维码时,同时也扫描到了周围环境中的图像,为了更快地从图像中提取二维码,需先对所有图像进行图像预处理。图像预处理的主要目的就是消除图像中噪声信息,增强有用信息。预处理包括:导入图像、去噪处理、图像增强、彩色图像转变成灰度图、灰度图转化成二值图、边缘检测/分割、直方图匹配/轮廓匹配[8]。

预处理工作完成后,得到了相应的二值化图像,二维码的特征也变得更加明显,然后对二维码图像进行轮廓查找,即找到二维码的3个定位区域[9]。如图4所示的二维码,其定位区域指的是左上、左下和右上的3个矩形区域。在软件代码中,主要通过调用OpenCV里的findContour函数来实现二维码的识别和定位,即寻找出上述3个矩形区域。通过筛选轮廓边长和边长之间的比例来筛选出正确的轮廓,其中轮廓边长比例必须满足1:1:3:1:1的比例关系,如图5所示。

图4 二维码

图5 二维码轮廓边长比例关系图

完成预处理后就可进行二维码解码,将解码得到的字符串与标记物进行比较:若相同,表示已经寻找到标记物并进行跟踪;若不同,摄像头重新扫描。

解码可通过两种包:zbar和zxing完成,本设计使用的是zbar包。二维码实际是由若干个黑白的几何图形组成的,并且每个几何图形对应于一个二进制数。所以解码实际就是将每个黑白几何图形转化为二进制,然后在zbar包中去寻找到二进制码所对应的字符串。二维码识别与定位流程图如图6所示。在代码实现中,可以直接调用OpenCV里的库就能完成一些复杂的图像处理,使程序进一步简化。

图6 二维码识别与定位流程图

3.3 串口通信

串口通信按照通信方式可分为串行和并行两种方式。串行通信是将数据按位依次传输,并且只需地线、发送、接收这3根线就可以进行数据传输,而并信通信是将数据的多个位同时传输[10]。串行通信根据数据流的传输方向又可分为单工、半双工、全双工3种传输方式[10]。由于本设计只需要单片机接收视觉模块和超声波模块的数据,所以采用串行单工传输。

波特率 、数据位 、奇偶校验和停止位是串口通信最重要的参数,两个端口要进行通信的前提是这些参数保持相同。本设计初始化串口为:uart = UART(3,115200),其中115 200为波特率。

3.4 PID控制

PID控制是通过对偏差信号进行比例、积分、微分运算的不同组合形式适用于不同系统的控制原理,从而使偏差趋于零[11]。

增量式离散PID计算公式如式(1)所示,其中e(k)表示本次误差,e(k-1)表示上一次误差,e(k-2)表示上上次误差,Pwm表示增量输出,Kp表示比例增益,Ki表示积分常数,Kd表示微分常数。

PID调节指调节比例增益Kp、积分时间常数Ti、微分时间常数Td三个参数,其传递函数如式(2)所示。本设计使用PID调节来控制电机,使速度变化更加稳定,误差更小,但只需要调节PI参数即可,即比例增益Kp和积分时间常数Ti。所以式(1)可简化为式(3)所示。

Pwm+=Kp[e(k)-e(k-1)]+Ki×e(k)+

Kd[e(k)-2e(k-1)+e(k-2)]

(1)

G(s)=U(s)/E(s)=Kp(1+1/(Ti×s)+Td×s)

(2)

Pwm+=Kp[e(k)-e(k-1)]+Ki×e(k)

(3)

3.5 电机速度调节

想要电机稳定且按照预期的行进路线行走,只是采用对左右电机的速度的调整很难达到预期的效果,本设计采用软件代码来克服这些问题,让小车的行进更加稳定,具体过程如下。

转向时双轮调速。具体是指让小车在转向时能够围绕一个点选择,而不只是让左右电机的转速不同。转弯时,由于后双轮行走的距离不同但是行驶的时间相同,因此,如果只是使左右的速度不同,显然无法准确地达到预期效果,所以采用后双轮的差速行驶算法来实现,原理如下:

令后双轮的轮距为B,前后轮的间距为L,假设最优路径为左前方与车正前方成a夹角的直线(a可正可负),转弯半径为R,在左边与后轮齐平,后左轮角速度为w_left,后右轮角速度为w_right,因为后双轮的角速度相等,也就是:

w_left=w_right

(4)

那么:

v_left/R_in=v_right/R_out=v/R

(5)

其中:v_left为左后轮速度,v_right为右后轮速度,R_in为内圈转弯半径,R_out为外圈转弯半径。假设后轮的中间速度为v(即速度设定值),而且满足:

R=L/tana

(6)

R_in=R-B/2

(7)

R_out=R+B/2

(8)

可以推出:

v_left=v-v×B×tana/2L

(9)

v_right=v+v×B×tana/2L

(10)

上述两个公式即可求出转弯时后双轮需要的速度,而不需要调试各个转弯时所需要的左右速度,这不仅使电机速度的调节更加方便,还大大增强了小车的跟踪效果。

4 实验结果与分析

4.1 实验步骤和方法

1)搭载好车身,检查外围设备是否与主控稳定连接。

2)选取合适的标记物,将二维码(尺寸为6 cm×6 cm)贴于标记物正中心。

3)设定标记物与摄像头中心的距离即初始距离为D(首次为0.15 m),记录小车锁定目标所需时间。

4)逐渐增加D(最大为1.05 m),重复步骤3)。

5)继续增加D,直至小车无法锁定目标,记录小车能够锁定目标的极限距离和锁定时间。

6)保持初始距离D(首次为0.15 m)不变,从2 m逐渐增加跟踪距离Y(最大为15 m),使标记物移动,同时小车开始跟踪,记录跟踪效果。

7)增加初始距离D(最大为1.05 m),重复步骤6)。

8)设置初始距离D(首次为0.15 m),跟踪距离Y为10 m。将跟踪距离Y分为五等分,当标记物刚经过0 m、2 m、4 m、6 m、8 m的位置时,在小车与标记物之间放入一个障碍,记录小车经过的障碍物个数N。

9)增加初始距离D(最大为1.05 m),重复步骤8)。

4.2 实验数据

将记录的数据进行统计、处理,得到如表1、2、3所示的实验数据。

表1 小车目标锁定效果

表2 小车跟踪效果①

①小车跟踪效果分成A、B、C、D四种等级,A:未出现目标丢失情况;B:跟踪7次,出现1-2次目标丢失情况;C:跟踪7次,出现3-5次目标丢失情况;D:跟踪7次,出现5次以上目标丢失情况。

②初始距离同时也表示跟踪过程中小车和标记物之间的近似距离。

③跟踪距离在2~8 m范围内时,路径中无直角弯道;跟踪距离为10 m、12 m、15 m时,路径中分别有1、2、3个直角弯道。

表3 小车避障效果

4.3 数据分析

观察表1中的数据可知,小车锁定目标时间随着初始距离的增加而变长。当初始距离从0.15 m增加至0.60 m时,锁定时间变化较小,而超过0.60 m后,时间变化较大,锁定效果明显下降,且1.28 m是小车能锁定目标的极限距离。因此,当初始距离小于0.60 m时,小车的目标锁定效果较好。

由表2中的数据可知,小车跟踪效果随着初始距离和跟踪距离的增大而有所降低,但主要影响因素是初始距离。可以看出,初始距离在0.60~1.05 m范围内的总体跟踪效果明显不如初始距离在0.15~0.45 m范围内的。并且,初始距离大于0.45 m时,跟踪效果在遇到直角弯道时下降地更为显著。

根据表3中的数据可知,小车成功绕过的障碍物个数与初始距离近似呈正态分布。这是因为当初始距离过小时,小车容易直接撞到障碍物,而当距离过大时,小车容易在躲避障碍物之后丢失目标。可以看出,当初始距离近似为0.45 m时,小车的避障能力最好。

综合实验数据及以上分析可得,当初始距离在0.30~0.45 m范围内时,智能跟踪小车的整体性能表现最佳。

5 结束语

本文介绍了一款基于视觉模块OpenMV的智能跟踪小车,对小车硬件及软件设计部分进行了重点描述。经实验测试发现,小车在一定范围内能够较快锁定标记物,同时具有优秀的跟踪和避障能力。另外,小车的整体性能还有待进一步提升,主要可通过升级相关硬件以及进一步优化软件设计来实现。本智能跟踪小车价格低廉,性能优越,简单改造即可很好地代替目前市场上一些智能化程度低、价格高昂的跟踪小车,具有较为广阔的应用前景。

猜你喜欢

障碍物小车超声波
超声波诊断甲状腺结节的临床应用观察
火星作业小车
基于焊缝余高对超声波探伤的影响分析
大车拉小车
高低翻越
赶飞机
月亮为什么会有圆缺
刘老师想开小车
蝙蝠的超声波
去修理厂