基于FPGA的搬运机器人控制系统
2008-07-28
作者:包 明1, 包 奎2
摘 要∶ 以FPGA作为搬运机器人" title="器人">器人控制系统" title="控制系统">控制系统的检测和控制核心,详细介绍了机器人行走控制器和机器手控制器的结构和设计方法。该控制系统采用有限状态机" title="有限状态机">有限状态机描述和硬件描述语言设计机器人控制器,具有自动纠偏、寻线准确、高集成度和高可靠性等特点。实际运用表明该控制系统完全满足要求。
关键词: 机器人 FPGA 有限状态机 硬件描述语言
目前,机器人控制器主要通过单片机来实现。但是,单片机是基于顺序语言的,其描述过程繁琐;处理速度受单片机时钟频率的限制,难于实现高速实时控制;并且外围电路复杂,不易在线修改。利用现场可编程门阵列(FPGA)器件实现搬运机器人控制系统则集成度高、高速、高效率;易于现场重新编程,实现多重配置;可以把其它控制模块" title="控制模块">控制模块集成在FPGA中,体积小、可靠性高;易于实现SOPC(可编程单芯片系统),整个控制系统由硬件实现。这是电子系统发展的方向和趋势。本文介绍基于FPGA的搬运机器人控制系统。
1 设计思想与总体方案
本搬运机器人能在任意区域内沿寻迹" title="寻迹">寻迹线行走,自动绕开障碍,并能停在指定地点;它的操作手能对货物进行升降、抓紧或放下等工作;它还能显示整个运行过程的时间和距离;并且在出现故障时发出报警。
机器人控制系统以FPGA器件(Altera公司的ACEX 1K器件)作为检测和控制的核心,采用红外光电传感器检测路面寻迹线,使用超声波传感器检测障碍物,利光电码盘测距,用光电传感器或者微动开关检测、判断机器手是否到位, 应用PWM技术动态控制电动机的转动方向和转速。本机器人控制系统利用有限状态机描述和硬件描述语言设计机器人控制器,实现机器人行走、转弯、绕障、停止以及机器手升降、抓紧或放下的精确控制。机器人控制系统结构图如图1所示。
机器人根据输入的各种检测信息,按照为机器人设置的要求,自动地进行信息处理、分析和计算,作出相应的控制决策或判断,并通过输出通道发出控制指令,控制各电机进行工作。采用控制芯片ACEX1K的控制器主要包括两部分:机器人行走控制器和机器手控制器。
机器人行走控制器是控制系统中最为关键的一部分。机器人要准确地走到设定的位置,才能执行后面的抓举和卸下物品的任务。机器人在地面上的移动方式为三车轮移动方式,即采用前轮辅助后轮驱动的移动配置方式。这种配置是前轮的万向轮为随动轮,仅仅起到支撑车体的作用,无任何导向作用;而后轮则分别为两个独立的驱动轮,利用它们的转速差控制机器人的运动方向。这种组合的特点是结构简单,易于控制,而且当两个驱动轮以相同速度、相反方向转动时,车体只能绕两个驱动轮连线的中点自转,易于定位。
机器手控制器的作用是当机器人行走到了指定位置(物品放置位置)时,能够成功地抓起或放下物品,主要是手臂的抓、放、提升、下降等功能。
本搬运机器人使用四个直流电动机进行驱动, 直流电动机的特点是在一个方向连续旋转或者在相反的方向连续旋转, 运动连续且平滑。目前,直流电动机可以达到很大的力矩/重量比,直流电机驱动具有高精度、加速迅速以及可靠性高的特点。
2 机器人行走控制器
机器人行走控制器实现机器人沿寻迹线前进、后退、左转、右转等行走功能。行走控制器原理图如图2所示。
行走控制器由计数模块(COUNTER)、行走驱动模块(QUDONG)、指令模块(JSKZ)和状态控制模块(CONTROL)组成。
2.1 计数模块
计数模块是机器人的“记忆”系统,实时地“告诉”机器人自己所处的位置。计数模块准确地计算出机器人行走的格数及光电码盘检测的驱动轮脉冲数。当机器人走过一格时,产生一个脉冲信号,计数模块实现一次计数。但是当机器人转弯时会有一个计数误差(根据计数探头的安装位置而定)。为了避免产生误差,当行走指令模块发出转弯命令时,计数模块将停止计数,保持以前的计数值。这样将保证计数的可靠性。
图中b为计数模块的输入信号。当b有一个脉冲时,计数模块计一次数;clr为计数复位信号(低电平效)。输入端updown接收由指令模块发出的指令(前进、后退、左转或右转),当updown=“11”(前进)或“00”(后退)时,计数器正常计数,最多可以计数到31(从0开始); updown=“01”( 右转)或“10”(左转)时,计数器的计数值保持。counter为计数模块输出信号,在此暂设为五位二进制数。
2.2 指令模块
行走指令模块的功能是按照货物搬运行走路径的要求,为机器人设置行走方式。计数模块输出的计数值作为指令模块发出行走指令的依据,通过设定指令模块可确定机器人的行走方式。机器人行走的每一步,都可以通过这个模块设定它的行走模式,这极大地方便了对机器人路径的修改和重新设置。要设定新的机器人行走路线时,直接更改这个模块便可以实现。 图中输入counter[]为计数模块输入的计数信号,它被作为指令模块发出行走指令的重要依据。输出lrd[]为指令模块发出的行走指令,发送给状态控制模块。lrd为“00”时机器人后退;lrd为“01” 时机器人右转;lrd为“10” 时机器人左转;lrd为“11” 时机器人前进。
2.3 状态控制模块
状态控制模块的功能用来控制机器人顺利进行转弯。该模块采用有限状态机的描述方式和硬件描述语言进行设计。图中输入信号a1、a2为机器人前进方向的红外探头检测信号,用于检测机器人的寻线和转弯是否到位;clr为控制器复位信号;clkb为状态机的时钟信号;tmp[]为指令模块发出的指令信号,tmp[]=“11”时为直走指令信号;tmp[]=“01” 时为右转指令信号;tmp[]=“10”时为左转指令信号;tmp[]=“00”时为后退指令信号;输出信号updown[]为状态控制模块输出的机器人行走指令信号,最后输入到行走驱动模块中。
状态控制模块的状态图如图3所示。s0状态为初始状态(直走),当指令模块发出右转命令(tmp=“01”),并且前进方向的红外探头检测到寻迹线(a1=‘1’,a2=‘1’)时,s0状态跳转到s1(右转状态);当指令模块发出左转命令(tmp=“10”),并且前进方向的红外探头检测到寻迹线(a1=‘1’,a2=‘1’)时,s0状态跳转到s2(左转状态);当指令模块发出后退指令(tmp=“00”)时,s0状态跳转到s6;不符合以上条件的都保持在s0状态。
s3为右转状态,此时前进方向的两个红外探头已经离开寻迹线(a1=‘0’,a2=‘0’),当有一个探头检测到寻迹线时(即a1或a2有一个为1时),s3跳转到s5状态(强行直走状态);s4为左转状态,它的跳转条件与s3一致,满足条件也是跳转到s5状态。
s5为强行直走状态,不受指令模块的控制。当沿寻迹线行走一格时(即b=‘1’),s5跳转到s0初始状态。s6为后退状态。
2.4 行走驱动模块
行走驱动模块的功能是根据状态控制模块和指令模块发出的行走指令产生驱动信号,控制机器人的寻线及转弯工作。图中,输入信号a1、a2为前进寻线红外检测信号;输入信号a3、a4为后退寻线红外检测信号;clr为复位信号;clk为时钟信号;updown为状态控制模块发出的指令信号;输出信号acount[]为电机的控制信号。
该模块采用有限状态机的描述方式和硬件描述语言进行设计,保证机器人能沿着寻迹线实现前进、后退和转弯的操作。在机器人沿着寻迹线快速行走过程中, 由于寻迹线的宽度有限(几个厘米),两个驱动轮存在转速差,使机器人容易偏离寻迹线行走。为了解决这个问题, 采用有限状态机设计,使该模块具有“记忆”功能,无论从哪个方向完全偏离寻迹线,都能够返回到寻迹线上,这样就增加了寻线行走的可靠性。实际应用表明,将有限状态机设计的行走驱动模块运用在一个快速行走且惯性较大的机器人上,机器人能够沿着寻迹线呈“S”形行走,始终保持以寻迹线为中心运动。
3 机器手控制器
机器手主要完成升、降、抓紧和放下物品等工作。机器手控制器结构图如图4所示。主要由手臂指令模块和手臂执行模块组成。机器手控制器实现的控制主要是一个顺序控制的问题。当手臂指令模块发出取物品的命令时,手臂执行模块将产生取物品的一系列顺序信号,驱动手臂电机,完成机器手取物品的工作。在取物品时,首先将手臂升降到指定位置,夹紧物品并保持;然后将整个物品提升或下降到位,整个取物品的操作结束。机器手放物品与取物品的工作相似。机器手必须是在机器人行走到指定位置时才能进行操作,行走计数值和超声波与光电检测信号为手臂指令模块提供机器人行走到位信号。
3.1 手臂指令模块
手臂指令模块与行走部分的行走指令模块相似。这个模块比行走指令模块只是多了超声波与光电检测信号。为了提高机器手的可靠性,采用了双重检测,由行走计数值检测是否已进入物品区域,并且通过超声波与光电信号检测机器手是否已达到取放物品的位置。若缺一个条件,机器人将不会发出取物品或放物品的指令。3.2 手臂执行模块
手臂执行模块主要是根据手臂指令模块发出的指令,产生一系列输出信号,驱动手臂电机。此模块的设计也运用了有限状态机的设计思想,采用的是顺序控制的原理。可是手臂存在一个初始位置的问题,例如要取物品时,它的手臂必须是松开的,并且处于某个初始位置。因此每次取物品时,都要检测是否处在这个初始位置,若不是,则要先调整到初始位置,然后按照取物品顺序进行操作。
手臂执行模块状态图如图5所示。s0、s1、s2 状态为未到位状态(初始位置),需要进行状态调整,跳转到s3状态。s3为初始到位状态,当接收到取物品信号(ud=“01”)时,跳转到s4状态(抓紧物品); s5状态为提升到位,s8为保持状态,最后回到初始位置s3状态。s6、s7状态为放物品状态,与取物品过程相似。
本搬运机器人除了以上介绍的机器人行走控制器和机器手控制器外,还有其它单元电路,如红外光电检测电路、超声波检测电路、光电码盘检测电路和电机驱动电路。为了随时接收上位机发出的指令,还需要通讯模块电路。为了实现机器人可靠地运行,检测电路的设计显得非常重要。
本设计是在QUARTUSII开发工具下对各功能模块进行仿真分析,保证了FPGA芯片设计的成功。FPGA器件采用ALTERA公司的ACEX1K50器件,占用ACEX1K50器件的逻辑单元为43%。由于篇幅有限,各功能模块用硬件描述语言编写的源文件省略。
由于采用有限状态机描述和硬件描述语言进行设计,该控制系统不仅在运行方式上类似于单片机控制器,而且在运行速度和工作可靠性方面优于单片机控制器。实际运用表明该控制系统完全满足要求。
参考文献
1 包 明, 赵明富.EDA技术与数字系统设计[M].北京:北京航空航天大学出版社,2002
2 赵雅兴.FPGA原理、设计与应用[M]. 天津:天津大学出版社,1999
3 潘 松, 黄继业.EDA技术实用教材[M].北京:科技出版社,2002