飞思卡尔智能车大赛技术报告
4.4.1程序结构
PID算法作为整个软件控制的核心,需要不断试验、更改参数数值。因此在程序结构规划上将其分为PID路线控制与PID动力控制两部分,分别间接控制舵机与电机。前者主要负责对舵机角度的控制,输入轨道信息(app_val),运算结束时输出舵机控制信息(代码中变量名helm_ctrl)。当前应该达到的速度(代码中变量名keepspeed),是PID路线控制的另一个输出信息。其数值的确定依赖于舵机控制信息(helm_ctrl),依据的基本规则是舵机偏转角度越大,车体所应达到的车速越小。PID动力控制部分将对目标速度(keepspeed)和当前速度(vspeed)再次进行PID运算,得到电机控制信息(moto_ctrl)并交给外部设备控制模块处理,以达到控制速度的目的。两个部分通过外部全局变量交换信息,达到PID路线控制部分间接影响PID动力控制的目的。同时又将硬件控制模块与PID模块分离开来,两者之间也是通过外部全局变量交换信息。这种方法也利于后期的程序阅读和调试。PID算法程序结构示意图如图4.10所示。
4.4.2 PID控制算法的选择
在PID控制算法的选择上,都选用了增量式PID控制算法。因为在增量形式的控制算法中,控制作用的比例、积分和微分部分是相互独立的,便于检查参数变化对控制效果的影响,在后期调试过程中可以起到较好的效果。
图4.10 PID算法程序结构示意图
所需公式为:△u(k) = Kp[e(k) – e(k-1)] + Ki e(k) + Kd[e(k) – 2e(k-1) + e(k-2)],其中△u(k)表示增量,e (t)为系统的控制偏差,Kp为比例增益,Ki = Kp T / Ti 表示积分系数,Kd =KpTd / T 表示微分系数。
Kp 比例增益起比例调节作用,系统一旦出现了偏差,比例调节立即产生调节作用以减少偏