1 PID介绍

PID(Proportional Integral Derivative)控制系统。其实质是根据输入的偏差值,按比例、积分、微分的函数关系进行运算,运算结果用以输出进行控制。它是在长期的工程实践中总结出来的一套控制方法,实际运行经验和理论分析都表明,对许多工业过程进行控制时,这种方式都能得到比较满意的效果。

u:输出信号,e: 系统误差信号。Kp比例系数,Ki积分系数,Kd微分系数。

2 腿轮PID整体思路

下面红色箭头形成闭环控制,串联PID,保持平衡并有速度。当静态平衡时,就只需要平衡PID,无需无刷电机和速度PID。

3 旋转PID

只用了比例控制.

Turn.pidout=Turn.Kp*Turn.err;

4 左右轮速度PID

Avelocity.integral += Avelocity.err*0.01;

Avelocity.derivative = (Avelocity.err-Avelocity.err_last)/0.01;

Avelocity.pidout = Avelocity.Kp*Avelocity.err + Avelocity.Ki*Avelocity.integral + Avelocity.Kd*Avelocity.derivative;

5 左右平衡PID

Abalance.err = Xangle-Target;

Abalance.integral += Abalance.err*0.01;

Abalance.derivative = gy.y //读取陀螺仪的

Abalance.pidout = Abalance.Kp*Abalance.err+Abalance.Ki*Abalance.integral+Abalance.Kd*Abalance.derivative;

6 高度调节PID

这个是单独pid,后上面的pid关系不大。通过调节舵机控制高度。

用了比例系数、积分系数。Kd=0,可以没用。

float p = Height.Kp*(Height.err-Height.err_last);

float i = Height.Ki*Height.err;

float d = Height.Kd*(Height.err-2*Height.err_last+Height.err_last1);

Height.pidout = Height.pidout+p+i+d;

7 滤波

需要对PID输入的参数滤波,保持机器人稳定,如输入的速度、油门等。

8 参考

轮腿机器人Hyun开源地址:GitHub - HuGuoXuang/Hyun: 轮腿机器人:主控esp32 ,陀螺仪MPU6050,PM3510无刷电机和simplefoc驱动器。

Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐