韩林峰 ,崔琦
(1.郑州市第一中学,河南郑州,450006;2.洛阳理工学院,河南洛阳,471023)
随着机械、电子、控制、信息等技术的迅猛发展,智能机器人将在军事、科研和工业领域中有着广阔的应用前景[1—4]。智能循迹小车是一种可自动根据规划路径运行的轮式机器人,也是一个集环境感知、分析判断与决策、自动行驶等功能于一体的综合系统[5]。例如在国内外的一些大型物流企业,已经开始利用智能小车对货物进行扫码识别,然后按照规划路径自动运送到相应的出货区域,实现了货物的快速自动分拣[6],节省了人工及劳动强度,并提高了工作效率;在矿山行业,也可以运用智能小车进行煤炭等货物的运输。现在,许多学校和机构通过举办循迹小车的设计制作活动和学科竞赛,来培养学生的实践、创新能力和团队协作精神等[7—13]。
循迹小车所采用的位置和速度控制模型及策略直接影响着小车循迹运动的精度、速度和流畅性。本文根据所设计循迹小车的工作原理进行机械运动分析,建立位置+速度的串级PID控制模型,实现了循迹小车快速、精确的循迹控制。
设计的循迹小车的组成和工作原理图如图1所示。小车主要由机械机构和控制系统组成。机械机构主要包括车身、万向轮、左轮、右轮和减速器等组成。控制系统主要由单片机控制板、电机驱动板、电池、红外光电传感器、测速器和控制软件等组成。
万向轮安装在车身前部,左轮和右轮安装在车身后部,分别由左电机和右电机通过相应的减速器减速后单独驱动;单片机控制板采用模块化设计,CPU采用STC89C52芯片;左电机和右电机为直流电机,由采用L293D芯片的电机驱动板来驱动;电源模块用2节3.7V锂电池串联给小车控制系统供电。对于每个直流电机,单片机输出一路PWM信号来控制电机的转速,输出一路TTL信号来控制电机的转向;两个槽型对射光电传感器与安装在左、右电机减速器上的测速码盘组成了测速系统,将左、右轮的转速转换为脉冲实时传送到单片机控制系统,可实现左、右轮转速的闭环控制。5个红外光电传感器安装在小车的前部,用来检测黑色轨道与小车前进方向之间的偏差。
图1 循迹小车的组成和工作原理图
当小车正常前进时,红外光电传感器A检测到黑色轨道;当红外光电传感器B或C或D或E检测到黑色轨道时,说明小车检测到位置误差,轨道出现了偏转;控制软件根据5个红外光电传感器输入状态的变化来判断位置误差的大小和方向,并确定下一步调整时的转向和转角输出,再计算出左、右电机的输出转速,然后再通过电机驱动板、左电机、右电机、减速器来改变左轮、右轮的速度,从而改变小车的前进方向,从而实现小车的自动循迹运动。
根据小车的机械结构,将小车简化为图2中粗黑线所示的模型。万向轮的中心点为G,左轮的中心点为H,右轮的中心点为J,H点和J点的中心点为I。设小车左轮的速度为v左,右轮的速度为v右,I点的速度为v中。由于小车前端为万向轮,所以小车的转向完全由左轮和右轮的速度决定,小车转向时的回转中心点在直线HJ上。经过Δt时间后,小车向右转动θ角,其运动轨迹如图2所示,点G,H,I和J转动θ角后的位置分别为点G’,H’,I’和J’,O点为小车的回转中心。若循迹小车是以万向轮的中点G沿轨道循迹运动为目标的话,则小车转弯时的回转半径为OG。
由公式
可得小车转弯时各点的速度为:
式中:R左为OH的长度,R右为OJ的长度,R中为OI的长度,RG为OG的长度。
设HJ的长度为k,则
所以:
将公式5带入公式3可得:
由以上分析可以看出,当k为常数时,循迹小车的转弯轨迹(转动方向和回转中心点O的位置)是由左、右轮的速度v左和v右来确定的。
当v左>v右时,θ角为正值,小车右转;当v左 当O点与J点重合时,v右=0,小车在绕J点转弯。当O点与I点重合时,v左=—v右,v中=0,小车在绕I点转弯;此时,小车的转弯半径最小,即小车所能通过的理想最小转弯半径为h(h为IG的长度)。所以,当h越小时,小车所能通过的最小转弯半径越小,其极限状态是h=0,小车可绕I点原地打转。 循迹小车沿轨迹前进时,事先是不知道轨迹的形状和转弯半径的,无法提前做出规划,只能不断地根据红外光电传感器的检测结果实时调整小车的转向和转角。所以,这是一种随着轨迹变化而不断调整小车输出的随动控制系统。 图3是一种循迹小车的简单控制模型。控制系统根据5个红外光电传感器的检测结果,判断小车下一步有以下几种输出:直行、小角度左转、大角度左转、小角度右转、大角度右转。然后分别针对这几种情况,根据需要转动的方向和转动的角度进行速度分配,确定左轮速度v左和右轮速度v右,然后以PWM方式控制左轮和右轮的速度,实现小车的转向和直线运动。由于其控制简单,编程方便,比较适合一些对速度要求不高的场合[6—8]。图 图3 循迹小车的简单控制模型图 采用简单控制模型后,循迹小车过弯道时的运动轨迹如4所示。 小车开始时在直道上行驶,然后进入弯道;在控制程序的第一个扫描周期后小车的万向轮到达G1点,红外光电传感器C检测到了黑线,小车进行小角度右转输出,到第二个扫描周期时,小车运行到G2点。由图2可知,小车在转向时的运动轨迹是圆弧,所以G1和G2之间为圆弧。由于小车发生了转向,所以在第二个扫描周期后,只有红外光电传感器A检测到了黑线,小车进行直行输出,到第三个扫描周期时,小车运行到G3点,G2和G3之间为直线;此时红外光电传感器C检测到了黑线,小车再次进行小角度右转输出。依次类推,小车在通过弯道时不断地进行转弯和直行调整,其运动轨迹是一些圆弧和直线。由此看出,采用这种控制模型后,小车每个控制循环输出的转角是有级的且不连续的,循迹小车在转弯时常出现摆动等不连贯运动,影响小车的运动速度。 图4 循迹小车过弯道时的运动轨迹 图5 位置+速度的串级PID控制模型 为了改善小车运动的流畅性,一些论文将小车前端的万向轮改为由舵机控制的导向轮,然后分别对舵机转向的角度和小车的左、右轮的速度采用了PID闭环控制[14,15]。由于小车的转向还与左、右轮的速度有关,这种控制方式要求舵机的转向角度与左、右轮的速度要实时匹配,否则就会出现轮子打滑现象,所以控制难度较大。 经过以上分析可知,循迹小车是通过左、右轮的速度控制来实现小车沿黑色轨道循迹的位置控制,设计的位置+速度的串级PID控制模型如图5所示。其内部为左、右轮速度控制的两个速度环,外部为位置偏差控制的位置环。 小车前部的红外光电传感器检测到小车与轨道的位置偏差可用检测到黑色轨迹偏差的传感器点和G点的直线与直线AG之间的夹角α表示,直线AG左边的夹角为负,右边的为正。则5个红外光电传感器可检测到的位置偏差分别为 0o,—45o,—90o,45o和 90o。在每次控制循环中,位置偏差的设定值0和实际值α输入到转角PID控制器,通过PID运算产生小车的输出转角θ,θ角的正负决定了小车的转向。由转角θ再进行速度分配,确定左轮速度v左和右轮速度v右。每个车轮速度的设定值与实际检测值输入到相应的速度PID控制器,产生相应车轮的速度输出,再通过电机驱动板以PWM方式控制电机的转速;左轮和右轮的转速差可实现小车的转向和直线运动,从而实现小车的循迹运动控制。 在本控制模型中,转角和转速都实现了PID控制,从而使转角和转速的输出连续变化;同时,采用两个PID控制器串联工作,即外环(位置环)转角PID控制器的输出经运算后作为两个内环(速度环)速度PID控制器的设定值,由内环PID控制器的输出去操纵小车的转向和转角,从而改善了控制质量,对外环被控量具有更好的控制效果。 在公式5中,HJ的长度k为常数,每个控制循环的时间Δt也可确定,转角PID控制器输出了转角θ,那么如何确定v左和v右这两个变量呢? 为了尽快使小车转向回到轨道上,可选用转向最快策略。当为θ正时,小车需要右转,可令v右=0,则v左=θk/Δt;当为θ负时,小车需要左转,可令v左=0,则v右=—θk/Δt。这种方法虽然转向较快,循迹效果很好,但是影响了小车转弯的速度,势必会影响循迹小车的比赛成绩。 为了保证小车的速度,可选用速度最快策略。每个小车在直行时都有一个最大速度vm,那么在转弯的时候可将外侧轮子的速度选择为最大速度vm。当为θ正时,小车需要右转,可令 v左=vm,则 v右=vm—θk/Δt;当为 θ 负时,小车需要左转,可令v右=vm,则v左=vm+θk/Δt。这种方法可以确保小车在转弯时的速度较快。如果在调试时小车由于速度过快而滑出弯道,就要适当减小外侧轮子的最大速度。 将小车的硬件安装好,然后按照串级PID控制模型编写小车的控制程序,然后根据小车在轨道上的循迹运动情况,不断调整小车的最大速度vm和PID控制器的参数等,使小车能够连续地、以较快的速度转弯并跑完赛道。试验结果表明,采用串级PID控制模型的小车在遇到弯道能够快速转向,运动流畅连贯,比较准确地完成了循迹运动。 进一步改进小车循迹性能的措施:若小车的前部安装更多的红外光电传感器或者采用其它模拟量位置传感器将使检测到的轨道位置偏差更加精确,也会改善转角PID控制器输出的波动,使小车的转向更加平稳。若小车的单片机控制板采用性能更高的CPU(例如Arduino MEGA2560或32位ARM芯片),提高其运算速度,就能减小中断扫描周期Δt,即减小了PID控制器的扫描周期,提高了小车的响应速度,使小车的循迹运动更加平稳可靠。 本论文采用5个红外光电传感器检测轨道的偏差,前部安装万向轮,通过后部左轮和右轮的速度差来控制小车的转向,实现小车的循迹运动;分析了小车转弯时的运动轨迹,讨论了左轮和右轮速度与转弯半径等参数之间的关系;设计了位置+速度的串级PID控制模型,采用速度最快策略进行速度分配,确保小车在转向时快速流畅,使小车能够快速、平稳、准确地沿赛道轨迹运动。该小车的设计方案和串级控制模型也可应用于无人车间自动搬运的AGV小车、自主移动机器人等服务机器人的循迹及定位控制。3 控制模型
3.1 简单控制模型
3.2 串级PID控制模型
3.3 速度分配策略
4 调试
5 结论