中国工程机器人大赛是由国家教育部主办、以大专院校本科生为参赛主体的国际性赛事,自2011年以来,现已举办9届.首都师范大学数学科学学院本科生组队参加了2019年的大赛,取得良好成绩,有效促进了学院的实践教学活动的开展.
该项赛事由任务一和任务二组成(图1),任务一要求机器人分别将位于A、C和E 3个点的随机颜色物块搬入相应颜色标识的靶点.任务二将分置于F和G区堆放的各5个不同颜色物块分别搬入相应靶点.合计搬运13个物块,要求5 min内完成,依据取得总环数计算比赛成绩.
图1 搬运比赛场地图示(2 260 mm×2 260 mm)
本例的光电搬运机器人小车设计采用常见的“钩取”技术.小车共有8个独立单元构成(图2),核心部件是Arduino控制板.小车的设计思路可以概括为:(1)通过读取红外传感器的模拟数值实现循线;(2)通过读取红外传感器的数字数值实现线路控制;(3)通过超声波测距把握钩取物块时机;(4)通过颜色识别判定行驶线路;(5)通过PWM数值控制左、右马达转速以驱动小车;(6)通过PWM数值控制角度舵机抬臂升钩与落臂降钩.
图2 马达驱动光电搬运机器人结构示意
机器人小车的宽度和长度都有严格要求,分别为:宽度≤160 mm,长度≤270 mm,超范围判违规.
为了尽量节省开发时间,本机器人小车采用了OpenDuino控制板(图3).该板是由深圳鸥鹏科技公司开发的一款集成了Arduino核心技术与部件,以及马达驱动、XBEE联网、蓝牙通信等技术的专用Arduino开发板,稳定性较好,很适合于非计算机类专业理工科学生采用.
图3 OpenDuino控制板示意
Arduino技术是目前市场上最简单流行的单片机应用技术,有3个显著特点,即AVR技术、C语言环境、丰富的开源函数库.
基于AVR技术的wiring编程,将复杂的单片机的设置及接口功能简化为函数操作,这些函数简单易懂,与C语言兼容,近乎完全取代专业性极强的汇编语言.C语言是理工科学生的通行语言,将C语言应用于单片机,可以提高学生对C语言的深入理解.丰富的开源函数库,是工程师们的智慧结晶,对诸如颜色测试、超声波测距等众多模块的使用,给出了设置简单、标准化程度高的类定义.因为开源,使用者可以在此基础上做进一步修改,以方便使用,极大节省了开发者的精力.
机器人小车设计为两轮马达驱动,使用Open-Duino控制板的马达驱动端口,马达采用通用的直流减速电机.根据控制板说明,可以方便设定左、右马达的PWM驱动及转向,小车行驶函数如下:
其中,函数的形式参数cmd如FARWARD等事先做出整数定义,Speed1、Speed2参数是调用该函数时,给出的PWM数值,本例实验设置为115.
机器人小车在图1所示场地上快速稳定行驶,是以循线技术和转角技术(线路控制)为基础.机器人小车的循线与转角控制在设计上采用TCRT5000红外反射传感器(图4).传感器分别设有模拟输出(analog output,AO)和数字输出(digital ouptut,DO)输出端口.
图4 TCRT5000红外反射传感器示意
注:AO为模拟输出;DO为数字输出;VCC为通用直流电压;GND为通用接地.
设计思路是模拟端口用于循线,数字端口用于控制.采用4个传感器并置于小车前端(图5),传感器反射点与小车2个车轮中轴距离为55 mm.
图5 红外传感器布局示意
传感器自右向左命名为:trac0、trac1、trac2、trac3.其各自数字引脚DO分别接入OpenDuino控制板(图3)的数字端口.
中间2个传感器即trac2,trac1的模拟引脚分别接入OpenDuino控制板的模拟输入端.
循线线宽为20 mm,由trac2与trac1模拟传感器完成.传感器间距为23 mm.经测试,单个传感器的模拟数值变化为39~690.完全白色数值最小,为39;完全黑色数值最大,为690.
循线的关键是克服小车行驶中的抖动.模拟循线通行的做法是比例-积分-微分控制(proportionalintegral-derivative,PID)技术.该技术要求实时监控左右2个车轮的转速,再根据传感器的返回值计算出2轮的差速.计算和设计较为复杂,一般用于高速行驶的赛车.本项目机器人小车的对行驶速度要求不高,所以,采用了更为简便的方法实现差速控制.程序如下:
利用传感器的差值乘以系数0.058,尽量去接近连续差速控制.对于非高速行驶的机器人小车,可以完全做到平顺循线.系数0.058是实验数值.SPEED为设定的基础PWM数值.改变PWM数值,系数也应随之微调.
线路控制主要是对小车行驶到场地中心点,或者其他交叉点、靶点等小车的原地转角控制.小车在中心点转角(图1),可以理解为“跨线”.中心点原地右转 45°,实际上是向右“跨过”1条黑线,转角 90°,就是原地“跨过”2条黑线,以此类推.下面给出向左、向右“跨过”1条黑线的函数:
以上函数在中心点循环2次,则“跨过”2条黑线,等效于转角90°.
在直线上原地执行一次上述函数,则等效于掉头,即转角 180°.
本文阐释了马达驱动机器人小车的设计、部分选材和制作原理,同时也描述了行驶函数、模拟循线函数、以及实现原地转角的线路控制函数等编程.循线是机器人小车正常行驶最基础最核心的部分,是在实现其他功能前,首先要完成的实验项目.下一篇将讨论对物块的颜色识别,以及超声波测距准确捕获物块的程序设计方案,从而完成光电搬运项目机器人小车的完整实现.
[1] 赵彬,高宏力,张艳荣,等.搬运机器人控制系统设计[J].机械设计与制造,2014(12):183-186.
[2] 王媛媛,刘海龙,蔡逸锋.基于单片机的吸附式仓储搬运机器人研发[J].机电信息,2020(5):85+88.
[3] 徐明娜,张峰,寇志伟.教学手动机器人控制系统设计与实现[J].制造业自动化,2015,37(7):120-123.
[4] 陈吕洲.Arduino程序设计基础[M].2版.北京:北京航空航天大学出版社,2015.
Design and programming of photoelectric carrying robot based on Arduino technology(Ⅰ):tracking line technology and line control