概述
1,速度控制要用绝对式pi
/*******************************************************************************
* Function Name : PID_Regulator
* Description : Compute the PI(D) output for a PI(D) regulation.
* Input : Pointer to the PID settings (*PID_Flux)
Speed in s16 format
* Output : s16
* Return : None
*******************************************************************************/
s16 PID_Regulator(s16 hReference, s16 hPresentFeedback, PID_Struct_t *PID_Struct)
{
s32 wError, wProportional_Term,wIntegral_Term, houtput_32;
s64 dwAux;
// error computation
wError= (s32)(hReference - hPresentFeedback);
// Proportional term computation
wProportional_Term = PID_Struct->hKp_Gain * wError;
// Integral term computation
wIntegral_Term = PID_Struct->hKi_Gain * wError;
dwAux = PID_Struct->wIntegral + (s64)(wIntegral_Term);
//Integral limit
if (dwAux > PID_Struct->wUpper_Limit_Integral)
{
PID_Struct->wIntegral = PID_Struct->wUpper_Limit_Integral;
}
else if (dwAux < PID_Struct->wLower_Limit_Integral)
{
PID_Struct->wIntegral = PID_Struct->wLower_Limit_Integral;
}
else
{
PID_Struct->wIntegral = (s32)(dwAux);
}
//PI_OUT
houtput_32 = wProportional_Term/PID_Struct->hKp_Divisor+ PID_Struct->wIntegral/PID_Struct->hKi_Divisor;
//PI_OUT_LIMIT
if (houtput_32 >= PID_Struct->hUpper_Limit_Output)
{
return(PID_Struct->hUpper_Limit_Output);
}
else if (houtput_32 < PID_Struct->hLower_Limit_Output)
{
return(PID_Struct->hLower_Limit_Output);
}
else
{
return((s16)(houtput_32));
}
}
2,角速度闭环用角速度
发现纯P控制不行 还是需要绝对式pi
参考四轴飞行器的角速度控制
而笔者在整定串级PID时的经验则是:先整定内环PID,再整定外环P。
内环P:从小到大,拉动四轴越来越困难,越来越感觉到四轴在抵抗你的拉动;到比较大的数值时,四轴自己会高频震动,肉眼可见,此时拉扯它,它会快速的振荡几下,过几秒钟后稳定;继续增大,不用加人为干扰,自己发散翻机。
特别注意:只有内环P的时候,四轴会缓慢的往一个方向下掉,这属于正常现象。这就是系统角速度静差。
内环I:前述PID原理可以看出,积分只是用来消除静差,因此积分项系数个人觉得没必要弄的很大,因为这样做会降低系统稳定性。从小到大,四轴会定在一个位置不动,不再往下掉;继续增加I的值,四轴会不稳定,拉扯一下会自己发散。
特别注意:增加I的值,四轴的定角度能力很强,拉动他比较困难,似乎像是在钉钉子一样,但是一旦有强干扰,它就会发散。这是由于积分项太大,拉动一下积分速度快,给 的补偿非常大,因此很难拉动,给人一种很稳定的错觉。
内环D:这里的微分项D为标准的PID原理下的微分项,即本次误差-上次误差。在角速度环中的微分就是角加速度,原本四轴的震动就比较强烈,引起陀螺的值变化较大,此时做微分就更容易引入噪声。因此一般在这里可以适当做一些滑动滤波或者IIR滤波。从小到大,飞机的性能没有多大改变,只是回中的时候更加平稳;继续增加D的值,可以肉眼看到四轴在平衡位置高频震动(或者听到电机发出滋滋的声音)。前述已经说明D项属于辅助性项,因此如果机架的震动较大,D项可以忽略不加。
最后
以上就是犹豫蓝天为你收集整理的ROS底盘电机速度环控制的全部内容,希望文章能够帮你解决ROS底盘电机速度环控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复