智能小车pid算法

智能小车pid算法

ID:40250005

大小:37.00 KB

页数:6页

时间:2019-07-29

智能小车pid算法_第1页
智能小车pid算法_第2页
智能小车pid算法_第3页
智能小车pid算法_第4页
智能小车pid算法_第5页
资源描述:

《智能小车pid算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、3.1寻迹算法采用PID(PD)控制算法,如果某时刻检测到黑线偏左,就要向左转弯;如果检测到黑线偏右,就要向右转。偏得越多,就要向黑线方向打越大的转角。这就是比例控制(P)。遗憾的是,因为小车有惯性。假设黑线偏左,说明小车偏右了,需要左传舵,等到小车回到中心的时候,停止转舵,可是小车的惯性会使车身继续左转,直到冲过黑线,黑线又偏右。然后控制过程反复,车身是在左右摇摆中向前行走的。这种摇摆叫做“超调”,超调越大,控制越不稳定,容易出轨。为了克服惯性,我们除了位置信息之外,还需要知道轨迹的变化趋势。我们可以用黑线位置的微分值来提前得到变化趋势。

2、用本次位置减去前次位置求出差值,就大致知道偏移量的变化趋势。将该差值和比例相加后一起作为控制量,即可实现提前控制。这就叫做比例微分控制(PD控制)/*PID(PD)控制算法*/intPID_Control(signedcharPosition){intTemp_P,Temp_D,Temp_PID,Temp_I,k;//声明三个变量,用于存放P、I、D三分量的运算结果(I没用上)if(Position==-128)return(No_black);//错误处理(值得改进的地方)else{Temp_I=Position;for(k=0;k<5;

3、k++)Temp_I+=Last_Position[k];Temp_I*=I_coefficient;Temp_P=P_coefficient*Position;//计算比例分量(P)=比例系数*本次位置差Temp_D=D_coefficient*(Position-Last_Position[5]);//计算微分分量(D)=微分系数*(本次位置差-前3次的位置差)//注意由于采样比较快,用本次位置-前3次位置才有足够大的控制量Last_Position[6]=Last_Position[5];Last_Position[4]=Last_P

4、osition[3];Last_Position[3]=Last_Position[2];Last_Position[2]=Last_Position[1];Last_Position[1]=Last_Position[0];Last_Position[0]=Position;/*保存前5次的位置,以备用。Temp_PID=Temp_P+Temp_D+Temp_I;//P分量和D分量相加,得到控制量。if(Temp_PID>5000)Temp_PID=5000;//防止控制量溢出if(Temp_PID<-5000)Temp_PID=-500

5、0;//控制量-5000~5000作为左右满舵Temp_PID=Temp_PID*1/5;//-1000~+1000是左右满舵的输出,因此需要除以0.5/*单片机浮点运算非常慢,所以用乘2除5两次定点运算来替代定点数要先乘后除,才能保证精度,同时要防止溢出,用起来比较麻烦,但CPU和内存开销小。*/return(Temp_PID);}}3.2寻光,避障算法题目要求小车到达C点之后,在光源引导下避开障碍物进入车库,这就要求小车同时完成寻光和避障的功能。如果只进行寻光,小车会撞上障碍物,如果只进行避障,小车也许会离光源越来越远。理论上避障的优先

6、级是要高于寻光的,因为一旦接触上障碍便宣告失败。所以一旦检测到障碍物,小车会立刻执行避障动作,一旦传感器环路没有检测到障碍小车就向光源靠拢,这样能够保证小车在成功避障的条件下逐渐逼近光源,直到走出障碍区之后就能直奔光源而去。这种算法小车执行寻光避障整体采用了状态机的切换,voidFSM(){switch(Status){caseLight_Status:Find_Light();break;//没有障碍物就进入寻光模式caseBarrier_Status:Avoid_Obstacle();break;//检测到障碍进入避障状态default

7、:break;}}具体的寻光采用了149内部的ADC12模块,通过AD读出的光敏电阻的值进行处理。根据传感器环路的结构,以小车前后方向作为Y轴,左右方向作为X轴,五个光敏电阻分别位于0度,45度,90度,135度,180度的位置。先对采回的各个光强进行归一化的处理,然后根据矢量合成的原则,计算出小车应该行进的方向,其中X为两个轮的速度差,Y为共同速度。代码如下://矢量合成,X,Y两个轴,x=0;y=0;//1号光敏电阻,无Y轴,X为负x=x-Intensity*Light[0];//2号光敏电阻,X为-0.707,Y为0.707,45度x

8、=x-(Intensity*Light[1]*707)/1000;y=y+(Intensity*Light[1]*707)/1000;//3号光敏电阻,X为0,Y为正y=y+In

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。