小车巡线控制算法
控制算法
电机控制算法的作用是接受指令速度值,通过运算向电机提供适当的驱动电压,尽快
地和尽快平稳地使电机转速达到指令速度值,并维持这个速度值。换言之,一旦电机
转速达到了指令速度值,即使在各种不利因素(如斜坡、碰撞之类等使电机转速发生变
化的因素)的干扰下也应该保持速度值不变。为了提高机器人小车控制系统的控制精度,
选用合适的控制算法显得十分必要。控制算法是任何闭环系统控制 方案的核心,然而
并非越复杂、精度越高的算法越好,因为比赛要求非常高的实时性,机器人必须在非
常短的时间内作出灵敏的反应,所以现代的一些先进控制算法,比如模糊控制、神经
元网络控制等就不能应用到小车控制系统里。本系统选用了最常规、最经典的 PID 控
制算法,通过实际应用取得了很好的效果。
1 比例项
控制回路中的第一个偏差转换环节就是比例项。这一环节简单地将偏差 信号乘以常数
K 得到新的 CV 值(值域为-100~100)。基本的比例控制算法如下:
loop:
PV=ReadMotorSpeed()
Error=SP-PV
CV=Error*Kprop
Setpwm(cv)
Goto loop
上一段程序中的 SetPWM()函数并非将 CV 值作为绝对的 PWM 占空比来对待。否则,
不断降低的偏差值会使输出值接近零,而且由于电机工作时需要持续的 PWM 信号,
控制系统将会使电机稳定在低速运转状态上,从而导致控制系统策略失败。
相反,CV 值一般被取作当前 PWM 占空比的改变量,并被附加到当前的 PWM 占空比
上。这也要求 SetPWM()函数必须将相加后得到的 PWM 占空比限制在 0%~100%。正的
CV 值将使电机两端电压增加。负的 CV 值将使电机两端电压降低。如果 CV 值等于
0,则无需改变但前占空比。较低的 K 值会使电机的速度响应缓慢,但是却很平稳。较
高的 K 值会使速度响应更快,但是却可能导致超调,即达到稳定输出前在期望值附近
振荡。过高的 K 值会导致系统的不稳定,即输出不断震荡且不会趋于期望值。
2 微分项
任何变量的微分项被用来描述该变量是如何相对于另一个变量(多位时间)变化的。换句
话说,任何变量的微分项就是它随时间的变化率。如位移随时间的变化率是速度。速
度相对于时间的微分是加速度。
在 PID 控制器中,值得关心的是偏差信号相对于时间的微分,或称变化率。绝大多数
控制器将微分项定义为:
Rate=(E-E )/T
式中,E 为当前偏差,E 为前次偏差值,T 为两次测量的时间间隔。负的变化率表明偏
差信号的改善。当微分项被具体应用于控制器中时,将一个常数乘以该微分项,并将
它加到比例项上,就可以得到最终的 CV 值计算公式:
CV=( KE)+( KRate)
评论14