纵向双PID控制器核心内容:
1,油门、刹车标定表的制作
2,位置速度双环PID
输入:定位信息,规划轨迹点,底盘信号
输出:油门/刹车值
核心内容1:油门/刹车标定表的制作
油门-速度-加速度拟合过程代码:
核心内容2:位置速度双环PID
**1,本质要求:PID输入和输出没有量纲的概念的要求,只需要满足输入和输出变化趋势相同即可。上述双环PID考虑了位置和速度,当然也可以考虑更多的影响因素,增加环数,因为无量纲要求,故只需要满足输入和输出变化趋势相同即可。
位置偏差-----位置PID—速度补偿
速度偏差-----速度PID—加速度补偿
** 2,各参数的作用:
P:快速收敛,但会产生超调和稳态误差。
超调是因为控制有延时。稳态误差是因为Error偏差过小时,控制量 = PError,控制量过小所产生的影响较小,无法继续缩小偏差,故产生了稳态误差。
I:消除稳态误差。
Error偏差过小时,控制量 = PError,控制量过小所产生的影响较小,无法继续缩小偏差,但当控制量不断累计时,最终肯定可以消除稳态误差。
工程实践中,当稳态误差在预期范围内时,一般不用I来消除稳态误差,或用较小的I值,因为I易产生超调,且I产生的超调量很难用D来消除。
D:减小超调
当Error变化较快时,易产生超调,增加D可以较小Error的变化趋势,从而较小超调量。
工程实践中,一般只用PD控制器即可,P用于快速收敛,D用于减小超调。当稳态误差超出预期时,可增加I,且I的数值不宜过大,一般I值较小。
位置式PID代码(输出量就是控制量):
double PIDController(double error,double dt){
double retControlVariable = 0;
static double IntegralError = 0;
static double preError = error;
IntegralError += error * t; //积分偏差累计
IntegralError = IntegralError > IntegralLimitMax_ ? IntegralLimitMax_ : IntegralError;//积分限幅
IntegralError = IntegralError < IntegralLimitMin_ ? IntegralLimitMin_ : IntegralError;
retControlVariable = Kp * error //比例
+ Ki * IntegralError //积分
+ (error - preError)/dt; //微分
preError = error;
return retControlVariable; //输出控制量
}
工程实践中,位置式PID的注意事项:
积分的注意事项和缺点:
1,需要加积分限幅。
因为位置式PID直接输出控制量,当误差有跳变或较大幅度变化时,由于积分是误差的累计,控制量会有较大变化,即产生超调。
2,当控制量达到最大或最小值时,应该停止积分作用。
位置式PID在积分项达到饱和时,误差仍然会在积分作用下继续累积,一旦误差开始反向变化,系统需要一定时间从饱和区退出,即产生超调。
故在工程实践中,一般不使用I,直接使用PD控制器。若稳态误差在预期范围外,则使用较小的I值。
仿真和实车调试时横纵向算法需要考虑的关键因素:
1,延时。
仿真基本没有延时,实车不管是油门,制动执行器还是传感器的数据传输都有时间延时。
问题:如何测量这个延时时间?
后果影响:导致超调,特别速度较大时,超调严重,速度较小时,可通过调节PID参数减小影响。
解决办法:增加预测模块。方向盘转角较小时,预测车辆是匀速直线运动;方向盘角度较大时,预测车辆是圆弧运动。
2,转向不足。
仿真的车一般是中性转向,而实车为了安全考虑,一般出厂时调试为转向不足。(因为车速较大时,车辆有过度转向的趋势,故一般调试为转向不足),故需要考虑转向不足,增加前馈控制或者用误差生成控制补偿,从而减小转向不足的影响。
后果影响:导致转向不足,横向偏差超出预期。
解决办法:增加前馈模块。根据Vehicle Dynamics and Control中的公式,即可计算出前馈控制。