最近没啥可写博客了的,而且自己的毕业设计刚好是ROS的SLAM+MoveIt相关的,怕写的太多论文查重没法通过。

最近有小伙伴联系到我,问了我八个ROS问题,我觉得很有意义,所以在这里给大家整理一下供大家一起学习。

大家在学习有困惑可以发送问题给我(1692697820@qq.com),我会找时间整理并回复大家。也欢迎大家在“泡泡”里面进行提问~

这里我们来讲解第六个问题,如何系统性的进行PID调参!


这里我们先聊聊什么是PID~

	当今的闭环自动控制技术都是基于反馈的概念以减少不确定性。反馈理论的要素包括三个部分:测量、比较和执行。测量关键的是被控变量的实际值,与期望值相比较,用这个偏差来纠正系统的响应,执行调节控制。在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。

	PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分单元I和微分单元D组成。PID控制的基础是比例控制;积分控制可消除稳态误差,但可能增加超调;微分控制可加快大惯性系统响应速度以及减弱超调趋势。

	这个理论和应用的关键是,做出正确的测量和比较后,如何才能更好地纠正系统。

	PID(比例(proportion)、积分(integral)、微分(differential))控制器作为最早实用化的控制器已有近百年历史,现在仍然是应用最广泛的工业控制器。PID控制器简单易懂,使用中不需精确的系统模型等先决条件,因而成为应用最为广泛的控制器。

​ 以上内容节选自百度百科!

PID控制有很多,速度环、位置环、扭矩环等等,我们在ROS系统下用的只是速度环控制——设定一个转速使电机的真实转速接近!注意,这里是接近,不是到达!

PID总是搞得玄而又玄,很多人听说PID就觉得头大,其实PID一点都不困难!不过确实是但看这张图,我也不想去学习PID,一看就是很难!这里关于PID的内容有我之前的一篇博客《PID一点都不难》!

这里我们来聊一个问题,如何实现对电机的转速控制!现在你有一个直流减速编码电机,需要通过单片机的IO口输出PWM来控制电机的转速,需要你求出一个PWM和速度值的关系,实现对电机转速的控制。

这里我们需要通过对PWM值的调节来实现速度的控制。通过直流编码电机上面的编码器,我们可以计算得到电机的实时转速,如果实时转速比我们预设值小,那么我们就需要来加大PWM来提高转速;如果实际转速比我们预设值高,那么我们就需要来减小PWM来降低转速。最终要实现就是让实际转速尽量接近预设值,注意是接近,而不是到达,当然最好达到!

Error偏差值= setpoint目标值-output反馈值

P比例= Kp比例常数* Error偏差
I积分= Ki积分常数* Sum_Error偏差总和
D微分= Kd微分常数* (Last_Error上次偏差-PrevError上上次偏差)

Output = P比例+ I积分+ D微分

这个,就是我们ROS小车底盘上面,设定速度值转成PWM值的计算!

void doPID(SetPointInfo * p) {
  long Perror;
  long output;
  int input;
  
  input = p->Encoder - p->PrevEnc;
  Perror = p->TargetTicksPerFrame - input;

  output = (Kp * Perror - Kd * (input - p->PrevInput) + p->ITerm) / Ko;
  p->PrevEnc = p->Encoder;

  output += p->output;
  if (output >= MAX_PWM)
    output = MAX_PWM;
  else if (output <= -MAX_PWM)
    output = -MAX_PWM;
  else
    p->ITerm += Ki * Perror;

  p->output = output;
  p->PrevInput = input;
}

这个函数是ros_arduino_bridge固件diff_controller.h文件里面的PID计算函数实现~

这个函数是某机器人底盘上面关于PID计算函数实现~

调试中的PID曲线展示,蓝色是预设值(期望值),红色是真实值(通过编码器计算得到的)~

用PID的很多都是直接套用上面的公式,然后修改三个比例系数。通过看两条曲线,分析真实值和期望值,对三个参数进行修改实现~

如何系统性的调试PID,其实也就是那个口诀!

参数整定找最佳,从小到大顺序查 
先是比例后积分,最后再把微分加 
曲线振荡很频繁,比例度盘要放大 
曲线漂浮绕大湾,比例度盘往小扳 
曲线偏离回复慢,积分时间往下降 
曲线波动周期长,积分时间再加长 
曲线振荡频率快,先把微分降下来 
动差大来波动慢,微分时间应加长 
理想曲线两个波,前高后低4比1 
一看二调多分析,调节质量不会低

先是比例后积分,最后再把微分加!这个是顺序~

接下来是对P、I、D三个比例系数如何调整的口诀~

理想状态两个波,前高后低4比1!这个,你可以来尝试调试一下试试看!(ros_arduino_bridge这一套就可以!)