APP下载

移动目标追踪系统的设计及实现

2023-04-03张建峰秦飞舟

计算机测量与控制 2023年3期
关键词:编码器小车摄像头

张建峰,秦飞舟

(宁夏大学 物理与电子电气工程学院,银川 750021)

0 引言

用一些智能化设备的操作代替传统的手工操作可以使得生产效率更快、产品质量更高,而效率快、质量好的前提是拥有一台比较稳定、反应迅速的设备。在智能分拣快递、机器焊接元器件设备等一些自动化设备中,能够快速识别并稳定迅速的执行任务离不开一个好的算法,而作为传统经典的PID算法是自动控制、人工智能领域中一个非常普遍用到的算法[1-4]。

在工业过程控制中,根据被控对象的实时数据采集的信息与预设值比较产生的误差的比例、积分和微分进行控制的控制系统,简称PID(proportional integral derivative)控制系统。PID控制具有原理简单,鲁棒性强和实用广等优点,是一种技术成熟、应用广泛的控制系统[5]。

本设计采用PID算法控制小车的前进速度以及行走的方向[6],实现对物体的循迹、追踪[7]。并在传统的PID算法的基础上加以改进,使得小车更快、更稳定的进行物体循迹与追踪[8-11]。

1 系统的总体设计

该系统采用分布式控制系统,系统框图如图1所示,系统由摄像头模块,主控制器,电机驱动,电机,编码器以及电源组成。

图1 系统框图

其中电源模块为整个系统供电。摄像头模块采集一幅图像处理后,将得到的物体的坐标以及物体到小车的距离传给主控制器,主控制器接收摄像头和编码器传入的数据,通过优化PID算法计算出小车的应当行走速度以及方向,使电机驱动模块驱动电机,实现对物体的循迹追踪。

2 系统硬件设计

移动目标追踪系统的硬件包括主控芯片、摄像头模块、电源模块、电机驱动模块以及编码器模块。

电源选择11.1 V航模电池作为输入,通过LM2596S稳压芯片输出稳定的5 V电压,通过LM1117稳压芯片输出稳定的3.3 V电压,实现对外部模块提供3.3 V和5 V的电源。

为了保证本次设计的所有硬件资源需求以及小车运行过程中无延迟的现象,选择一款内部硬件资源丰富、运行速度快的芯片尤为重要,最终选择了STM32F407ZGT6作为主控芯片,该芯片运行速度最大可到达168 MHz、定时器有14个,是一款稳定可靠的芯片[12]。

2.1 openmv摄像头模块

追踪移动目标的摄像头模块选择的是OPENMV模块,该模块集成的STM32H7芯片对所采集到的物体图像进行了分析,得到了所追踪目标的定位坐标,通过串口的形式把定位坐标以及小车到目标的距离传给主控制器[13]。

OPENMV模块集成了STM32H7芯片和OV7725摄像头,提供了供电和串口引脚。在STM32H7内部集成了一些处理算法,以函数形式提供,通过python语言去编写处理程序,将物体坐标和物体到小车的距离发送给主控制器。

2.2 编码器测速模块

编码器测速模块主要由霍尔传感器组成,选用的是STM15-P25双霍尔磁性编码器[14]。

双霍尔磁性编码器由磁栅和磁敏两个元件构成。该模块连接到电机的转轴上,通过电机的转速的变化,霍尔传感器在A、B相位引脚产生两个50%占空比的方波,这两个方波相位相差1/4个周期。STM32芯片通过定时器编码器采集的功能或者定时器输入捕获的方式即可采集到小车的转速,为PID闭环控制做准备。

2.3 电机驱动模块

小车轮子选用的是麦克纳姆轮,由4个电机分别驱动。由于单片机输出的电流最大不超过200 mA,不足以驱动电机,所以需要加入电机驱动电路。

驱动芯片选择的是L298N,该芯片最大输出功率为25 W,通过输入PWM波可控制电机的正反转,其电路图如图2所示[15]。

图2 L298N模块电路图

由于一个L298N模块可以驱动两路电机,小车采用4轮驱动[5],所以需要两个L298N模块,给该模块输入12 V电压以保证芯片正常工作。通过EN_A引脚输入50 Hz的可调占空比去控制小车的转速,占空比越大小车转的越快。通过IN1引脚和IN2引脚,可以实现对电机方向的控制[16],具体引脚与运行情况如表1所列。其中PWM_EN代表PWM使能,PWM_DIS代表PWM失能,H代表高电平,L代表低电平,X代表引脚失能。

表1 电机方向控制表

3 系统软件设计

移动目标追踪系统软件包括摄像头和主控制器的软件。其中摄像头程序使用的是PYTHON语言开发,根据“星瞳”科技公司提供的PYTHON库,可以直接在厂商提供的IDE编译器进行编程。主控制器程序根据ST公司提供的库函数,使用KeilC5平台进行开发。

系统主控流程如图3所示。首先是各模块的初始化,包括串口、PWM、编码器的定时器初始化、IO初始化等。然后主控芯片发出启动小车自转指令,当摄像头模块检测到目标物体之后,摄像头模块会给主控制器发送信号,当主控制器接收到摄像头发送的数据可以知道物体的坐标和物体到小车的距离信息,就可以执行优化后的PID算法去计算PWM值从而控制电机,实现对物体的定位、追踪、循迹,当追踪到小球后小车停止运行。

图3 主控制流程图

3.1 摄像头驱动程序设计

摄像头程序采集图片的格式为RGB565、图片的尺寸为240×320、图片刷新时间为1 ms等。小车可以识别不同颜色的物体,通过设置图像识别的阈值实现对颜色的选择。本次设置选择红色物体,主程序不断采集图像,当检测到红色物体时,程序会在红色物体的上、下、左、右4个方向的边缘点处描绘一个白色正方形虚线边框如图4所示,把红色物体包围起来。通过描绘的正方形白色虚线边框的长与宽计算出正方形的面积除以比例系数减去常数就是小车和红色物体的相对距离。其距离的计算公式为:

distance=i_length*i_width/prop-k

其中:distance代表小车与物体的距离;i_length代表物体白色虚线边框的长;i_width代表白色虚线边框的宽;prop代表距离与面积的比例系数,为负数;k代表初始常数。

当小车离物体越来越近时,算出的面积也就越来越大,距离也就越来越小。通过算出的距离减去给定的距离(想让小车与物体相隔多远的距离)就是距离偏差,为PID闭环控制做准备。其距离偏差的表达式为:

h_error=distance-d_need

其中:distance代表小车与物体的实时的距离;d_need代表给定的距离;h_error代表距离的测量值与实际需要值的偏差。

图4 图像参数说明

用描绘物体白色边框的中心点横坐标减去一幅图像的长除以2即可得到物体与小车的位置偏差,其表达式为:

x_error=i_centre-p_length/2

其中:i_centre代表白色边框中心点的横坐标;p_length代表一幅图像的长度;x_error代表测量值与实际需要值的方向偏差。

最后通过串口将距离偏差和方向偏差传给主控制器。具体流程图如图5所示。

图5 摄像头程序流程图

3.2 电机优化PID算法程序设计

3.2.1 PID算法

PID算法作为自动控制领域中经典算法,常用于温度控制、水位控制、电机调速等多种闭环控制。PID算法中的P、I、D分别代表比例、积分、微分参数,PID分为位置式PID和增量式PID[17]。

位置式PID的公式为:

Kd*[e(k)-e(k-1)]

增量式PID的公式为:

u(k)=Kp*[e(k)-e(k-1)]+Ki*e(k)+

Kd*[E(K)-2e(k-1)-e(k-2)]

其中:u(k)代表当前PID计算输出值。Kp、Ki、Kd是PID算法的系数。e(k)是当前偏差,e(k-1)代表上一次偏差,e(k-2)代表上两次偏差,e(k-i)代表上i次偏差。

由位置式PID算法和增量式PID算法可以看出,两个公式都包含当前偏差乘以系数和上一次偏差乘以系数,差别在于位置式PID把每次偏差累加乘以系数进行计算,而增量式PID是计算上两次偏差乘以系数。

两者PID的功能都有一阶惯性滤波,区别在于位置式PID把每次偏差进行累加起到一个饱和抑制的作用,而增量式PID则是把上一次与上两次偏差进行相减起到一个对系统动态过程加速的功能。

因此,位置式PID更加适用于控制某个不变量、稳定值,如保持水位高度、无人机悬停、保持温湿度等,因为有累加的过程计算量非常大,若系统出现故障等大幅度变化的情况,系统也会相应做出大幅度的改变。增量式PID比较适合用在输出不断变化的系统中,比如电机控制速度,舵机控制方向等,因为做了二次超调的计算即得到上一次偏差与上两次偏差的差值,从而快速接近目标值[18-19]。

3.2.2 传统PID算法控制电机

电机驱动程序流程图如图6所示,电机使用STM32输出50 Hz可变占空比的PWM,可以控制驱动电机的快慢,同时为了保持速度稳定、反应迅速需要加入PID闭环控制算法。

图6 电机驱动程序流程图

本设计中PID算法控制电机包含3个部分,分别是速度控制PID,方向控制PID,距离控制PID。

其中速度PID根据编码器测量的速度与给定小车的速度的偏差进行PID运算,再根据所计算的PWM值控制小车从一个速度到另一个速度的加速、减速。方向PID根据摄像头采集到的物体相对小车的中心点的偏差进行PID运算,计算出PWM去控制小车的左右移动。距离PID根据摄像头采集到的物体与小车的距离偏差进行PID运算,计算出PWM去控制小车前后移动。

3种PID原理一样,都是通过给定值与测量值的偏差作为PID的参数,PID函数运算返回PWM的值,只是偏差不同和P、I、D系数不同,算出最后的PWM值的结果也就不同。

PID算法可以不需要I系数、D系数或者I、D系数,只要系统能够保持稳定单纯的用P系数进行调节,也可以达到很好的效果。经过反复的调试,本次设计只需要比例项和微分项就可以达到很好的效果,所以选择位置式PID和增量式PID效果一样。所以本设计PID公式为:

IncPid=KP*EE0+KI*(EE0-EE1)

其中:KP、KI分别为PID算法中的P、I参数;EE0代表实际值与测量值的偏差也就是当前偏差;EE1代表上次偏差也就是程序执行第二次的上次偏差;当前偏差是给定值与测量值的差值,通过不断调节P、I参数确保小车能够更快更准的达到预期的值。

3.2.3 优化PID算法控制电机

使用传统PID调试小车,是通过调节P、I、D参数使用小车的输出值呈现“发散”、“等幅振荡”、“合理”、“不达标”4种情况。

理想的情况下,传统PID会开始出现超调,随后缓慢恢复稳定值。而本次的优化在原有的基础上加入超调校正和边缘处理算法,让小车更稳定的运行,如图7所示为输出值在理想情况下合理的曲线。

图7 传统PID输出合理的曲线

超调校正是给定一个较大的超调角度,即P系数比较大,这样可以让小车刚开始用比较快的速度启动也就是加速度更大,让小车更快的到达实际值,在这种情况下,将会出现“等幅振荡”或者“发散”现象。为了防止该现象,PID函数执一次,程序计算偏差三次,也就是把反馈采集的数据速度调节到PID函数运行的三倍,这样会使小车开始会以较大的加速度运行,当还没有到达目标值时,此时反馈原件再次计算偏差,此时的偏差已经较小就不会出现“等幅振荡”现象,但是会出现输出值稳定的时间加长现象。

边缘处理算法就是对超调校正出现稳定时间较长的缺点进行修正。边缘处理算法就是对输出值的上限进行设置,保证上限值不会太大,以及配合调节参数I,这样就不会现象大幅度的抖动的现象,也可以减少输出值稳定时间长的问题,其优化后的理论输出值曲线为图8所示。

图8 优化PID输出合理的曲线

通过与传统PID算法的对比,我们可以清楚的看出,优化后的PID输出的曲线到达目标值的速度更加迅速,由于对上限进行了设置将不会出现“等幅振荡”和“发散”的现象。

4 实验结果与分析

为了验证所设计的移动目标追踪系统的优越性,设计了对比实验。分别在移动目标追踪系统的小车上采用传统PID控制算法与优化后的PID控制算法去控制小车,实现对物体的追踪、循迹[20-25]。移动目标追踪系统的优越性可以根据小车追踪物体的时间和稳定性综合考虑,当小车追踪物体的时间越短、到达目标位置稳定性越好代表该系统越优越。实验分为两组分别为:物体动态运动时,传统PID算法控制;物体动态运动时,优化PID算法控制[26-31]。

在物体以一定速度运动过程中,利用传统PID控制小车对物体进行自动追逐。小车的速度可以通过串口将编码器测量出的速度值发送给PC端,PC端可以观察出小车4个轮子行驶的速度。通过小车在运行的过程发送给PC端的速度数据,可以判断出小车到达稳定时所用时间的长短。通过小车稳定时小车轮子速度的变化范围即可看出小车稳定性的强度[32-40]。

4.1 物体动态运动时,传统PID控制

当小车用传统PID控制算法时,得出的数据如图9所示。最初小车会以880的速度前进,当小车速度到达520的速度趋于平稳,速度的抖动幅度为40。

图9 传统PID算法小车的速度

4.2 物体动态运动时,优化PID控制

当小车用优化PID控制算法时,得出的数据如图10所示。最初小车会以880的速度前进,当小车速度达到240的速度趋于平稳,速度抖动幅度为30。

图10 优化PID算法小车的速度

通过1、2对比我们可以看出传统PID算法控制相对优化后的PID算法第一次到速度稳定值的时间相对较长,速度稳定时上下幅度范围较大。

综合上述实验结果可以得出结论,无论是传统PID控制算法还是优化后的PID算法都可以完成对移动物体的追踪、循迹。基于移动目标追踪系统的基础上,用优化PID控制算法代替传统PID控制算法可以更快。更稳定的对物体进行追踪、循迹[41-50]。

5 结束语

该系统以STM32为主控制器,通过与摄像头交互以及硬件PCB的设计完成了移动目标追踪系统的设计[51-54]。该移动目标追踪系统能够应用在自动跟随行李箱、自动追踪人脸识别等设备中,具有非常好的实用和应用价值[55-57]。

该系统在传统PID算法控制小车的基础上,加入超调校正与边缘处理算法让小车更快准的达到给定值,让小车反应更加灵敏、反应更加迅速[58-59]。

该小车有着较低的成本外观小巧且能够追踪到各种各样劣势的环境下的物体的优点,在未来引入物联网还可以使小车能够更加智能化[60]。

猜你喜欢

编码器小车摄像头
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
大车拉小车
自制小车来比赛
刘老师想开小车
基于太赫兹技术的新一代摄像头及其在安防领域的应用探讨
基于FPGA的同步机轴角编码器
两轮自平衡小车的设计与实现
基于PRBS检测的8B/IOB编码器设计
JESD204B接口协议中的8B10B编码器设计