卢瑞辉,吴锤红
(福建农林大学 机电工程学院,福建 福州 350002)
2010年优酷网站上,网友上传了日本一家餐厅里的一段视频:一辆两轮自平衡自动送餐车在为指定的客人送餐。[1]从视频中可以看到,这家餐厅只有一台这种送餐车,还在试验研究阶段,尚未推广。但是,这些两轮自平衡小车经过改造后,可以快速方便地应用到诸如运输、代步和承载等环境当中。这里商机潜力巨大,一些外国公司已经将它们商业化,并投放到了市场。[2]
由于没有该送餐车的其他相关资料,必须利用自己的方案实现两轮送餐车送餐的目标。为了做到这一点,最起码要解决三个问题:首先要解决的也是最关键的是平衡运动的问题;其次是送餐车怎么选择行进路线的,又是怎么样定位的;最后还要考虑它是如何避开障碍物的。此次,自平衡自动送餐车的研究不是纯粹为了送餐,而是为了研究其中的控制策略及控制方法,从而对自动控制理论有一个更好的认识。
餐厅模拟环境,如图1所示,送餐车的行进路线由事先规划好的黑线作为引导。
图1 餐厅模拟示意图
经过认真的分析研究,确定了自平衡自动送餐车系统的总体设计,其整体框架如图2所示。在进行具体的电路设计之前,要对MCU STC12C5A60S2的I/O口进行合理分配。这需要充分考虑系统各个输入输出情况,做好总体规划。
图2 送餐车硬件总体设计
自平衡自动送餐车的电路采用模块设计(如图3所示)方法。模块化可以帮助理清思路,总览全局。不仅有利于电路设计,而且还便于将来PCB电路板的重新拼接,再次利用。系统利用Protel 99SE软件进行电路设计,大部分主要器件的管脚图及封装,该软件的元件库都没有,需要自己根据元件的实际情况来画。
图3 硬件电路图
自平衡自动送餐车采用可移动的,能充电的12V锂电池作为供电来源。但是,由于在整个系统中,各个模块所需要的电压有可能是不同的。因此电源模块需要输出多种不同幅值的电压,以满足系统的要求。经过对系统的全面分析,可知道电源模块至少要满足这两个要求:提供12V,5V,3.3V这三类幅值的电压;每种电压要有一定数量的引出端子。
自平衡自动送餐车的主控芯片为MCU STC12C5A60 S2,[3]以它为核心组建系统的CPU模块。该MCU的I/O口较多,可以按组分别把它们引出来,以便与其他外设相连,构建送餐车系统。用5个8芯白色底座分别引出P0,P1,P2,P3,P4口;至于P5只有4个I/O口,需要1个4芯白色底座即可。本次设计将采用的晶振频率为11.0592MHz。瓷片电容C3起到了稳定MCU工作电源的功效。
自平衡自动送餐车姿态数据主要包括车体的倾斜角度和倾斜角速度。这可分别利用加速度传感器MMA7260和陀螺仪ENC-03MB测得。只有综合利用这两个传感器才能得到所需要的正确信号,用MMA7260测得的倾斜角度来校正ENC-03MB信号积分所得的角度。为了便于程序的编写,采用以LMV358为主的硬件处理电路对姿态数据进行处理。处理之后的倾斜角度和倾斜角速度信号,用2芯白色底座将O1,O2接到MCU的P1.0(ADC0),P1.1(ADC1)口,进行A/D转换。
自平衡自动送餐车有两个车轮,需要用到一块L298N驱动芯片。驱动芯片的使能端ENA与ENB都接VCC,也就是说它们始终被钳位为高电平,其四个输入端随时都可以输入,不受限制。四个输入端由4芯白色底座从MCU引入,IN1,IN2,IN3,IN4分别对应的接P2.0,P2.1,P2.2,P2.3。二极管D6,D7,D8,D9可起到对MOTOR1的续流保护作用;二极管D2,D3,D4,D5可起到对MOTOR2的续流保护作用。另外,为了更加直观的了解两个直流电机的正反转情况,引入了4个LED指示灯。
为了测得电机的转速利用了两个光电编码器搭建了速度检测模块电路。该模块的电路比较简单,只需要直接将与电机同轴安装的左右光电编码器的脉冲输出接到MCU的脉冲捕获接口P4.2(CCP0),P4.3(CCP1)。至于车轮转速的计算将由软件编程加以实现。
送餐车的行进定位电路主要由3个光电开关RPR220和1个四电压比较器LM339M(用了3路,还剩1路)组成。现以其中一路为例进行介绍。当发出的红外光遇到的是白线,红外光会被反射,RPR220的光电三极管将导通。此时LM339M第一个比较器的反向输入端的电压,幅值大约为5V,大于同向输入端的电压,比较器的输出端相当于接地。当发出的红外光遇到的是黑线,红外光会被吸收,RPR220的光电三极管将截止。此时LM339M第一个比较器的反向输入端的电压,幅值大约为0V,小于同向输入端的电压,比较器的输出端相当于开路。但是由于在输出端接了一个上拉电阻,它将向系统输入高电平信号。另外两路的原理完全类似,不再赘述。行进定位3路的检测信号由LO1,LO2,LO3接到MCU 的P2.4,P2.5,P2.6进行传输。
送餐车的避障要完成两个任务,共用到两个红外光电传感器E18-D80NK。一个通过调节,使它的避障距离为30cm;另一个,则调为60cm。它们的输出需要接10k的上拉电阻。当障碍物的距离小于避障距离时,传感器将输出低电平;当障碍物的距离不小于避障距离时,传感器将输出高电平。两个传感器的输出E18OUT1,E18OUT2分别接到MCU P3.2(INT0),P2.7(INT1)口。
自平衡自动送餐车的相关信息将由YB12864-ZA进行显示,控制输入除了四个按键之外,还有红外遥控,其中后者为主要控制输入,前者为备用。为了便于操作把它们划分在一起。
自平衡自动送餐车的硬件制作完成之后,就可以着手进行系统的软件开发了。在进行程序编写之前,要对系统工作的整体流程有一个宏观的把握,如图4所示。这个流程的顺利实现,依赖于实际可行的系统控制算法和汇编语言主程序及各功能模块子程序的设计实现。该系统以Protues 7.7为开发平台,结合UltraEdit-32强大的编辑功能,利用STC单片机的专用下载软件STC-ISP V488下载hex文件,进行程序的编写调试。
图4 系统工作流程
系统的总体控制算法(如图5所示),通过对各控制的耦合,得出一个整合控制量对电机加以控制。
图5 系统总体控制算法
其中RPR220的检测控制算法如表1所示,当RPR220发射的红外光被吸收时,该路的输出为高电平。当RPR220发射的红外光被反射时,该路的输出为低电平。根据3路的输出情况,采取相应的方向控制策略。除此之外,还需要根据红外的输入,送餐车位置信息,进行零半径回转。在回转的时候,送餐车的运行不受3路RPR220检测的影响。回转完成之后,再启用RPR220检测控制算法。
表1 RPR220检测控制算法
避障控制算法分为任务一(紧急任务)和任务而(普通任务)。紧急任务优先级别高于普通任务。换句话说,就是在执行普通任务的时候,要是出现了紧急任务的响应条件,则立即停止执行普通任务而转为紧急任务。另外,这两个任务是不可能同时执行。是执行哪个任务,主要由障碍物的距离决定,如表2所示。两个E18-D80NK的检测,共有3种结果。根据不同的结果,执行相应的任务。
表2 E18-D80NK避障控制算法
红外遥控器没有输入的时候,送餐车保持在初始位置,速度给定为零。红外遥控器输入为1-5桌的时候,送餐车直接向前行进。红外遥控器输入为6-10桌的时候,送餐车先进行零半径回转,速度给定为零,再向前行进。
除了姿态数据用硬件电路处理之外,其余的都将用软件进行处理,最难的也是最关键的是PID算法软件实现问题。原因在于汇编语言没有自带的积分运算和微分运算。本系统的控制器采用增量式PID算法,采样周期为T,比例系数为kP,积分时间常数为TI,微分时间常数为TD。它们之间存在kI=kP×T/TI,kD=kP×TD/T的关系,算法的表达式演算如下:
ΔU(k)=U(k)-U(k-1)
=k{kP1{[e(k)-e(k-1)]+T/TIe(k)+TD/T[e(k)-
2e(k-1)+e(k-2)]}}
(4-1)
在式子(4-1)中,k为采样时刻序号,U(k)为控制器第k次采样时刻输出值,e(k)为第k次采样时刻偏差值,且k=kp/kp1=2n,在实际的工程应用中,增量式PID参数调节可借助于k进行协调。增量式PID算法对控制对象的扰动较小。尽管系统出现故障,执行器也仍能保持前一步的控制状态。增量式PID算法操作容易。它不必对偏差值e(k)进行累加,只需输出作为控制量的ΔU(k)。如果知识了e(k),e(k-1),e(k-2),就可以算出ΔU(k)。再加上U(k-1),就能算出U(k)。在汇编实现的时候,先将e(k)历史数据存于事先定义好的数据存储单元。然后,通过平移替换的方法对其循环保存,可有效地传递数据。
将各个模块连接好之后,按下总电源开关,就可以进行自平衡自动送餐车系统的整体调试了。
首先看送餐车能不能保持平衡,然后看看能不能以一定的速度稳定运行,在转弯处能不能顺利转弯,全面检查是否可以稳定的进行平衡运动。之后,将它置于规划好的轨迹之内,看它是否可以跟踪轨迹。还要测试它能不能稳定的停在目标位置,实现成功定位。最后还要观察它可不可以有效的执行紧急避障任务和普通避障任务。通过系统开发平台,不断完善,不断改进,直到完成任务。
由于此课题的设计难度比较大,引言部分给出的三个需要解决问题都是一个比较大的课题,都需要花费大量的时间及精力。加之自身能力的因素,及时间的限制,研究条件的制约,本研究主要解决了小车的平衡问题。至于行进路线的选择和定位策略以及避障这两个问题,采取了较为简单的解决方法,要是送餐车可以智能选择行进路线,不借助地面标示符就可以进行准确定位,清晰辨别客人和障碍物,那系统就更具智能化了。这有待将来选择更好的控制策略,采用更加适合的控制算法作出研究改进,以期进一步提高送餐车智能化水平。
[1]双轮自平衡送餐机器人[EB/OL].(2010-12-21).[2011-11-28].http://v.youku.com/v_show/id_XOTk5NzAzMzI=.html.
[2]曹志杰.一种自平衡双轮移动机器人控制系统的设计与实现[D].北京:北京邮电大学,2008,3.
[3]STC12C系列单片机器件手册[EB/OL] .(2009-06-24) [2012-03-18].http://wenku.baidu.com/link?url=xanDqMIbU6Fw94Vhq_rQ_FNBVSDh1hUEjK4 jaVLXCmZZtLfSkIt5NGq7fYiZMTEM0a6a_eUUIAaNmCaJBanT9q-zOUIJ2-Vu2JQApQ0pABK.