1.云台PID的调试方法

1.1.以前的PID调试方法

我们上一年的师兄给出的调参方法是有问题的,按照PID原理来说,应该是 Kp+Ki 控制,Kd是可以抑制震荡,但是也会拖慢系统响应,而且过大的Kd会导致电机在正常运动时会出现抖动现象。但是之前他们为什么要 Kp+Kd 控制,我猜测可能是因为当时都是用彬哥制造的陀螺仪,而彬哥制造的陀螺仪由于实时性很差,接收周期大概在 14ms 左右,只有不到 100HZ 的响应时间,按照正常来说,云台陀螺仪至少要有 500HZ 以上(也就是 2ms 以上)才能调,但是他们就是由于实时性太低,所以正统的调参方式并没有太大效果,而且由于实时性太低,要是不给前馈补偿,是无法调到像华工等学校这么“硬”。

1.2.现在的调试方法

目前使用的陀螺仪是大疆 A 板的板载陀螺仪,使用 SPI 通讯,1ms读取信息。调试方法使用华工交流回来的办法。大概思路是先把内环的 Kp和Ki 先确定,积分分离和积分阈值也要确定好,之后外环就可以随便给。

具体方法:

1.3.PID参数极限调法

1.3.1.外环加上 Kd

上诉的方法只在内环进行 PI 控制,外环进行 P 控制,但是有时调到不抖且响应快的时候,阻尼感并不会很强烈。但这个时候其实系统并不是最极限的状态,要是对此不满意,还能在此基础上再往极限方向发展。可以在外环上加上 Kd 控制。

但是加上 Kd 控制会出现一个问题,加大了云台会开始抖,但是给小了对效果还是不满意,那么就要进行滤波操作了。

1.3.2.对输入或输出滤波

  1. 对输入误差进行滤波

    对传入 PID 的数据进行滤波,低通或者一阶卡尔曼等都可以。

  2. 对外环 Kd 进行滤波

    系统是由于我们加入 Kd 才会出现抖动,那么我们也可以用滤波去消除低频抖动。也是可以使用低通或一阶卡尔曼滤波器进行滤波,但是我尝试后觉得一阶卡尔曼的滤波效果要比低通更好,这个可以看本身现象调整。滤波的对象就是 Kd 算出的结果——d_out。

    pid_t->d_out = pid_t->Kd * (pid_t->err - pid_t->err_last);      //得到 Kd 输出值
    pid_t->d_out = KalmanFilter(&Cloud_YAWODKalman, pid_t->d_out);  //一阶卡尔曼滤波
    

    滤掉低频抖动后,Kd 的参数还能继续给大,但总会有一个极限,实在到了极限也就没办法了。

2.底盘跟随PID的调试方法

单纯单环位置式PID在云台摆动大角度时底盘会出现超调现象,一个是与地面摩擦力和机械结构有关,还有一个是与功率有关。

实验室楼下场地地胶本来比较滑,加上功率限制,导致底盘在大幅度自旋的时候停下时无法提供比较大的反向电流,底盘就会超调。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/92d64304-4085-44b9-ab73-97c5aa5b6659/Untitled.png