張樂天 張博聞
摘? ?要:搬運(yùn)機(jī)器人以中國工程機(jī)器人大賽暨國際公開賽光電搬運(yùn)車型賽的設(shè)計要求為依據(jù)設(shè)計,模擬實際工業(yè)生產(chǎn)中搬運(yùn)機(jī)器人(AGV)通過識別標(biāo)志物、顏色、形狀等特征,按照指定路線搬運(yùn)物體到指定區(qū)域的過程。文章介紹了這款機(jī)器人各模塊的設(shè)計與工作原理,給出了程序設(shè)計思想,進(jìn)行了系統(tǒng)測試并得出最終結(jié)論。
關(guān)鍵詞:機(jī)器人;搬運(yùn);模塊化;單片機(jī)
世界科技水平飛速提高,工業(yè)自動化進(jìn)程加快,工業(yè)生產(chǎn)對搬運(yùn)機(jī)器人(Automated Guided Vehicle,AGV)的需求也隨之增加,為適應(yīng)各種不同的工作環(huán)境,模塊化AGV將越來越受歡迎。AGV的模塊化將大幅降低行業(yè)開發(fā)成本,縮短新項目的研發(fā)周期。
1? ? 模塊化智能圖像識別分揀搬運(yùn)機(jī)器人方案設(shè)計
本設(shè)計方案是基于STM32H7的模塊化智能圖像識別分揀搬運(yùn)機(jī)器人,通過攝像頭模塊識別路線、物體,從單片機(jī)輸出控制信號給電機(jī)、舵機(jī)的驅(qū)動模塊,以控制機(jī)器人的行為。電機(jī)、舵機(jī)等動力模塊和攝像頭模塊根據(jù)實際需求選擇規(guī)格型號。因本款機(jī)器人以中國工程機(jī)器人大賽暨國際公開賽光電搬運(yùn)車型賽的設(shè)計要求為依據(jù)設(shè)計,故各零件均以滿足比賽規(guī)則要求為標(biāo)準(zhǔn)進(jìn)行選擇。
2? ? 機(jī)械結(jié)構(gòu)設(shè)計
(1)底盤模塊設(shè)計。根據(jù)比賽規(guī)則中尺寸和功能的要求,出于對成本、加工工藝以及材料強(qiáng)度等方面的考慮,選擇用數(shù)控切割亞克力板作為底盤,實際工業(yè)生產(chǎn)的模塊化智能圖像識別分揀搬運(yùn)機(jī)器人還要根據(jù)工作環(huán)境、后期維護(hù)等方面考慮材料的選擇。底盤模塊設(shè)計應(yīng)兼顧通用性與特征性,即通過改變幾種通用設(shè)計的組合數(shù)量與方式針對性地滿足特征需求。
(2)抓取模塊設(shè)計。根據(jù)比賽規(guī)則中物料的尺寸和形狀,選擇使用數(shù)控切割的亞克力板作為抓取模塊的零件,通過對兩個不同的零件進(jìn)行巧妙的組合,制作出了貼合比賽用的模塊機(jī)械爪,控制簡單,易于拆卸,方便作為模塊加裝到各種不同車體上。該抓取模塊將兩種零件通過螺柱和各種墊圈連接,可以輕松做出各種尺寸的抓取機(jī)構(gòu),如圖1所示。
(3)可調(diào)攝像頭支架模塊設(shè)計。攝像頭作為傳感器,其工作狀況直接影響機(jī)器人的運(yùn)作。為使攝像頭保持最佳工作姿態(tài),攝像頭支架既要保證穩(wěn)定不晃動,又要靈活便于調(diào)整角度高度。為此,本團(tuán)隊設(shè)計了模塊化攝像頭支架,具有堅固、穩(wěn)定、可調(diào)節(jié)特征。
(4)整車布局。根據(jù)場地規(guī)則要求,攝像頭與抓取機(jī)構(gòu)安排在整個車體前部,電池與供電的穩(wěn)壓板安放于車架偏前部,保證重心稍往前傾,保證輪胎抓地力。單片機(jī)安放于頂部,方便調(diào)試與檢查接線,后部安裝萬向輪,保證車身水平。
3? ? 電控設(shè)計
(1)控制器模塊。針對該比賽,選擇了openmv作為控制器模塊。使用STM32H743VI ARM Cortex M7處理器,480 MHz,1 MB RAM,2 MB flash。一個串行外設(shè)接口(Serial Peripheral Interface,SPI)總線高達(dá)54 Mbs速度,方便把圖像流數(shù)據(jù)傳給液晶顯示器( Liquid Crystal Display,LCD)擴(kuò)展板、WiFi擴(kuò)展板或者其他控制器。一個I2C總線、控制器局域網(wǎng)絡(luò)(Controller Area Network,CAN)總線和一個異步串口總線(TX/RX),用來鏈接其他控制器或者傳感器。一個12-bit ADC和一個12-bit DAC。3個I/O引腳用于舵機(jī)控制,所有的IO口都可以用于中斷和脈沖寬度調(diào)制(Pulse Width Modulation,PWM)(板子上有10個I/O引腳)。一個RGB LED(三色),兩個高亮的850 nm IR LED(紅外),可拆卸的攝像頭模塊系統(tǒng)。
(2)電源模塊。為了給多個舵機(jī)同時穩(wěn)定供電,選擇用LM2596S穩(wěn)壓板搭配3S鋰電池給舵機(jī)供電,用充電寶給單片機(jī)供電的方案。
(3)舵機(jī)模塊。為了保證機(jī)器人動作的精準(zhǔn)度,對步進(jìn)電機(jī)、伺服電機(jī)、圓周舵機(jī)進(jìn)行了測試,最終根據(jù)測試結(jié)果確定了使用較便宜且應(yīng)用廣泛的MG996R舵機(jī)。MG996R舵機(jī)在6.0 V時的轉(zhuǎn)速為0.13 s/60°。
(4)攝像頭模塊。攝像頭的工作狀況直接影響機(jī)器人的運(yùn)作。它主要負(fù)責(zé)尋跡、標(biāo)志和物塊的識別,要識別顏色就必須具有識別彩色的電荷耦合器件圖像傳感器(Charge Coupled Device,CCD)或互補(bǔ)金屬氧化物半導(dǎo)體(Complementary Metal Oxide Semiconductor,CMOS),且因為STM32H7系列單片機(jī)的處理速度有限,攝像頭最好擁有自己的數(shù)據(jù)儲存區(qū)。為控制成本,選用OV7725攝像頭。
4? ? 軟件設(shè)計及系統(tǒng)開發(fā)和調(diào)試
(1)尋跡,采用邊緣檢測的方法進(jìn)行循跡。先把攝像頭獲取的圖像進(jìn)行二值化并分割圖像,對二值化圖像進(jìn)行腐蝕膨脹。然后利用PID控制原理,對循跡行為進(jìn)行修改。
PID算法可以用下式表示:
(2)顏色識別。由于傳統(tǒng)RGB顏色識別并不準(zhǔn)確,可采用HSL的方式進(jìn)行顏色識別,進(jìn)行RGB轉(zhuǎn)HSL轉(zhuǎn)換之前,需要在屏幕中尋找腐蝕中心,得到腐蝕中心后,需要進(jìn)行一個腐蝕膨脹算法來判斷整個色塊的顏色,代碼如下:
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;
}
然后由給定的顏色數(shù)值進(jìn)行依次比對。
5? ? 結(jié)語
該搬運(yùn)機(jī)器人綜合了成本、制作難度、泛用性以及維護(hù)難度等多方面而設(shè)計,設(shè)計目的不僅是贏得比賽,更是對模塊化智能搬運(yùn)機(jī)器人的嘗試和探索,其可調(diào)節(jié)、模塊化、低成本、通用性高等特點(diǎn)展現(xiàn)了獨(dú)特的價值,并對實際工業(yè)生產(chǎn)的搬運(yùn)機(jī)器人技術(shù)有一定的啟發(fā)。