u=kperror+ ki∗∫∗∫error 离散情况下积分其实就是做累加
    微分,说白了在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即u=kd
    (error(t)-error(t-1)),其中的kd是一个系数项。可以看到,在刹车过程中,因为error是越来越小的,所以这个微分控制项一定是负数,在控制中加入一个负数项,他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。从常识上可以理解,越是靠近停车线,越是应该注意踩刹车,不能让车过线,所以这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(实际上是一个负数)就会很大,从而表示应该用力踩刹车才能让车停下来

    PID理解 - 图1
    PID理解 - 图2

    PID理解 - 图3

    增量式和位置式的区别:
    位置型PID控制器的基本特点:

    • 位置型PID控制的输出与整个过去的状态有关,用到了偏差的累加值,容易产生累积偏差。
    • 位置型PID适用于执行机构不带积分部件的对象。
    • 位置型的输出直接对应对象的输出,对系统的影响比较大。

    增量型PID控制器的基本特点:所谓的增量,就是本次控制量和上次控制量的差值

    • 增量型PID算法不需要做累加,控制量增量的确定仅与最近几次偏差值有关,计算偏差的影响较小。
    • 增量型PID算法得出的是控制量的增量,对系统的影响相对较小。
    • 采用增量型PID算法易于实现手动到自动的无扰动切换。

    PID调试一般原则:
    a.在输出不振荡时,增大比例增益kp。
    b.在输出不振荡时,减小积分时间常数ki。
    c.在输出不振荡时,增大微分时间常数kd。
    (他们三个任何谁过大都会造成系统的震荡。)

    一般步骤:
    a.确定比例增益P :确定比例增益P 时,首先令ki=0、kd=0,使PID为纯比例调节。

    补充:如何确定kp的大致范围?举例如下:
    确定PWM的范围,例如,定时器最大的PWM为7200,此时占空比为100%,电机应该是全速运行。
    如果小车需要直立,摆幅,差不多就要
    ≤10°**。,如果超过此范围,小车抖动较为厉害

    根据直立环的程序:

    1. balance=balance_UP_KP*Bias+balance_UP_KD*Gyro;

    由于PWM最大是7200,角度在10°,反推可以得到:
    直立环的P可选范围应该在0~700。

    kp由0逐渐加大,直至系统出现振荡;再反过来,从此时的kp逐渐减小,直至系统振荡消失,记录此时的kp,设定PID的kp为当前值的60%~70%,调试完成。

    b.确定ki kp确定后,设定一个较大的ki的初值,然后逐渐减小ki,直至系统出现振荡,之后在反过来,逐渐加大ki,直至系统振荡消失。记录此时的ki,设定PID的ki为当前值的150%~180% 。

    c.确定kd kd一般不用设定,为0即可。若要设定,与确定kp和ki的方法相同,取不振荡时的30%。
    d.系统空载、带载联调,再对PID参数进行微调。**

    串级pid
    注意外环都是本身误差,内环是速度,如位置控制外环是位置,内环是速度,是因为位置改变的实现是靠三个方向的速度积分出来的。同样姿态控制中,外环是角度差,内环是加速度,是因为角度的实现是靠角速度过渡来的,他们都是这样的一个过渡过程。实际中如果追求响应的快捷,也可以直接控制内环,或者直接控制姿态。

    角速度不为零,积累,产生角度误差
    角度环-外环 角速度环-内环
    先调内环,再调外环

    角度环输出—-期望角速度 角度误差和角速度相联系

    加权重 减小误差

    控制舵机 用位置式pid
    举个例子,位置式PID可以应用在舵机上。因为舵机本次的pwm输出值与上次pwm输出值关系不太,舵机需要的是快速转到某个角度。
    假设舵机pwm输出1000时舵盘转轴为90°,pwm输出0时舵盘转轴为0°,pwm输出2000时舵盘转轴为180°。
    现在舵机pwm输出为1500,我们要让舵盘转到最中间。
    在这里我们采用PD控制,即I值为0(I值为偏差的积分,即对偏差求和。我们当时试验小车的舵机控制时发现I值可以省略,PD控制足矣。

    移植MPU6050DMP库自检不过:可能是模块没放平