我是靠谱客的博主 犹豫蓝天,最近开发中收集的这篇文章主要介绍ROS底盘电机速度环控制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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底盘电机速度环控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部