张乐天 张博闻
摘 要:搬運机器人以中国工程机器人大赛暨国际公开赛光电搬运车型赛的设计要求为依据设计,模拟实际工业生产中搬运机器人(AGV)通过识别标志物、颜色、形状等特征,按照指定路线搬运物体到指定区域的过程。文章介绍了这款机器人各模块的设计与工作原理,给出了程序设计思想,进行了系统测试并得出最终结论。
关键词:机器人;搬运;模块化;单片机
世界科技水平飞速提高,工业自动化进程加快,工业生产对搬运机器人(Automated Guided Vehicle,AGV)的需求也随之增加,为适应各种不同的工作环境,模块化AGV将越来越受欢迎。AGV的模块化将大幅降低行业开发成本,缩短新项目的研发周期。
1 模块化智能图像识别分拣搬运机器人方案设计
本设计方案是基于STM32H7的模块化智能图像识别分拣搬运机器人,通过摄像头模块识别路线、物体,从单片机输出控制信号给电机、舵机的驱动模块,以控制机器人的行为。电机、舵机等动力模块和摄像头模块根据实际需求选择规格型号。因本款机器人以中国工程机器人大赛暨国际公开赛光电搬运车型赛的设计要求为依据设计,故各零件均以满足比赛规则要求为标准进行选择。
2 机械结构设计
(1)底盘模块设计。根据比赛规则中尺寸和功能的要求,出于对成本、加工工艺以及材料强度等方面的考虑,选择用数控切割亚克力板作为底盘,实际工业生产的模块化智能图像识别分拣搬运机器人还要根据工作环境、后期维护等方面考虑材料的选择。底盘模块设计应兼顾通用性与特征性,即通过改变几种通用设计的组合数量与方式针对性地满足特征需求。
(2)抓取模块设计。根据比赛规则中物料的尺寸和形状,选择使用数控切割的亚克力板作为抓取模块的零件,通过对两个不同的零件进行巧妙的组合,制作出了贴合比赛用的模块机械爪,控制简单,易于拆卸,方便作为模块加装到各种不同车体上。该抓取模块将两种零件通过螺柱和各种垫圈连接,可以轻松做出各种尺寸的抓取机构,如图1所示。
(3)可调摄像头支架模块设计。摄像头作为传感器,其工作状况直接影响机器人的运作。为使摄像头保持最佳工作姿态,摄像头支架既要保证稳定不晃动,又要灵活便于调整角度高度。为此,本团队设计了模块化摄像头支架,具有坚固、稳定、可调节特征。
(4)整车布局。根据场地规则要求,摄像头与抓取机构安排在整个车体前部,电池与供电的稳压板安放于车架偏前部,保证重心稍往前倾,保证轮胎抓地力。单片机安放于顶部,方便调试与检查接线,后部安装万向轮,保证车身水平。
3 电控设计
(1)控制器模块。针对该比赛,选择了openmv作为控制器模块。使用STM32H743VI ARM Cortex M7处理器,480 MHz,1 MB RAM,2 MB flash。一个串行外设接口(Serial Peripheral Interface,SPI)总线高达54 Mbs速度,方便把图像流数据传给液晶显示器( Liquid Crystal Display,LCD)扩展板、WiFi扩展板或者其他控制器。一个I2C总线、控制器局域网络(Controller Area Network,CAN)总线和一个异步串口总线(TX/RX),用来链接其他控制器或者传感器。一个12-bit ADC和一个12-bit DAC。3个I/O引脚用于舵机控制,所有的IO口都可以用于中断和脉冲宽度调制(Pulse Width Modulation,PWM)(板子上有10个I/O引脚)。一个RGB LED(三色),两个高亮的850 nm IR LED(红外),可拆卸的摄像头模块系统。
(2)电源模块。为了给多个舵机同时稳定供电,选择用LM2596S稳压板搭配3S锂电池给舵机供电,用充电宝给单片机供电的方案。
(3)舵机模块。为了保证机器人动作的精准度,对步进电机、伺服电机、圆周舵机进行了测试,最终根据测试结果确定了使用较便宜且应用广泛的MG996R舵机。MG996R舵机在6.0 V时的转速为0.13 s/60°。
(4)摄像头模块。摄像头的工作状况直接影响机器人的运作。它主要负责寻迹、标志和物块的识别,要识别颜色就必须具有识别彩色的电荷耦合器件图像传感器(Charge Coupled Device,CCD)或互补金属氧化物半导体(Complementary Metal Oxide Semiconductor,CMOS),且因为STM32H7系列单片机的处理速度有限,摄像头最好拥有自己的数据储存区。为控制成本,选用OV7725摄像头。
4 软件设计及系统开发和调试
(1)寻迹,采用边缘检测的方法进行循迹。先把摄像头获取的图像进行二值化并分割图像,对二值化图像进行腐蚀膨胀。然后利用PID控制原理,对循迹行为进行修改。
PID算法可以用下式表示:
(2)颜色识别。由于传统RGB颜色识别并不准确,可采用HSL的方式进行颜色识别,进行RGB转HSL转换之前,需要在屏幕中寻找腐蚀中心,得到腐蚀中心后,需要进行一个腐蚀膨胀算法来判断整个色块的颜色,代码如下:
static int Corrode(unsigned int oldx, unsigned int oldy, const TARGET_CONDI* Condition, RESULT* Resu)
{
unsigned int Xmin, Xmax, Ymin, Ymax, i, FailCount = 0;
COLOR_RGB Rgb;
COLOR_HSL Hsl;
for (i = oldx; i > IMG_X; i--)
{
ReadColor(i, oldy, &Rgb);
RGBtoHSL(&Rgb, &Hsl);
if (!ColorMatch(&Hsl, Condition))
FailCount++;
if (FailCount > (((Condition->WIDTH_MIN + Condition->WIDTH_MAX) >> 2) >> ALLOW_FAIL_PER))
break;
}
Xmin = i;
FailCount = 0;
for (i = oldx; i < IMG_X + IMG_W; i++)
{
ReadColor(i, oldy, &Rgb);
RGBtoHSL(&Rgb, &Hsl);
if (!ColorMatch(&Hsl, Condition))
FailCount++;
if (FailCount > (((Condition->WIDTH_MIN + Condition->WIDTH_MAX) >> 2) >> ALLOW_FAIL_PER))
break;
}
Xmax = i;
FailCount = 0;
for (i = oldy; i > IMG_Y; i--)
{
ReadColor(oldx, i, &Rgb);
RGBtoHSL(&Rgb, &Hsl);
if (!ColorMatch(&Hsl, Condition))
FailCount++;
if (FailCount > (((Condition->HIGHT_MIN + Condition->HIGHT_MAX) >> 2) >> ALLOW_FAIL_PER))
break;
}
Ymin = i;
FailCount = 0;
for (i = oldy; i < IMG_Y + IMG_H; i++)
{
ReadColor(oldx, i, &Rgb);
RGBtoHSL(&Rgb, &Hsl);
if (!ColorMatch(&Hsl, Condition))
FailCount++;
if (FailCount > (((Condition->HIGHT_MIN + Condition->HIGHT_MAX) >> 2) >> ALLOW_FAIL_PER))
break;
}
Ymax = i;
FailCount = 0;
Resu->x = (Xmin + Xmax) / 2;
Resu->y = (Ymin + Ymax) / 2;
Resu->w = Xmax - Xmin;
Resu->h = Ymax - Ymin;
if (((Xmax - Xmin) > (Condition->WIDTH_MIN)) && ((Ymax - Ymin) > (Condition->HIGHT_MIN)) && \
((Xmax - Xmin) < (Condition->WIDTH_MAX)) && ((Ymax - Ymin) < (Condition->HIGHT_MAX)))
return 1;
else
return 0;
}
然后由給定的颜色数值进行依次比对。
5 结语
该搬运机器人综合了成本、制作难度、泛用性以及维护难度等多方面而设计,设计目的不仅是赢得比赛,更是对模块化智能搬运机器人的尝试和探索,其可调节、模块化、低成本、通用性高等特点展现了独特的价值,并对实际工业生产的搬运机器人技术有一定的启发。