matlab求kcf算法响应图_经典电机驱动算法
通常我们在操控小车运动时会遇到如何实现对小车轨迹进行精确控制的难题。在不了解小车控制系统核心原理的情况下,我们很难实现对小车的精准操作。目前普遍采用的是PID控制算法来实现小车运动的自动调节功能。然而,当前许多玩家仅掌握一种调节方法,即比例调节:向左偏就向右调整,向右偏就向左调整,这种方法最直观也最容易通过软硬件设备实现,但其缺点也很明显,即操作过于简单粗暴,容易导致系统稳定性受到影响。实际使用中会发现车辆动作不够平稳,会出现忽左忽右的现象。后来通过查阅相关资料才了解到其他更为复杂的调节方式。下图展示了小车的实际物理结构图:

图 小车的实物图
控制算法:
该控制系统的主要功能是接收指定的速度指令,并通过精确计算向电机施加适宜的驱动电压。目的是迅速地促使电机转速快速稳定地达到目标速度值,并维持这一状态不受外界干扰影响。换句话说,在到达目标速度后即使遇到斜坡或其他因素引起的转速变化也应保持恒定速度以确保系统稳定性。为了提高机器人小车控制系统的工作精度必须采用合适的模糊控制等先进算法然而由于比赛要求极高的实时响应能力机器人必须在极短时间内作出快速反应因此传统的模糊控制等方法在此应用效果不佳本系统选用经典的PID调节方法取得了显著成效下图展示了PID控制系统的工作原理图

图 PID控制系统原理结构框图
1 比例项
初始偏差转换环节就是比例环节。这一环节通过将偏差信号乘以系数K得到新的控制变量CV值(其范围是-100至100)。基本的比例控制算法如下:
loop:
PV=ReadMotorSpeed()
Error=SP-PV
CV=Error*Kprop
Setpwm(cv)
Goto loop
其中SP为设定值,PV为反馈值,Error为误差。
上一段程序中的SetPWM()函数不将其视为严格的占空比。相反,在此过程中不断减小偏差会导致系统输出趋向于零,并且由于电机运行需要持续稳定的PWM信号源,在这种情况下控制系统会使得电机维持在较低的速度运转状态中而导致该控制策略无法实现其预期效果
值得注意的是,在此情况下(此处指电流控制模式),CV值一般表示为现有PWM占空比的变化量,并累加于现有 PWM 占空比之上。这进一步要求 SetPWM() 函数需确保累加后所得 PWM 占空比保持在 0% 至 100% 的范围内。正 CV 值会导致电机两端电压升高;而负 CV 值则会降低电机两端电压。当 CV 值等于零时,则无需调整现有占空比;较低 K 增益有助于减缓系统的速度响应速度但能确保系统的稳定性;较高 K 增益能够加快速度响应速度但也可能引发超调现象;当 K 增益过高时系统可能会变得不稳定并持续振荡而未达到预期状态
2 积分项
积分恰好与微分互为逆运算。若有一个用于表示变量变化速率(即导数)的数学表达式,则对其求积运算的结果就是该物理量在时间维度上的累积效应。例如,在动力学中已知加速度函数时,则可以通过对它进行定积分类似于求面积的方式计算出物体的速度函数。
在PID控制系统运行过程中,在线累加的所有误差(偏差)之和即为偏差的积分值。随后将该计算结果通过比例系数K进行放大处理,并将处理后的数值附加到整个控制回路的输出端。值得注意的是,在没有积分环节参与的情况下虽然系统的响应可能会趋向一个稳定状态但由于缺乏对历史误差信息的有效利用最终系统的输出值可能无法精确达到设定目标值SP
一个简单但完全的PID控制器的伪代码实现如下:
loop:
PV=ReadMotorSpeed()
LastError=Error
Isum=Isum+Error
Error=SP-PV
Rate=Error-LastError
CV=ErrorKprop+KrateRate+Kint*Isum
SetPWM(CV)
Goto loop
因为积分项会不断增大, 这就导致控制回路在SP值变化时的反应速度减缓. 在CV值达到设定边界(例如-100至100)的情况下, 累计器通常会停止累加Isum. 当SP发生变动时, 则可以通过去除Isum的方式进行处理.
3 微分项
任何变量的微分项用于表示该变量相对于另一个变量(多位时间)的变化速率。简而言之,任何变量的微分项即其随时间的变化率。例如,位移相对于时间的变化率为速度;而速度对时间求导得到加速度。
在PID控制器中,在关注偏差信号对时间的导数(也被称为变化率)方面表现突出。大多数 controller 定义其微分 term 为:
Rate=(E-E )/T
在式中,
E代表当前偏差,
前一周期误差值代表E,
两次测量的时间间隔是T,
负的变化率意味着误差信号减小,
当引入到控制器时,
将一个常数与该微分项相乘后得到一个新的量,并将其加至比例项,
就可以得到最终的CV值计算公式:
CV=( K E)+( K Rate)
当偏差信号趋近于零时, CV 值将为负,因此,当偏差信号逐渐改善时,微分项的作用将逐渐减弱调节输出量.在特定情况下,微分项还有助于消除超调量,并允许使用较大的 K 值,从而可以提高响应的快速性.微分环节还预示了偏差信号的变化趋势.当控制对象对控制器的输出响应迟缓时,微分环节的作用尤为显著.
含有微分项的控制算法的伪代码实现如下:
loop:
PV=ReadMotorSpeed()
LastError=Error
Error=SP-PV
Rate=Error-LastError
CV=ErrorKprop+KrateRate
SetPWM(CV)
Goto loop
4 PID的整定方法
当调整PID控制器的各项参数时
为了减少整定参数数量,在控制系统的设计中可以选择使用PI控制器这一方案以简化校准过程。为确保系统的安全稳定运行,在调试阶段应当合理设定初始控制参数值,并建议采用较小的比例系数以及较长的积分时间以避免可能出现系统不稳定或超调现象的发生风险;随后施加阶跃指令后可通过被控量输出波形可获得系统的各项性能指标如超调率和峰值时间等关键数据;最后基于对PID控制器各个调节参数与其控制系统特性之间的内在联系进行必要的校准调整即可实现更好的控制效果
若阶跃响应的超调度过大,则可能需要降低系统增益并适当延长积分环节的时间常数以改善稳定性;若出现无超调但被控变量增长速度相对迟缓的情况,则应采取相反方向进行参数调整以缩短过渡过程时间。
如果消除误差的速度较慢,可以适当减小积分时间,增强积分作用。
持续进行参数微调,在系统超调值依然较大时适当引入微分调节项,并逐步提升其积分时间常数;持续优化各环节的时间常数、比例系数及积分时间
PID参数调试是一个复杂且相互关联的过程,在实际应用中需要经历多次尝试才能掌握这种方法。
具体有以下几种方法:
(1)试凑法
试凑法是一种手动选择PID参数的方法,其目的是使控制系统的表现符合预期效果。这种方法看似简便却暗含挑战,在仿真环境中(如Simulink),通常能够快速实现这一目标,在实际应用中,则需要投入大量时间和精力去调节这三个参数最终仍未能完成任务
(2)临界比例度法
临界比例度法即是在P作用下进行的,在这种情况下调节比例度以维持系统的稳定振荡状态。随后通过公式计算得出相应的PID参数值。结果显示图1中左侧区域展示了系统的等幅振荡状态,在右侧区域则反映了控制效果的具体曲线特性。结果显示图是通过MATLAB模拟PID临界比例度法控制所得到的具体曲线特性图形。

图1 PID临界比例度法控制的曲线
(3)衰减曲线法
该方法即是在P作用下调节其比例度参数使得系统的响应曲线按照4:1或10:1的比例完成衰减,并进一步利用相应的公式计算出PID参数值。如图2所示,在图中左侧区域展示了系统的衰减特性右侧则反映了控制效果。通过MATLAB仿真软件模拟实现了该方法的应用,并在此基础上绘制了相应的 PID 衰降曲线效果示意图。

图2 PID衰减曲线法控制的曲线
(4)反应曲线法
反应曲线法是通过开环状态施加阶跃信号,并使用一阶与纯滞后环节相结合来模拟原系统的行为特征。进而通过Z-N或C-C公式计算出PID参数,并将其应用于实际控制系统中以获得预期响应效果(如图3所示)。其中左半部分展示了系统的响应曲线特性,在右侧则呈现了相应的控制效果表现。此外,在图4中展示了一个三阶系统的典型特性分析结果(即临界比例度法所得的相关参数)。最后如图所示为基于MATLAB仿真实现的PID反应曲线法控制效果展示图像

图3 PID反应曲线法控制的曲线
