飞控在用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的输入量来算,而要用速率来算,这样的好处是什么???还望高手指点一二。
可能是串级PID lcw_swust 发表于 2015-9-25 12:17
可能是串级PID
嗯,确实是串级pid,由于刚开始研究这东西,对于里面很多的东西对于我来说都是未知世界,现在要做的就是遇到一个学习一个,解决一个,非常感谢你的指点
页:
[1]