基于OpenMV的投篮机器人设计*
2020-09-25黄淑芬罗炜杰洪世杰高志涛
黄淑芬,罗炜杰,洪世杰,高志涛
(广东工业大学华立学院机电工程学院,广州 511325)
0 引言
近年来,移动机器人在人类生活中的应用不断扩大,投篮机器人作为移动机器人的一种,通过对它的研究,可以推动移动机器人技术发展[1]。视觉识别技术是移动机器人研究的关键技术之一,视觉信息的获取是机器人目标识别和规划、导航的基础[2-3]。目前视觉识别和定位大多都应用于工业环境下,对于特定的应用场景研究较少,而且市场上基本都采用专业控制器和工业相机,成本太高,开发难度大[3-4]。本文研究一种可应用于文娱、教育领域的投篮机器人,利用低成本的OpenMV自动采集和分析目标的图像数据,基于Python语言的视觉识别算法对目标进行快速识别、定位,实现自主决策和智能化传感控制[5]。
1 结构设计
投篮机器人结构主要由机械臂、手爪、贮球装置、小车组成。小车用亚克力板制作,尺寸为250 mm×200 mm。机械臂位于小车右侧,为了避免碰到摄像头等器件,设计成长条状。机械臂末端连接一对手爪,手爪采用半球形结构。由于机械臂与地面存在一定高度,机械臂接触地面时是倾斜向下的,因此手爪设计成以一定的角度向上翘,使其抓球时与地面接近平行状态,更好地将小球放进贮球装置中。贮球装置由1个圆筒和4个支架组成,前面2个支架用于固定圆筒的角度,后面2个支架用于固定圆筒。小球的发射装置由齿轮和齿条组成,齿轮有几个齿被切断。通过齿轮齿条传动,拉动齿条上的橡皮筋,赋予齿条一定的初速度。当齿轮旋转到事先已被磨掉齿的位置时,由于齿条没有与齿轮啮合,橡皮筋带动齿条撞击圆筒里的小球,小球沿着贮球装置的轨道飞出,故圆筒也是小球的发射轨道。投篮机器人实物如图1所示。
图1 投篮机器人实物图
2 系统概况
2.1 系统总体设计
该投篮机器人由OpenMV视觉模块、电机驱动、四轮小车、机械手臂、贮球装置和齿轮齿条弹射器组成。由小车前端的OpenMV摄像头采集小球、投篮区和篮筐图像,通过OpenMV自带的STM32单片机进行视觉识别及定位,控制机械臂手臂(由机械臂和手爪组成)拾球并放入贮球装置、四轮小车旋转寻找目标和前进后退达到目标区域、齿轮齿条弹射器发射小球等动作。投篮机器人总体框图如图2所示。
图2 投篮机器人总体框图
2.2 硬件选型
OpenMV视觉模块选用OpenMV4,以STM32H7处理器为内核,以OV7725摄像头为图像采集模块,是一种基于Python语言进行编程驱动的机器视觉处理模块[6-7]。OpenMV不仅具有I/O端口控制、读取文件系统等基础功能,用户还可以使用OpenMV提供的机器视觉功能进行二次开发,实现颜色跟踪、人脸识别、边缘检测等功能[8]。因此它既是本方案的视觉识别装置,也是主控装置。
机械臂由RDS3115双轴数字舵机控制,该舵机可控角度范围0°~270°,由PWM脉冲调节角度,扭矩1.47 N·m(6 V),适合机器人的各关节活动。手爪舵机选用ST90S,该舵机扭矩0.2 N·m(6 V),可控角度范围0°~180°。齿轮齿条弹射器的动作由MG995 360°舵机控制。为控制OpenMV的拍摄角度,在OpenMV下方安装了一个MG995 180°舵机,使摄像头抬高时增大视野范围,放低时增加识别准确率。
小车四轮各安装一个直流减速电机,由电机驱动模块TB6612FNG驱动,使小车前进、后退或原地旋转,达到寻找和追踪小球的目的。
3 视觉识别
视觉识别是对摄像头采集到的图像进行颜色特征和形状特征的提取[6]。为了提高软件开发效率,使用OpenMV机器视觉库进行图像处理。OpenMV颜色识别算法的依据是Lab颜色空间。L是亮度,取值范围是[0,100];a和b是2个颜色通道,取值范围都是[127,-128]。a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表蓝色。因此可以通过修改L分量调整亮度,修改a和b分量的输出色阶实现精确的颜色平衡[2]。
本文中小球、投篮区、篮筐用不同的颜色标识,因此颜色识别非常关键。OpenMV提供了机器视觉功能的Python编程接口,其中image.find_blobs()函数用来进行颜色识别。例如本设计中使用语句blobs=img.find_blobs([blue_threshold],roi=area)寻找蓝色小球,blue_threshold是预设的蓝色小球阈值,roi是“感兴趣区”,blobs是返回的色块对象。Open-MV的集成开发环境OpenMV IDE中的阈值编辑器为颜色阈值的调试提供了极大的方便。如图3所示,图中有6个颜色各异的小球,其中右上角小球为蓝色。拖动阈值编辑器6个滑块分别设置L、a、b的最小值和最大值,当目标颜色变成白色,其他颜色全变为黑色时,表明找到被跟踪的目标。由图3可得到蓝色小球的Lab阈值[16,56,1,53,-90,-31]。在视觉识别算法中使用image.find_blobs()将像素点与该阈值进行比较,从而判断是否找到蓝色小球。
图3 OpenMV IDE颜色阈值调试界面
视觉识别算法中,首先进行感光元件(摄像头)初始化参数设置,包括库函数sensor.reset()初始化感光元件;sensor.set_pixformat(sensor.RGB565)设置像素为彩色;sensor.set_framesize(sensor.QVGA)设置图像像素为320×240;sensor.skip_frames(10)跳过10张照片,等待感光元件变稳定;sensor.set_auto_whitebal(False) 自动白平衡开启关闭(在使用颜色追踪时,需要关闭自动白平衡)。接着使用sensor.snapshot()采集图像,image.find_blobs()找到目标颜色后,使用image.draw_rectangle()将目标颜色区域用矩形框标注,image.draw_cross() 在目标颜色区域的中心画十字形标记。
4 软件设计
投篮机器人的软件设计包括摄像头初始化设置、目标阈值设置、图像采集、视觉识别和定位、小车驱动、PID算法、舵机控制等模块。
图4 软件流程图
软件流程如图4所示,系统上电启动,进行摄像头初始化和各目标色块阈值设定。主控装置控制电机驱动模块驱动小车原地旋转,摄像头采集图像。当识别到目标小球时锁定色块坐标,小车调整方向使色块位于图像中心位置,通过PID算法控制小车向前行驶并精确停到距离小球一定位置上。主控装置控制RDS3115舵机将机械臂放下并启动手爪上的ST90S舵机抓取小球,再次控制机械臂将小球放入贮球装置。接着小车原地旋转,识别投篮区色块,确定方向后前进,到达投篮区。之后原地旋转识别篮筐位置,识别到目标时再次调整对准篮框中心位置,齿轮齿条弹射器上的MG995 360°舵机启动,拉动齿条将小球弹射出去。
5 结束语
在测试中,使用红色、蓝色小球作为拾取对象,投篮区为绿色,篮筐紫色。在正常光照条件下,投篮机器人目标识别率为98%。排除小球在墙壁或者篮筐边沿的情况下,正确夹取规定颜色的小球放入贮球装置的成功率为99%。投篮成功率为36%。测试结果验证了视觉识别算法、小车PID和机械手臂控制算法的正确性。但由于小球发射是由橡皮筋赋予初速度,稳定性较差,因此投篮命中率不高,而且当投篮距离发生变化时,不能自动调整小球初速度,需要人工调整橡皮筋松紧程度或者齿轮齿数。未来可将机械弹射换成电磁弹射,通过视觉识别计算出投篮距离,自动调节电磁的弹射力度。
本机器人装置结构简单、成本低,基于Python语言编写的视觉识别算法提高了程序的可运行性和开发效率,在文娱、教育等领域具有广阔的应用前景。