因为智能搬运小车涉及的技术细节较多,我们分2 篇论文介绍.在上一篇[5],着重叙述了智能小车的模拟循线及线路控制,使小车能够在场地图纸上平稳顺滑行驶,并通过判断各类交叉线,完成小车的转弯,从而实现了线路控制.本篇将介绍智能小车对物块颜色的识别以及物块的钩取技术,从而完成赛事指定的搬运任务.
颜色传感器是根据三基色原理,通过设置滤波器颜色选择的引脚,可以分别检测出物块颜色中的红(R)、绿(G)、蓝(B)三基色的强度,即饱和度数值,以及含白度即亮度数值,通过这些数值比对,即可区分物块的颜色.
TCS3200 是常见的一款颜色传感器(见图1).其核心部件是二极管光电滤波器.其中管脚S0 和S1组合可以选择滤波器透光频带的比率,与测量的颜色饱和度数值大小相关.本例设置为S0=1,S1=0,即20%比率.S2 和S3 组合可以选择滤波器频带,即选择所测量的哪一种基色,譬如S2=0,S3=0,测量三基色中的红色.特别地,如果设置S2=1,S3=0,对滤波器不做选择,全透射,可测量白度即亮度数值.毫无疑问,白色物块的亮度最高,黑色物块亮度最低,以此判断出黑白2 种颜色物块.
图1 颜色传感器TCS3200 示意
为简单起见,本项目采用第三方函数支持库“tcs3200.h”,其中的类tcs3200 中的成员函数color⁃Read(),可以方便读取物块三基色颜色的饱和度以及白度.关于tcs3200 类,程序开源,这里不做赘述.颜色测量应用程序为:
/*定义对象tcs,同时设定与OpenDuino 控制板数字端口14~18 连接,分别对应颜色传感器的S0,S1,S2,S3,OUT,并初始化.*/
/*根据以上数值做比对,判断颜色.以下均为实验数值,先行区分白度,鉴别出黑白物块.*/
将测量数值逐一通过串口监视器显示出来,是非常必要的.测量值受室内光线影响较大,在搬运物块前,务必先行修正比对参数值,通常只需要修改上述程序中的判断黑白两色的白度值即可.
本竞赛项目除任务一的物块放置A、C 和E 3 个区,还有任务二的10 个物块分2 组均放在F 和G 区(图2).本例采用舵机操作钩取物块的方式捕获物块,关键因素是准确测量机器人小车距物块的距离.
图2 物块堆放区
超声波测距选用通行的HC⁃SR04 模块(图3).该模块通过Trig 触发发出超声波,超声波遇到物块产生回波,转化为电信号由Echo 传入控制板进行处理,依据超声波的传输速度和反射时间计算出距物块的距离.
图3 HC⁃SR04 超声波测距模块示意
本例采用第三方支持库函数“HCSR04.h”实现距离测量.其定义的类UltraSonicDistanceSensor 中的成员函数measureDistanceCm(float temperature)如下,形式参数temperature 为当前室温:
/*以下触发产生10μs 超声波*/
/*以下考虑室温测量反射波时间计算距离*/
/*距离等于零或者大于某个参考值(本例修改为8.8 cm,依据是钩子的臂长)返回-1.0,其他情况返回实际距离*/
在编写实际下钩捕获物块程序前,先测量最远和最近的下钩距离,本例分别为7.68 和6.02 cm.以下是下钩捕获物块程序,室温参数26°C:
以上物块捕获程序,智能小车在循线运动过程中完成测量.小车在接近物块时需要前后移动,找到最佳下钩距离.实际应用需要根据室温、钩子臂长等因素修改程序的参数.
需要说明的是,任务二在小车接近F 或G 区堆放物块并测量之前,应先转角以对准所捕获物块(图4),转角弧度值可以通过三角公式计算. θ=arctan(a/b).如果小车旋转角速度为V,单位设定为radin/ms,则利用行驶函数延迟以对准物块:
图4 转角对准物块示意
在实验过程中,也可自右向左(或相反)超声波扫描以对准物块,实现程序不再赘述.
通过2 篇文稿的叙述,介绍了马达驱动机器人小车的设计、部分选材与制作特点,重点介绍了模拟循线、线路控制,以及对物块颜色识别、通过超声波测距准确捕获的系列程序,均为机器人小车顺利完成任务的关键所在.
也需要说明,本例的钩取物块方案不能获得竞赛满分130 分的成绩,要获得该成绩,需要将物块逐一码放在靶区10 环位置,这需要较为复杂的机械设计,而机械设计并非首都师范大学数学科学学院学生的特长,实现方法在进一步探讨中.
目前,数学科学学院学生在老师的指导下,尝试采用树莓派控制板与摄像头相结合,通过复杂的图像算法实现机器人小车的循线、颜色识别,以及距离测量等关键技术.该实验还在进行中,一旦顺利实施,将以此技术参加工程大赛,也将形成文稿与读者分享、共勉.
[1] 赵彬,高宏力,张艳荣,等.搬运机器人控制系统设计[J].机械设计与制造,2014(12):183-186.
[2] 王媛媛,刘海龙,蔡逸锋.基于单片机的吸附式仓储搬运机器人研发[J].机电信息,2020(5):85+88.
[3] 徐明娜,张峰,寇志伟.教学手动机器人控制系统设计与实现[J].制造业自动化,2015(7):120-123.
[4] 陈吕洲.Arduino 程序设计基础[M].2 版.北京:北京航空航天大学出版社.2015.
[5] 李振宇.基于Arduino 技术的光电搬运机器人设计与编程(一):循线技术与线路控制[J].首都师范大学学报(自然科学版),2021,42(4):8-11.
Design and programming of photoelectric carrying robot based on Arduino technology(Ⅱ):color test and object capture