日期:2023-02-22 14:52:43浏览量:34809
这里我们来讲解减速电机的转速六个问题,如何系统性的进行PID调参!
这里我们先聊聊什么是PID~
当今的闭环自动控制技术都是基于反馈的概念以减少不确定性。反馈理论的要素包括三个部分:测量、比较和执行。测量关键的是被控变量的实际值,与期望值相比较,用这个偏差来纠正系统的响应,执行调节控制。在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。
PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分单元I和微分单元D组成。PID控制的基础是比例控制;积分控制可消除稳态误差,但可能增加超调;微分控制可加快大惯性系统响应速度以及减弱超调趋势。
这个理论和应用的关键是,做出正确的测量和比较后,如何才能更好地纠正系统。
PID(比例(proportion)、积分(integral)、微分(differential))控制器作为最早实用化的控制器已有近百年历史,现在仍然是应用最广泛的工业控制器。PID控制器简单易懂,使用中不需精确的系统模型等先决条件,因而成为应用最为广泛的控制器。
以上内容节选自百度百科!
PID控制有很多,速度环、位置环、扭矩环等等,我们在ROS系统下用的只是速度环控制——设定一个减速电机的转速使电机的真实转速接近!注意,这里是接近,不是到达!
PID总是搞得玄而又玄,很多人听说PID就觉得头大,其实PID一点都不困难!
不过确实是但看这张图,我也不想去学习PID,一看就是很难!
这里关于PID的内容有我之前的一篇博客《PID一点都不难》:
https://www.guyuehome.com/33646!
这里我们来聊一个问题,如何实现对减速电机的转速控制!
现在你有一个直流减速编码电机,需要通过单片机的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这一套就可以!)
《基于深度学习的机器人平面抓取》
课程将带领大家学习基于深度学习的机器人平面抓取算法的概念和分类,并从零开始搭建抓取检测数据集以及训练经典抓取检测网络GGCNN,并一步一步将GGCNN与pybullet仿真环境和kinova机械臂融合。