PID参数设定

在电机的控制领域,不同的电机有不同的驱动方式,其中应用最广泛的就是PID(proportion integration differentiation)控制。P、I和D分别指比例控制,积分控制和微分控制。其算法简单可靠性高,广泛应用于工业过程控制,至今有90%左右的控制回路具有PID结构。在双轮移动机器人,大多数的电机的速度控制和反馈系统如下:
PID参数设定_第1张图片
在上图模型中,根据指定速度和实际速度构成控制偏差,将偏差按照比例、积分和微分通过线性组合构成控制量,对被控的电机进行控制。其控制规律为:
在这里插入图片描述
判断一个控制系统是否优越,有三个指标:快、准、稳。”快”就是要求马达转速能快速达到指定的转速,”稳”是要求转速能够稳定波动小,”准”就是要求要求达到的转速与输出的转速之间的误差偏小。
如当前电机转速为20r/s,现在想达到100 r/s,误差则为80 r/s。假设仅仅采用比例控制的情况下。取0.5,,当t=1的时候(表示第一次对系统控制),那么u=0.580=40 r/s,则转速升到了60 r/s。以此类推,则t=3的时候便可以达到最终速度。但是单单比例控制是不够的的,如果车轮出现摩擦。假设实际得到的转速由于摩擦力存在总比指定的少10r/s,那么经过几次调节到达90 r/s的时候就没法变动了,因为转速为80 r/s的时候误差为20 r/s,而205=10 r/s,这样会导致直接转不动了。由于这种情况的存在,所以引入积分控制。
积分控制与误差的积分成正比,所以比例加积分的控制算法为:
在这里插入图片描述
t=1时候的误差error是80r/s,第二次的误差是40r/s,至此,误差的积分(离散情况下积分其实就是做累加),=80+40=120 r/s。 这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数乘以这个积分项。由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差(假设在仅有比例项的情况下,系统卡在稳态误差了,即只能停留在80 r/s。由于加入了积分项的存在,会让输入增大,从而使得马达的转速可以大于80 r/s,渐渐到达目标的100 r/s)这就是积分项的作用。
假设马达快要达到100 r/s的时候,想要马达能够缓慢的达到100 r/s,而不是突然超过100 r/s,这就是要求能够减少波动。控制,在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即
在这里插入图片描述
其中kd是一个系数项,对于、、参数则需要根据不同的电机马达进行相应的调整。

下面是通过IMU数据对移动机器人的方向进行调整的demo,供大家参考学习。

double goController::Imu_PID_set(double current_imu_data, double aim_imu_data){
    double error = 0;
    double p_error = 0;
    static double i_error = 0;
    double d_error = 0;
    
    error = - current_imu_data + aim_imu_data;
    p_error = error;
    i_error = p_error + i_error;
    d_error = error - y_error * 2 + yy_error;

    ros::param::get("~KP", KP);
    ros::param::get("~KI", KI);
    ros::param::get("~KD", KD);

    double pub_yaw = KP * p_error + KI * i_error + KD * d_error;
    
    yy_error = y_error;
    y_error = error;
    //ROS_INFO("pub_yaw :%f",pub_yaw);
    return pub_yaw;
}

你可能感兴趣的:(移动机器人开发)