PID
PID,是一种常见的控制器,即使用比例积分微分对误差进行控制的一种算法。
适用系统:二阶以内线性系统,齐次性,叠加性的系统。
数学公式
若
记
将以上公式进行拉普拉斯变换后可得(拉普拉斯变换我也没学,等后面学了再补充吧)
故可得 PID 传递函数
参数解释
代码实现
C
/*增量式*/
pid->now = get_motor->speed;
pid->target = target_speed;
pid->err = pid->target - pid->now;
pid->output = pid->kp * (pid->err - pid->last_err) + pid->ki * pid->err +
pid->kd * (pid->err - pid->last_err * 2 + pid->previous_err);
pid->previous_err = pid->last_err;
pid->last_err = pid->err;
串级 PID 控制
angle->speed
角度环作为内环,速度环作为外环,角度换的输出值作为速度环的目标值,双重 PID 控制,达到更精确的控制效果。
current->speed
同上述控制方式,读者可以自行思考。
不止如上双环 pid 的控制方式,还可以使用三环四环进行控制。
带前馈的 PID 控制器
为了更精确地控制运动,我们还可以在 PID 的基础上加上一个前馈控制,即 FPID,对目标值进行预测提前调整。由于笔者还未使用过该类型控制器,暂时不写。