为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

智能车PID的算法推荐

2017-09-27 9页 doc 144KB 26阅读

用户头像

is_180829

暂无简介

举报
智能车PID的算法推荐PID( Proportional Integral Derivative )控制是最早发展起来的控制策略之一,由于其算法简单、鲁棒性(稳定性)好和可靠性高,被广泛应用于工业过程控制,尤其适用于可建立精确数学模型的确定性控制系统。 模拟PID控制系统原理框图 PID是一种线性控制器,它根据给定值rin(k)与实际输出值yout(k)的差值e(t)构成控制方案,利用运放实现模拟PID的一个例子: 式中:  以上为典型模拟PID应用例子。 关于各调节器的作用说明: ♥比例调节器P 1、起调节作用与输出量和给定量的差成正比,...
智能车PID的算法推荐
PID( Proportional Integral Derivative )控制是最早发展起来的控制策略之一,由于其算法简单、鲁棒性(稳定性)好和可靠性高,被广泛应用于工业过程控制,尤其适用于可建立精确数学模型的确定性控制系统。 模拟PID控制系统原理框图 PID是一种线性控制器,它根据给定值rin(k)与实际输出值yout(k)的差值e(t)构成控制方案,利用运放实现模拟PID的一个例子: 式中:  以上为典型模拟PID应用例子。 关于各调节器的作用说明: ♥比例调节器P 1、起调节作用与输出量和给定量的差成正比,有差就有调节作用,所以他的调节结果总是有差存在,这种调节不可消除差,所以叫这种调节为有静差调节; 2、但这种调节作用快,能很快减小误差,是最常用的一种调节器! 3、积分I调节慢,所以PI是最常用的一种搭配! ♥积分调节器I 1、是给定量与输出量的差对时间的积分,在电路里就是用给定量与输出量的差给电容充电,只要时间足够长,电容器的电压总会到达给定量,使输出量与给定量的差为零; 2、积分调节器是一种无静差调节器,意思是说可调节到给定值,做到精确、准确输出;  ♥ 微分控制调节器D 1、,这种控制总是以输出量与给定量的差的变化率成正比,差变化越剧烈,调节作用越大,差变化越平稳,调节作用越弱; 2、这种微分调节作用,使得输出量平稳而很少波动; 3、这种微分调节作用,对输出量的变化、波动产生强烈的阻尼、抑制的作用,就像摩擦力的作用; 数字式PID应用: 增量式PID的算式为: 如果换换成智能车里的方向控制就变为: Pwm_offset=PWMMiddle+PID_P*(error-last_error)+PID_I*(error)+PID_D*(error+pre_error-2*last_error); 其中:error=middle-offset,注意这个里的offset应该有正负之分,左右偏移的值互为相反。这样自然就确定了最后的方向。 PWMMiddle为舵机正向时的值。 转换成智能车里的速度控制信息就变为: pwmtemp=PWMDTY23+PID_P*(error-last_error)+PID_I*(error)+PID_D*(error+pre_error-2*last_error); 其中 error=speed_v(期望速度)-infrared_value7(即时速度); PWMDTY23是PWM中的静态参数。即速度等于零(或者是等于某个安全速度)的参数。 由上述代码中,speed_v示标准速度(期望速度),infrared_value7表示经编码器计算出的即时速度值,通过计算它们的差值error,再利用增量PID控制算法计算出pwmtemp,再对pwmtemp进行处理,最后PID程序处理的结果是给出一个PWM信号,而这个信号就是驱动电机的,当error大,即标准速度和即时速度相差的比较多时,pwmtemp的绝对值相对比较大,则给电机的PWM信号相对较大,这样电机转速相对较快;反之,电机转速则相对较慢。由此可以看出,PID算法主要的功能是,在闭环系统中,利用即时速度的反馈,使得即时速度逼近标准速度的时间尽量变短,这样小车就可以根据路径识别得出的速度标准值,及时调整自己的速度,以适应各种路况。例如,小车正在直道上行进,而且直道的时速应该是各种赛道中最快的,当系统的路径识别算法察觉到前方出现弧度大的弯道后,系统会根据事先调试的结果,给出大弧度弯道的速度标准值,然后PID算法根据速度标准值speed_v和即时速度反馈值infrared_value7对电机的输入信号PWM进行及时调整,反映到实际中,就是小车及时减速并顺利通过弯道。 在增量式PID处理的过程中,有一个步骤需要注意,即在算完△u(k)后,需要把它赋值给电机控制对应的PWM通道信号,这时要判断该△u(k)的值,如果它小于0,则把PWM信号赋值为0,如果它大于PWM信号的最大值,即大于PWM整个周期所对应的数值时,要把PWM信号赋值为该最大值。 在上述控制里面没有关于轨迹偏离信息,实际上就处理不了有关由于轨道偏移而导致的速度变化问。 那么,怎么样才能将加进来。这里就要考虑speed_v这个标准速度(期望速度),即: speed_v= speed-offset(i)*x 这样,我们的期望值就成了一个随着偏移量变化而变化的参数。 余下的问题就是对有关参数进行整定了。一定要测试加实际运行来调整。 对于速度问题可以考虑两个要点:方向制动和正向处理(不加反向制动),在返向制动里要考虑计算出来的值为负数。 1.2.反向制动算法 要使赛车在较短的时间完成比赛,速度自然越高越好,显然速度太高弯道是过不去的,如果以弯道的极限速度匀速跑,又浪费了直道的时间。所以最佳的策略是直道以较高的速度跑,到弯道时再尽快将速度降下来。在入弯减速时如果只靠赛道的摩擦阻力效果显然是不够理想的。为此我们引入反向制动算法。 由于MC33886芯片集成的H桥驱动电路本身就具有反向制动功能,所以不需外加硬件电路。反向制动流程图如图: 在制动时,电机反向电动势对整个系统电路造成的冲击,从而引起单片机工作不稳定,电流过大导致电机过热、电机频繁换向导致电刷打火剧烈导致电机寿命缩短等一系列问题都是需要考虑的。 1.3.速度控制策略 1、为了达到好的速度控制效果,对速度进行闭环控制是必须的。这里所说的速度控制策略是指设定速度的确定——设定速度主要由道路与直道的偏差来决定,道路越接近直道,设定速度越高,反之越低。 车模行驶中的最低速度是这样确定的:令车模以较低的速度匀速行使,在保证无犯规行为出现的前提下,逐渐提高匀速行使的速度,直到车模出现犯规行为,此速度再减去一个安全量,即为所需的最低速度。简单的说,变速行使的最低速度等于匀速行使的最高速度。(一般发生在弯道最急的地方) 车模行驶中的最高速度是这样确定的:在确定最低速度以后,加入变速策略,不断提高最高速度的设定值,直到模型车出现犯规行为,此速度再减去一个安全量,即为所需的最高速度。(一般发生在直道最长的地方) 车模行驶过程中难免出现“失去道路”的情况,对此需要采取一定的安全策略,防止赛车“盲跑”而导致犯规。 2、针对本文所研究的智能车来说,车体速度是大惯性的被控对象。算法输出的控制量只能对电机输出力进行控制。而有一定负载时电机的输出力无论对车轮的转速还是车体的形式速度都是不成正比的,车在刚开始启动的时候速度是零,而电机的输出可能很大;车在匀速行驶的时候速度很快,而电机的输出可能并不是很大。 而且电池电量、车体重量都会对车速造成影响。因此只有用闭环才能对车速进行良好的控制。在车轮对地面不打滑的情况下车体的速度和后轮的转动速度是成正比的。因此我们可以直接用光电码盘对后轮的转速进行控制。 对于这样一个大惯性系统,我们选用PID和棒棒相结合的办法进行速度控制。回路的设定值由经验值确定。考虑到速度控制通道的时间滞后比较小,因此采用PID控制方案,并在进行加减速控制时,引入了“棒棒控制”。 U(k+1)=U(K)+P1*e(k)+P2*(e(k)–e(k-1))+P3*((e(k)–e(k-1)–(e(k-1)–e(k-2))); 公式4 3    PID的公式 其中第一项为积分项;第二项为比例项;第三项为微分项。考虑到被控对象(车体速度)本身是一个大的积分环节,公式中可以将第一项省略,即采用PD控制。 上式分析: (e(k)–e(k-1)–(e(k-1)–e(k-2))= (e(k)–2e(k-1)+ e(k-2)) 棒棒控制体现在哪? E为误差。同时设定误差门限,在误差比较大的时候采用大输出控制电机,将误差在最短时间内减小到所要求的范围,这就是棒棒控制的思想。 电机控制策略,其实就是对模型车速度的控制策略,它是继路径识别之后非常重要的策略,直接关系到整个模型车比赛的性能。速度控制得当,小车才能以最好的状态,在最短的时间完成比赛路程。 1.4.速度PID算法 在计算机控制系统中,数字PID控制算法通常又分为位置式PID和增量式PID。 本次中,我们采用增量式PID。 增量型算法与位置型算法相比,具有以下优点:增量型算法不需要做累加,增量的确定仅与最近几次偏差采样值有关,计算精度对控制量的计算影响较小,而位置型算法要用到过去偏差的累加值,容易产生大的累加误差;增量型算法得出的是控制量的增量,而位置型算法的输出是控制量的全量输出,误动作影响大;采用增量型算法,易于实现手动到自动的无冲击切换。 在实际应用中,采样的反馈值y(k) 即为脉冲累加器中的PACN32中的脉冲数,预设门限值A在参数整定时根据实际情况调节,输出u(k ) 并不能直接用来控制电机,需要将其转换为控制PWM占空比,然后用增大或减小PWM占空比的方法来实现对电机的加减速的控制。换句话说,在求偏差量时,实际上用的是每20ms电机转过的齿轮数和实际期望电机转过的齿轮数,通过二者的差值,再乘以相应的系数,即KP、KI、KD的协调控制,计算出相应的PWM占空比,实际上用的是PWMDTY的值。 本设计中综合考虑各种因素,最后选用的采样周期为20ms,即每20ms对电机进行一次PID调节。由于在程序中,对图像的采集使用的是PH口的中断程序,因此,PID采样周期的选择实际上是受限制与图像采集,因为每行的扫描周期为64μs,有效扫描时间为52μs,采用的是隔行扫描的方式,即每隔6行采集一行图像的信息,如果在每行之间加入PID调节的话,那么处理PID子程序的时间必须控制在64*5=320μs之内,另外图像采集只是采集了奇场中的行数,在偶场中没有采集,因此PID子程序的执行是不均匀的,并没有达到预期的效果,同时还可能会影响到视频采集,因此,经过分析,最终决定将PID的采样周期定为20ms,即当进行一次场采集进行一次PID调节。而且经过最终的检验,这样能够满足对速度控制的需要。 电机调速 本作品采用增量式的PI控制。 增量式PI算法: pwm=Kp*(errork0-errork1)/100+Ki*errork0/100+pwm; 1.6.舵机控制 1.6.1. 舵机转角的决策 由于CCD图像传感器的应用,大大提高了车的前瞻性。经测量,本系统预测距离可达1米以上。但是,考虑到各部件延时严重且具有很大不确定性,所以预测距离越远,控制算法就会越复杂。综合各种因素考虑,我们最终将预测距离定在80~100cm。 黑线中心位置轨迹中包含着两方面的信息,一方面是反映前方道路趋势的信息,另一方面是反映车体与轨道偏离程度的信息。经过反复试验,我们发现,前者可以通过计算黑线的斜率来很好的描述。而后者,恰恰就是屏幕最下端黑线的位置。最后用这二者的线性组合得到舵机转角。有了这两方面信息,可以使智能车既能充分利用前瞻性,又能不过分地偏离轨道。从而得到了较理想的转角控制策略解决方案。 1.6.2. 偏航距离的计算 由于已经获得了赛道中心线的位置,所以计算偏航距离的问题是选取何处的中心线的距离为当前的偏航距离。控制算法的执行周期为40ms,如果赛车的速度为2m/s,则在两次控制算法的执行中间,赛车要前进8cm,赛车所处的环境将发生比较大的改变,所以赛车的控制只能算是半实时控制,这是所有使用摄像头作为主要寻线传感器的参赛队都避免不了的问题。因为算法的滞后性,赛车需要将“当前位置”进行适当前移。前移量应该跟赛车当前速度成正比,但实际中我们发现,适当增加一些前移距离是有好处的,因为可以在入弯处提前转弯,使得赛车沿弯道内侧行驶,缩短了过弯距离。 1.6.3. 舵机参数测定 通过实验测出已安装在模型车上的舵机的中位PWM值(Servo_center),模型车转向轮左右极限时舵机PWM(Servo_left、Servo_right)值是舵机控制的基础。 测试舵机中位时,先在舵机控制模块中给舵机PWM设计一个全局变量(Pwm_Servo),将赛车放在长直道上,保证车身放正并处于赛道正中间,利用BDM查看此时Pwm_Servo的值,将此值直接赋给舵机PWM,并将赛车放到直道上跑,看是否跑偏,微调Pwm_Servo的值,直到赛车在直道上不再跑偏为止。 测定舵机左右极限时,可根据转向轮的左右极限转角,利用BDM查看舵机Servo_left和Servo_right的值。注意转向轮在左右极限转角时,转向轮不可被赛车底盘卡住,这样不但会增加转向阻力,严重时还可能使转向轮抱死,失去转向能力。 舵机的PWM计算公式为: Pwm_Servo=Servo_center+(Servo_left-Servo_right)/Simage_number*offline_one;……公式四 式中Simage_number为每行采集的点数, offline_one为黑线在整幅图像中的位置。 1.6.4. 路径规划 要想以最短的时间完成比赛,并不需要严格按照黑色引导线行驶,我们需要找出相对较短的行驶路径,即路径规划。例如过普通弯道的时候,以同样的速度走内弯显然比走中间或外弯所花时间少,过小S形弯时。直接过去和严格循迹相比速度快,行驶距离短等等。(图) 如果能提前预知前方赛道信息,那么我们就有可能对路径进行规划。由于我们采用的是摄像头,扫描距离较大,这就为我们进行路径规划提供了条件,这也是我们选择摄像头的原因之一。 由于摄像头看得较远,每幅图像反映的赛道信息量较大,我们需要针对赛车在不同位置,对其有侧重的采用。具体就是将采到的15行划分为几个区域,针对不同路况对每个区域赋以不同的权值。其原理图如图: 1.7.偏航距离的计算 由于已经获得了赛道中心线的位置,所以计算偏航距离的问题是选取何处的中心线的距离为当前的偏航距离。控制算法的执行周期为40ms,如果赛车的速度为2m/s,则在两次控制算法的执行中间,赛车要前进8cm,赛车所处的环境将发生比较大的改变,所以赛车的控制只能算是半实时控制,这是所有使用摄像头作为主要寻线传感器的参赛队都避免不了的问题。因为算法的滞后性,赛车需要将“当前位置”进行适当前移。前移量应该跟赛车当前速度成正比,但实际中我们发现,适当增加一些前移距离是有好处的,因为可以在入弯处提前转弯,使得赛车沿弯道内侧行驶,缩短了过弯距离。 1.7.1. 偏航角度的计算 计算偏航角度的实质是直线拟合问题,因为赛道中心线所在的直线确定了,而直线的斜率与偏航角度一一对应。直线拟合最有效的方法是最小二乘法,但是直接应用存在一个问题,即如何确定进行直线拟合的区间?在整个成功识别出赛道的区间内进行直线拟合显然是欠缺考虑的,因为在弯道的情况下,这种方法拟合出的是一条弦线,而不是当前该弯道处的切线。摄像头视野越大,弯道曲率越大,弦线偏离切线的程度也就越大。为了能够在直道和弯道上都能正确的拟合出正确的直线,我们采用了直线检测的方法,即首先根据残差的大小确定直线的范围,然后在这一范围内进行直线拟合。 1.7.2. 曲率的计算 如果说斜率的计算需要某种技巧的话,计算曲率则更是一种技巧的应用。首届时很多参赛队针对各自的实际需要,提出了自己的方法。其中最普遍的是根据斜率的导数来计算曲率。但是斜率的计算本身就很不准确,特别是某个点的斜率,对斜率求导就更不准确,所以使用这种方法只能得出一个大致的结果。本文作者提出了另外一种方法,首先对获得的路径进行滤波,使得路径尽可能平滑,然后取其两个端点和中间点,计算这3个点组成的三角形的外接圆的半径,半径的倒数就是这段路径的曲率。经过多次实验,这种方法的误差一般不大于20%,对智能车的控制来说已经足够了。 图5.8是实验赛道的照片,让赛车从起跑线开始,在赛道上行驶一圈,记录下每个时刻的曲率,如图5.9。从图5.9可以看出,计算出的曲率能较为正确的反映实际赛道的弯曲情况。但是这种方法得出的曲率不是摄像头所看到的当前位置的曲率,而是摄像头所看到的
/
本文档为【智能车PID的算法推荐】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索