PID运动控制
视频地址
一、PID控制算法
1.1、PID算法
PID是经典的自动控制算法。核心是对误差的数学运算。这里的误差指的是期望值和实际值之间的误差。
1.2、PID算法的流程图和基本公式

1.2.1、连续型PID公式

在程序中执行PID控制是每隔固定时间去计算一次。因此将上面的公式变成离散型的,简化后公式如下。这样在调整参数时只需要调整Kp、Ki、Kd即可

3、控制过程选择绝对式还是增量式
- 如果期望控制的是一个绝对的值。比如小车运动的位置。就用绝对式
- 如果期望改变的是每次的变化量。例如控制小车的速度。就用增量式
4、串级PID控制原理

5、比例项、积分项、微分项详解
5.1、比例项
5.1.1、比例项说明

比例项
Kp * Ek
5.1.2、比例项的作用
以水池注水为例:
- Kp越大,系统响应越快,越快达到目标值;
- Kp过大会使系统产生较大的超调和震荡,导致系统的稳定性变差;
- 仅有比例环节无法消除静态误差。
5.2、积分项
5.2.1、积分项说明

5.2.2、积分项的作用
以水池注水为例
- Ki越大,系统响应越快,越快达到目标。积分项的引入可以消除稳态误差
- Ki过大会使系统产生较大的超调和震荡,导致系统的稳定性变差。
- 随着时间的增加,积分项数值会越来越大,导致系统响应变慢。
5.2.3、积分限幅
为了防止积分部分太大,导致响应变慢。需要对积分进行幅度限制。当积分值超过或者小于某值后不再变化(如 设置积分最大值300,最小值-300)。
5.2.4、积分分离
积分的主要目的就是消除稳态误差,稳态误差一般出现在接近目标值附近才会产生。为了防止积分累加次数过多而饱和,我们在系统调节前期不进行积分累加。当误差值较大时只进行比例调节,当误差值较小时才引入积分调节。程序上增加对误差的判断,误差值小于设定值时积分项不累加。
5.3、微分项
5.3.1、微分项说明

5.3.2、微分项的作用
以日常生活中水杯倒水为例。控制Uk值接近目标值 抑制Uk与目标值的差值
- Kd值或者变化趋势越大,微分环节作用越强,对超调和震荡的抑制越强。
- Kd过大会引起系统的不稳定,容易引入高频噪声。
5.4、总结
PID控制不一定三项都要参与
- 例如小车平衡,为了提高系统的响应速度,我们只使用了PD控制。
- 例如小车速度控制,为了提高轮子速度变化的连续性以及避免震荡的产生,只采用PI控制。
二、平衡车物理模型及PID分析
2.1、直立环
2.1.2、平衡车平衡物理模型概述
平衡车最主要的功能是平衡,使小车保持直立不倒。这个模型其实类似小时候用手控制棍子不倒。
2.1.1、PD回路
小车直立需要一个快速的响应,并且在平衡车模型中小车收到地球重力的影响几乎不可能产生稳态误差,因为小车只要没达到机械中值就会倾倒,所以这里直接省略掉积分控制。其中:比例起到快速响应作用,微分起到消除震荡作用,
2.1.2、PD直立环的控制回路

机械中值:因为受到小车组装等移速影响,小车的真正平衡位置可能不是0度,我们需要自行测试小车平衡时的倾角。此角度才是我们期望的角度。因为只有小车在机械中值的时候才能保持平衡,实现直立。
2.1.3、PD控制回路公式推导
标准PID公式

将上面的公式整合得到实际的PD公式
直立环

2.1.4、总结
我们仅适用直立环就可以实现小车的直立功能,如果需要控制小车的运动和转向还需要增加小车的速度环和转向环。
2.2、速度环
2.2.1、平衡车速度控制物理模型
小车的车身往哪边倾倒,我们就需要控制轮子往哪边运动,才能保证车身不倒。当小车倾斜角度越大,为了保持平衡需要提供更大的移动速度。如果需要小车一直运动下去,则需要维持倾斜角度。
2.2.2、PI控制回路
速度调节过程中希望速度变化平缓且连续,因此舍去微分控制,以防高频振动现象产生。
控制框图如下:

上面的框图采用了串级PID控制原理,外环为速度环,速度环的输出作为内环的输入,内环直接作用到驱动器。这里外环的输出值表示期望的角度值。
速度反馈可以直接使用编码器的数值,因为速度的定义是单位时间内物体的位移,我们不使用物理世界的m/s的单位。因为是呈比例关系我们为了计算简便直接采用编码器数值在单位时间内的变化量表示速度。又因为我们的PI计算公式是间隔固定周期计算,且编码器在固定时间内读取后直接清零,因此直接读取编码器的数值就可以表示速度。
2.2.3、PI控制回路公式推导

2.2.4、串级控制公式推导

将上面公式展开

2.2.5、速度环模型的物理含义
一切物理现象的背后都是数学解释,那么物理也可以解释数学公式。比如这里为什么最后计算出来的结果是两个环求和?小车直立的关键是轮子左右摆动不断调整后的结果。最初的直立环小车轮子是以速度为0的状态为参考系进行的摆动,引入速度环以后小车依然需要轮子左右摆动调整平衡来实现平衡,而此时摆动的参考系就是设定的速度。以坐标轴来观察,就相当于把X轴垂直移动了。控制直立的振动部分并未变化。因此相当于在保持平衡的同时实现速度控制。后面的转向环依据也是这个原理。
2.3、转向环
2.3.1、平衡车速度控制的物理模型
小车两个车轮的转速不同即可实现转向。因此主要是在直立环和速度环的基础上叠加转向环的PWM即可实现。
2.3.2、转向环的两种期望
- 抑制转向
因为两个电机即使输入的pwm是完全相同的也会产生速度差,所以小车即使没有加入转向环也会自己发生偏转,这时候我们期望加入转向环抑制偏转,实现小车直线行走。因此我们的参数选用负极性抑制这种状态。 - 期望转向
我们直接取消抑制作用,直接对PWM进行加减操作。
2.3.3、公式推导
转向控制不要求特别精确,因此我们在期望转向时只是用P调节,抑制转向只是用D调节。D调节我们直接使用陀螺仪的Z轴角速度。
转向环


三、编码电机
3.1、测速原理

运行过程:
A相比B相超前了1/4周期
-
若A在上升沿
- 此时B相在高电平,则为正转
- 此时B相在低电平,则为反转
3.2、如何得到单位时间内的脉冲数
#include <TimerOne.h>
void setup() {
Timer1.initialize(50000); //每隔50000微秒调用一次中断函数
Timer1.attachInterrupt(timerIsr);
}
void timerIsr(){
rpm = count/period*60/edges_per_cycle/reduction_ratio;
//rmp:转/分,点击前端真实转速
//count:50ms内的信号边沿数。如信号A的上升沿数
//period:调用中断函数的时间间隔,此处是0.05s
//edges_per_cycle:电机后端每圈霍尔脉冲数,理论值为13(根据电机实际情况而定)
//reduction_ratio:电机减速比,理论值为30(根据电机实际情况而定)
}
PID算法

PID算法–位移式

PID算法–增量式

四、PID调参
先是比例后积分,最后再把微分加
曲线震荡很频繁,比例度盘要放大
曲线漂浮绕弯大,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
4.1、PID参数极性
由于传感器的安装方向和设置不同,PID公式的编写原因。会导致反馈值的正负不同,因此在调试之前一定要确定好参数的极性再开始调试。为了防止调试过程中各个环路之间的影响,需要屏蔽掉没有调试的环路。
4.2、直立环调整
4.2.1、 极性确定
- 注释速度环、注释转向环
- 分别把Kp、Kd置0,现象一样
- 极性正确:倾斜小车,车轮转动方向和倾斜方向一致。
- 极性错误:倾斜小车,车轮转动方向和倾斜方向相反。
4.2.2、参数确定
- Kp:先将Kd置0,将Kp参数从小到大,当小车基本可以稳定后继续加大Kp直到出现低频抖动。
- Kd:逐渐增大Kd,当小车可以很好直立后继续加大Kd,直到出现高频抖动。
4.3、速度环调整
直立环保留,将之前的参数*0.6,此时如果没有加入速度环,小车很难保持直立。
平衡小车使用的是正反馈,比如我们小车正在以一定的速度运动,此时需要小车停下,正常逻辑是减小轮子速度,这是负反馈。
但是放到平衡小车上,如果此时减小轮子速度,小车会因为惯性向前倾倒。反而需要加速轮子追上车身,这时倾角减小,直立环作用小车反而会停下。所以需要正反馈。
4.3.1、 极性确定
- 注释直立环、注释转向环
- 极性正确:轻微转一下一个轮子,轮子不断加速知道最大转速。
- 极性错误:旋转其中一个轮子,另一个轮子反向转动。
4.3.2、参数确定
- 打开直立环
- 注释转向环
- Kp:逐渐增加Kp,使小车可以很好的保持直立,且原地不动
- Ki:为Kp的1/200。
4.4、转向环调整
4.4.1、 极性确定
Kp
调节Kp时需要在转向环参数传入期望角速度,可以设定一个10
- 注释直立环
- 注释速度环
- Kp极性正确:用手转动小车,小车帮助旋转。
- Kp极性错误:用手转动小车,小车抑制转动。
Kd
调节Kd时需要在转向环参数传入期望角度必须设定为0,因为不期望旋转
- 注释直立环
- 注释速度环
- Kd极性正确:用手转动小车,小车抑制转动。
- Kd极性错误:用手转动小车,小车帮助旋转。
4.4.2、参数确定
Kp:逐渐增加Kp,使小车可以很好的保持直立,且可以按期望旋转。
Kd:逐渐增加Kd,使小车可以很好的保持直立,且可以按期望稳定在原地。

1847

被折叠的 条评论
为什么被折叠?



