PID算法

1.直接先代码后分析

   

int err=0;
double kp=0.034;//比例系数
double ki=0;//积分系数
double kd=0.05;//微分系数
int last_err=0;
int ierr=0;
int derr=0;
..............
int pid_pwm(int d1,int d2){
   int temp=0;
   err=d2-d1;//误差
   ierr+=err;//累计误差
   derr=err-last_err;//误差变化趋势
   last_err=err;//同步
   temp=kp*err+ki*ierr+kd*derr;//离散求值
   return temp;
}
.........
//此处省略pwm初始化,这个是统一的,随便搜就能找到
int angle=1500;//舵机刚开始转动角度为90°   90*(2500-500)/180+500=1500
//关于pwm控制舵机很简单,要求pwm:50HZ,占空比1/40~1/8表示舵机旋转0~180°
.........
void main(){
while(1){
    //一直循环
    angle+=pid_pwm(disatnce1,distance2);
    TIM_SetCompare1(TIM2,angle);//输出pwm控制舵机转动角度
   }
}

分析:

    比列环节:误差乘以比例系数,控制输出逼近。

    积分环节:累计误差乘以积分系数,控制输出逼近。消除稳态误差。

    微分环节:误差的变化乘以微分系数,减缓趋势。减缓比例环节引起的震荡。

     我只用了PD比例和微分控制,可以发现满足了我的使用要求。

                     纸飞机调试助手,你值得拥有。

  这就是超声波循迹小车pid算法的原理。

2.有没有一阶滞后滤波和卡尔曼滤波的感觉?

     它们的确有相似之处,就是不停的循环计算,利用过去值推测未来值。把推测值当成真实值,因为真实值只有上帝知道。

3.难点

      1.理解算法原理

              比例就是饿了大口吃,积分就是吃饱了还差点再吃一小口,微分就是快要吃饱了口张小点,防止一会饿一会撑。

       2.设置合适的PID系数

         先比例系数,再微分,再积分,靠经验(就是网友说的口诀)和感觉(对数字的敏感程度)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值