xiongwy 发表于 2015-9-25 11:59:00

飞控在用pid调节过程中,以角度误差和角速度误差作为PID.....

本人在校学生,刚开始研究飞控程序,以下是在飞控源码下看到的一段程序
nt32_t AP_RollController::get_servo_out(int32_t angle_err, float scaler, bool stabilize, int16_t aspd_min)      此函数的目的是通过参数1角度误差值作为输入量,直接返回舵机的控制输出量,此函数里面是调用了_get_rate_out(float desired_rate, float scaler, bool stabilize, int16_t aspd_min);函数实现的,如下:
{
    if (_tau < 0.1)      
    {
      _tau = 0.1;
    }
       
        // Calculate the desired roll rate (deg/sec) from the angle error
        float desired_rate = angle_err * 0.01f / _tau;                      // 角度到角速率的转换

    return _get_rate_out(desired_rate, scaler, stabilize, aspd_min);    真正的PID计算是在这个函数里面的,这里是先用上面的角度误差值计算成速率,再以速率作为参数1的输入量返回控制舵机的输出量,
}
这里的问题就是他为什么不以角度误差值直接作为PID的输入量来算,而要用速率来算,这样的好处是什么???还望高手指点一二。

lcw_swust 发表于 2015-9-25 12:17:57

可能是串级PID

xiongwy 发表于 2015-9-25 14:55:33

lcw_swust 发表于 2015-9-25 12:17
可能是串级PID

嗯,确实是串级pid,由于刚开始研究这东西,对于里面很多的东西对于我来说都是未知世界,现在要做的就是遇到一个学习一个,解决一个,非常感谢你的指点
页: [1]
查看完整版本: 飞控在用pid调节过程中,以角度误差和角速度误差作为PID.....