|
本人在校学生,刚开始研究飞控程序,以下是在飞控源码下看到的一段程序
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的输入量来算,而要用速率来算,这样的好处是什么???还望高手指点一二。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|