电赛经验分享——一文看懂PID


⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。
⏩本文对电赛中经常用到的控制算法-PID做一个简单的讲解。
⏩感谢你的阅读,不对的地方欢迎指正。
加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!


PID算法

红外

尽可能不用红外数字量传感器,用灰度

由于使用模拟量输入,数据较为连续(线性),可以考虑使用PID进行控制

其中三个红外管的功能不同,左右两个红外管的作用是判断传感器离黑线边界的距离,获取的AD值越大说明离黑线越远,则舵机需要转动的角度也就越大。中间的一个红外管的作用是判断是否传感器在黑线内

将循迹传感器固定在小车上,传感器离轨道的高度为3cm左右,假设左两个红外传感器之间的距离和轨道黑线的宽度相同为3cm,传感器从左到右移动获得的图像如图6所示:

img
图1 左右传感器向左移动图像
 将右传感器值减去左传感器值可得到图像如图2所示:

img
图2左右传感器相减数据整合图
 这时获取的数据有效长度只能在3cm黑线轨迹之内,当数据为0时表示小车循迹方向没有偏差,大于0说明小车往左偏,小于0说明小车往右偏,数值越大说明偏离的越大。但是由于数据有效长度只有3cm当小车速度快时,容易冲出有效循迹黑线范围,同时我们也注意到,有效长度左边和右边有一段数据没有用到,我可以尝试将左有两段没用用到的数据纳入到有效处理数据。

img
图3 根据中传感器获取左右阈值点
 如上图3所示,我们可以通过中间的红外传感器来获取,当中间传感器小于阈值时,通过判断左右两个红外传感器相减值得正负来处理左右两边的数据,数据翻转将斜率变为原来2倍。得到的最终效果图如下如所示,最终得到的宽度为原来3倍左右,为9cm。即使传感器完全偏离黑线,最终也会回来,最终达到处理后的效果为图4所示。

img
图4 最终数据处理效果
 图4为将模块从左到右移动后三个红外对管的数据和整合后的数据输出情况,由于手动移动的,所以数据有点波动。

红外循迹传感器PID循迹算法_三路红外pid巡线-CSDN博客

摄像头

摄像头循迹就相对好理解,将摄像头的帧保存处理,帧中必须出现所寻的黑线,通过计算黑线与帧中线的偏移量来作为输入

PID

什么是PID

PID是比例、积分、导数的首字母缩写。简单来说就是你有一个实际值和一个目标值或一个设定值。您可以根据目标和实际值之间的差异对系统进行一些调整。

情景举例

有一辆车以10m/s的速度行驶,发现前方50m处有障碍物,要求小车停在障碍物前刚好10m处,如何制动

理想状态下,不考虑其他外界因素,通过简单的物理公式计算可得如果小车以1.25m/s*s的加速度减速即可达到要求。

但由于实际情况无法做到i理想状态(理想状态下的线性关系很有可能是非线性的,甚至说理想状态下也是非线性的),除了加速度难以保持外,还有摩擦力,空气阻力等不确定因素,因此无法直接套用公式。

这个时候我们就需要用到另一种运动控制的算法——PID

P(比例)

首先,我们思考一下我们要控制的是速度,目标值是障碍物前10m,现在我们要通过改变速度来改变剩余距离的大小。

上面的加速度我们抛弃这个概念,现在只关心速度,我的速度多少只需要剩余距离这个变量决定,也就是说我们引入一个比例系数Kp,让它与剩余距离相乘,剩余距离越少则速度越慢,最终剩余距离为0时速度也减到0。(注意,此时速度与距离为正相关关系)

我们理论上每次减小速度,固定时间内行驶距离减少,最终会无限趋近于障碍物前10m这个位置。

此时我们将目标值与实际值的差叫做误差error

u= Kp*error

这就是P的含义

举一反三,循迹时,我的数据显示我的小车向右偏移了50个单位,目标值是0个单位,也就是不偏移,我的P定义为Kp,什么含义

那么具体来说,P的大小又决定了小车回正这个行为的什么(回正的速度),太小会怎么样(回正缓慢,甚至不回正),太大会怎么样(回正过快,导致小车又向左偏移)、

I(积分)

现在考虑稳态误差影响,小车的速度在减小的同时,各种外界因素的影响也在变化。我们可以通过每一次的目标值与实际值的差值求和的来求总误差。当然这个总误差也需要一个系数来平衡。因此我们引入积分系数Ki。也就是我们每次按比例减小速度的同时,由于误差的影响,还应该加减平衡后的总误差。

u= Kp*error+Ki∗∫ error

举个例子:小车速度变小变为了8.75m/s,行驶之后,实际值比预期值多了0.1m,那么我们会想到因为误差导致这个速度下达不到预期值,因此下一次求比例后我们就要稍微增大速度的值,而这个增大的部分就是平衡后的平均误差。

举一反三:循迹时,我的数据显示小车向右偏移了50个单位,目标值是0,P定义的0.5,第一次回正向右偏移40,而第二次回正是向右偏移31,我求得总误差是(71),那么在下一次在调整回正速度时,我们应该怎么做(u= Kp*error+Ki∗∫ error)

D(微分)

换一个另外的例子,考虑刹车情况。平稳的驾驶车辆,当发现前面有红灯时,为了使得行车平稳,基

。本上提前几十米就放松油门并踩刹车了。当车辆离停车线非常近的时候,则使劲踩刹车,使车辆停下来。整个过程可以看做一个加入微分的控制策略。

微分,说白了在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即u=kd*(error(t)-error(t-1)),其中的kd是一个系数项。可以看到,在刹车过程中,因为error是越来越小的,所以这个微分控制项一定是负数,在控制中加入一个负数项,他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。(对未来进行预测)

减少震荡

举一反三:循迹时,我的数据显示小车向右偏移了50个单位,目标值是0,P定义的很大,第一次回正向右偏移20,而第二次回正是向右偏移5,这个时候我们主观上想让小车回正的速度(慢下来),不然就会又向左偏移,因此我的引入Kd解决这个问题

img

离散化后

img

再化简

img

思考一下如何在程序中使用(循环,递归,函数调用)

PID应用

1.位置式PID和增量式PID

位置式PID

img

缺点:

1)、由于全量输出,所以每次输出均与过去状态有关,计算时要对ek进行累加,工作量大;

2)、因为计算机输出的uk对应的是执行机构的实际位置,如果计算机出现故障,输出的uk将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实生产际中是不允许的

3)、如果偏差一直是正的或者负的,位置式PID在积分项会一直累积,因此必须对积分项进行限幅,同时也要对输出进行限幅。当偏差开始反向变化,位置式PID在积分项需要一段时间才能从最大值减下来,造成输出的滞后。

增量式PID

img

优点

1)、根据增量式PID的表达式可以很好地看出,一旦确定了 KP、TI 、TD,只要使用前后三次测量值的偏差, 即可由公式求出控制增量。而得出的控制量▲uk对应的是近几次位置误差的增量,而不是对应与实际位置的偏差,因此没有误差累加。

2)、增量式PID中不需要累加,计算量小。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果,并且在系统发生问题时,增量式不会严重影响系统的工作。

缺点:

1)、积分截断效应大,有稳态误差;

2)、溢出的影响大。有的被控对象用增量式则不太好;

什么时候使用什么PID

在设计PID控制器时,应该考虑下什么时候用增量式,什么时候用位置式。需要看控制器输出u与控制目标之间的关系。举个例子:

通过带有调节阀的管路向水箱注水,控制输出u为阀门开度,如果控制目标是注水速度(流量),则采用增量控制,达到目标流量后阀门会保持;如果控制目标是水位,则采用位置式,达到目标水位后阀门会基本处于零位(积分作用下会保持一定开度)。

可以看出,当控制输出u,和控制目标是一一对应关系(一定阀门开度对应一定流量)时,采用增量式;当控制输出u,影响的是控制目标的速度(水位变化的速度,即流量)时,采用位置控制。

又比如,通过油门控制车速,也是增量控制,根据期望速度加减油门,速度到了保持住。

2.PI、PD、PID

PI,PD,PID系统的适用范围,不同的控制策略适用于不同的控制系统,对于PID策略,用户也可仅使用其中一部分功能或所有参数来控制不同的系统,例如可以使用PD调节器来调节大滞后环节。

1、PI调节器,兼顾快速性和准确性,减小或消除静差(I调节器无调节静差),由于积分项的稳态误差是一直累加的,所以不适合惯性较大的系统,适合进行微调(平衡小车速度环)

2、PD调节器,调节偏差快速变化时使调解量在最短的时间内得到强化调节,有调节静差,适用于大滞后环节,因此需要快速稳定的系统且对静差要求不高的系统可以使用PD,但由于P在最后无限趋近目标值且几乎不变化,D的值也越来越小,因此会有静差。宏观来看就像是对系统施加了阻尼效果,且永远达不到目标值。(平衡小车直立环)

3、PID调节器,兼顾PD调节器快速性,结合I调节器的无静差特点,达到比较高的调节质量,但是两者的缺点也会放大,并且调参也更加复杂。

3.其他应用

串行PID,并行PID,自适应PID控制等等

PID调参

调参顺序KP->KD->KI

根据以上内容思考,说白了还是玄学,除非有很深的数学底子。

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小光学嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值