賀一烜 柏孟杰 鄭登華
摘 要:智能物流機(jī)器人是當(dāng)前機(jī)器人行業(yè)發(fā)展的一個分支,由機(jī)械、電子、控制等學(xué)科交叉而成,其中包括機(jī)械結(jié)構(gòu)的設(shè)計、電路的設(shè)計、控制程序的編寫和調(diào)試等,這些因素影響著機(jī)器人的移動速度、定位的準(zhǔn)確性以及預(yù)期目標(biāo)達(dá)成的能力等。對于初學(xué)者或有一定基礎(chǔ)的愛好者如何快速入門,以及對于工程訓(xùn)練綜合能力競賽的相關(guān)策略,本文將做具體論述。
關(guān)鍵詞:Arduino;智能物流;機(jī)器人;競賽
Arduino是一款易于上手、功能齊全、[1]操作簡單的開源性電子設(shè)計平臺,其包含硬件(各種型號的Arduino開發(fā)板)和軟件(Arduino的開發(fā)環(huán)境)。目前,很多電子愛好者都以Arduino為核心,電機(jī)、傳感器等各種硬件為載體做出各種電子設(shè)計,市面上也有很多的以Arduino為核心的DIY電子設(shè)計。智能物流機(jī)器人的設(shè)計采用Arduino為控制核心,可以降低編程方面的難度,而且其豐富的功能又能滿足機(jī)器人的需要。目前,“中國大學(xué)生工程訓(xùn)練綜合能力競賽”,浙江省、四川省、黑龍江省等一些省級教育廳主辦的機(jī)器人競賽或工程訓(xùn)練競賽,都設(shè)有智能物流機(jī)器人這一競賽項(xiàng)目,對于此類競賽的應(yīng)對方法,以及利用Arduino如何進(jìn)行具體的設(shè)計,本文將從以下三方面論述。
一、智能物流機(jī)器人的設(shè)計
智能物流機(jī)器人的功能在于可以通過從二維碼讀取區(qū)的二維碼,得到夾取物塊的信息和物塊的放置位置,夾取物塊并將指定的物塊送到目標(biāo)區(qū)域。機(jī)器人的設(shè)計主要分為底盤設(shè)計、機(jī)械手設(shè)計、電路設(shè)計以及控制程序設(shè)計。機(jī)器人的驅(qū)動方面多為直流電機(jī)和舵機(jī),直流電機(jī)控制容易,舵機(jī)較大的扭力可以使機(jī)械手抓取物塊,直流電機(jī)的種類和舵機(jī)的型號視實(shí)際需求而定。
底盤結(jié)構(gòu)上通常為剛性結(jié)構(gòu),底盤形狀根據(jù)輪子的數(shù)量和輪子的種類而定,通常有四輪底盤和三輪底盤,輪子通常有普通橡膠輪、全向輪、麥克納姆輪等。四輪底盤的形狀通常為長條形或者正四邊形,[2]采用普通橡膠輪時,輪以常規(guī)四驅(qū)車輪子分布方式安裝,采用全向輪或者麥克納姆輪時,輪通常以向底盤中心的十字線傾斜45°分布,且四個輪均以這兩條字線相互對稱。三輪底盤通常為圓形,三個輪三等分橫向分布在底盤邊緣,輪通常采用全向輪或麥克納姆輪。當(dāng)四輪底盤采用普通橡膠輪時,轉(zhuǎn)彎前往取料區(qū)或放置區(qū)時,容易在循跡路線上出現(xiàn)偏差,會使機(jī)器人無法自我調(diào)整并偏離路線,而采用全向輪或者麥克納姆輪時,可以直接使機(jī)器人的側(cè)向成為機(jī)器人的正向,原機(jī)器人的正向轉(zhuǎn)為機(jī)器人的側(cè)向,成功避免了普通橡膠輪機(jī)器人轉(zhuǎn)彎時容易產(chǎn)生偏差的問題。三輪底盤也避免了轉(zhuǎn)彎時的偏差問題,這種底盤轉(zhuǎn)彎時只需要原地轉(zhuǎn)動90°,即視為完成轉(zhuǎn)彎變向,且三輪底盤前進(jìn)時只需要控制兩個電機(jī)的轉(zhuǎn)動,更便于對機(jī)器人各種情況的編程。
機(jī)械手的設(shè)計方面,因使用舵機(jī)去驅(qū)動機(jī)械手,建議設(shè)計機(jī)械手時的舵機(jī)使用數(shù)目越少越好。舵機(jī)本身具有一定的誤差,如果使用n個舵機(jī),那么實(shí)際的誤差便是一個舵機(jī)的誤差的n次方,舵機(jī)的數(shù)目越少,實(shí)際具有的誤差便越少,則降低了機(jī)械手抓取時產(chǎn)生意外的可能性。機(jī)械手抓取的部位,可以加海綿或者橡膠等物體,增加抓取部位的摩擦力。
在電路設(shè)計方面,則要多考慮電壓和供電方面的問題。機(jī)器人里主要用到直流電機(jī)、舵機(jī)、攝像頭模塊、顯示屏、控制板、穩(wěn)壓模塊和傳感器等電路元件,再考慮到電路元件的自重和機(jī)器人機(jī)身重量,機(jī)器人運(yùn)行電量消耗較大。所以盡量避免單電源供電,可以考慮準(zhǔn)備兩個電源,一個電源給機(jī)器人底盤的各個電路元件供電,另一個直接給機(jī)械手上的舵機(jī)供電。因底盤有幾乎全部的電路元件,給機(jī)器人底盤供電的電源,其電壓和電量要偏高些,給機(jī)械手供電的電源的電壓和電量可以適當(dāng)?shù)鸵恍?。為了便于檢查故障的電路元件的連線,可以制作一PCB板,將電路元件和電源的布線集合在PCB板上,當(dāng)電路出現(xiàn)故障時,能快速檢查線路方面的問題,而且也使機(jī)器人的電路元件連接更加方便。Arduino控制板的拓展板也可以作為替換PCB板的一個選擇,但相比之下PCB板更加個性化。
控制程序設(shè)計方面,Arduino的開發(fā)支持C/C++編程語言,因此用戶可以通過C/C++語言來實(shí)現(xiàn)對機(jī)器人上的輸入模塊(傳感器、攝像頭)的信號的處理和輸出模塊(電機(jī)、顯示屏、舵機(jī))的控制,以此來達(dá)到預(yù)期的目標(biāo)。目前智能物流機(jī)器人競賽中,參賽隊(duì)伍通常要根據(jù)賽道的實(shí)際情況設(shè)計出相應(yīng)的程序,機(jī)器人在二維碼讀取區(qū)域附近讀取二維碼上的信息,并根據(jù)二維碼上的信息,二維碼上有要抓取的物塊的顏色和放置的區(qū)域的信息,移動到物塊提取的區(qū)域,抓取指定的物塊,并攜帶物塊運(yùn)送到指定的放置位置,同時機(jī)器人上的顯示屏要顯示要抓取的目標(biāo)和放置的路徑的信息。根據(jù)比賽要求的不同,程序視要求做出相應(yīng)的改變。機(jī)械手上的舵機(jī)也可以接在16路舵機(jī)控制板上與Arduino控制板串口通信,初學(xué)者可以通過這種辦法用16路舵機(jī)控制板的上位機(jī)直觀的控制舵機(jī)轉(zhuǎn)動的角度,來設(shè)計機(jī)械手的抓取程序。在二維碼信息讀取的方面,初學(xué)者也可以使用專門的二維碼讀取模塊,讀取的程序會比攝像頭的讀取程序簡單。但需要注意的是,有的二維碼模塊讀取后的數(shù)字信息直接賦予執(zhí)行命令的程序,可能會出現(xiàn)抓取指定物塊的程序無法執(zhí)行的情況,這時需預(yù)先設(shè)定一個變量,用這個變量來代替讀取完二維碼后返回的數(shù)值,這樣抓取的程序便可以執(zhí)行。例如,用“1”、“2”和“3”這三個數(shù)字生成二維碼,部分二維碼模塊讀取后返回的數(shù)值分別是“49”、“50”和“51”,那么定義三個變量int x,y,z,對應(yīng)三個數(shù)值,當(dāng)有數(shù)值返回時,便將“1”這數(shù)值賦予相應(yīng)的變量,下為一段示例:if(Serial.available()>0){delay(1);ch=Serial.read();if(ch==49){x=1;}if(ch==50){y=1;}if(ch==51){z=1;}}。
當(dāng)機(jī)器人制作完成后不斷調(diào)試的過程,對電路元件的消耗也是較大的。應(yīng)該備用一些零件和電路元件,當(dāng)出現(xiàn)問題時,及時將損壞部分更換,繼續(xù)調(diào)試。如果機(jī)械手采用的是舵機(jī)控制板和Arduino控制板串口通信,要注意給舵機(jī)控制板供電的電壓,舵機(jī)控制板相較于Arduino控制板更容易被電流燒毀。普通的直流電機(jī)相較于直流減速電機(jī)或者步進(jìn)電機(jī)更容易被損壞,應(yīng)當(dāng)多備用一些。減速電機(jī)或者步進(jìn)電機(jī)的金屬軸不能直接用手去觸碰,手上的汗液容易對轉(zhuǎn)軸位置造成腐蝕,影響電機(jī)的性能。電機(jī)的驅(qū)動模塊,如L298n電機(jī)驅(qū)動模塊,也比較容易損壞。除此之外,機(jī)器人各個接線部分要經(jīng)常檢查,機(jī)器人運(yùn)行時很容易造成接線處松動,致使部分電路元件短暫失效。
二、智能物流機(jī)器人的調(diào)試
智能物流機(jī)器人的設(shè)計制作的完成,對一個完整的可以按照要求準(zhǔn)確執(zhí)行命令的機(jī)器人來說,只算完成了最基礎(chǔ)的部分。而后期的改良和調(diào)試,是更為主要的一部分。在競賽賽道上調(diào)試時,經(jīng)常會遇到很多種問題,例如采用循跡移動的機(jī)器人在直角時會偏離循跡路線、攝像頭或者二維碼模塊無法有效啟動去識別二維碼、機(jī)械手夾取物塊時突然松動等問題。對于這一類問題,通常要選擇排除法解決,從電路方面開始排查,很多時機(jī)器人出現(xiàn)故障都是因?yàn)榫€路松動或者電路元件損壞引發(fā)的,隨后再檢查機(jī)械結(jié)構(gòu)和裝配方面,檢查機(jī)械結(jié)構(gòu)是否損壞失效,最后是檢查程序問題,可能是程序中某一數(shù)值或循環(huán)邏輯出現(xiàn)了偏差。例如,采用循跡方式移動的機(jī)器人,在直角轉(zhuǎn)彎處第一次調(diào)試發(fā)現(xiàn)可以順利完成轉(zhuǎn)彎,而第二次卻偏離了循跡線。對于這種情況,可以先從電路方面開始檢查,確認(rèn)接線無誤后,檢查電機(jī)情況,觀察正常通電的情況下左右兩個電機(jī)的轉(zhuǎn)速是否一致,如果電機(jī)本身沒有問題,在擰通過電機(jī)的長螺絲時不要擰過緊,螺絲擰過緊也會擠壓電機(jī)內(nèi)部的齒輪,使轉(zhuǎn)彎出現(xiàn)一定程度的偏差。如果此時問題依然存在,因機(jī)械結(jié)構(gòu)問題常出現(xiàn)在機(jī)械手上,可先不考慮機(jī)械結(jié)構(gòu)的問題,直接在程序中檢查問題,如在轉(zhuǎn)彎程序、循跡程序和延時設(shè)定等方面檢查。
因智能物流機(jī)器人的調(diào)試需要花大量的時間,所以調(diào)試時一定要有耐心。在不斷的調(diào)試過程中發(fā)現(xiàn)問題、解決問題并積累經(jīng)驗(yàn),以便于之后做類似的機(jī)器人時知道如何處理相似的情況。智能物流機(jī)器人主要執(zhí)行的功能就是移動、抓放、和視覺。多數(shù)競賽場地是網(wǎng)格狀場地,那么在機(jī)器人的移動方式方面,就要多加考慮,可以采用在網(wǎng)格狀場地循跡移動到目標(biāo)位置,那么在調(diào)試的過程中,如何優(yōu)化循跡程序,是一個重要的問題,這需要在不斷的循跡測試的過程中對部分?jǐn)?shù)據(jù)微調(diào),使機(jī)器人可以順利循跡。不僅如此,考慮到場地會反光,如何能讓循跡的傳感器準(zhǔn)確分辨循跡線也是一個重要的問題,這時需要在場地上對所有循跡的傳感器的靈敏度進(jìn)行調(diào)整,使用于循跡的傳感器都可以準(zhǔn)確分辨循跡線,減少光線對傳感器的影響,傳感器在調(diào)試到最佳后盡量不要再加以改動,微小的改動都有可能使傳感器靈敏度受影響。移動方式方面,除了循跡移動,也可以選擇定位移動,即通過計算機(jī)器人出發(fā)點(diǎn)到目標(biāo)區(qū)域之間的距離以及輪子轉(zhuǎn)一圈所前進(jìn)的距離,以此確定輪子需要轉(zhuǎn)動多少圈可以移動到目標(biāo)區(qū)域,在調(diào)試這種移動方式的機(jī)器人時,要準(zhǔn)確計算距離的大小,不僅如此,兩種移動方式都需要考慮機(jī)器人在目標(biāo)區(qū)域停止時會不會打滑這種情況,視情況用一些材料增加輪子的摩擦力。在抓放物塊的調(diào)試時,要時刻根據(jù)機(jī)械手的情況去修改,舵機(jī)的轉(zhuǎn)動角度要準(zhǔn)確測量再寫入程序里,不能讓機(jī)械手動作執(zhí)行過快,盡量將速度減慢,避免物塊在運(yùn)輸?shù)倪^程中脫落以及在放置時不穩(wěn)而倒下。在調(diào)試視覺時,要注意攝像頭的識別距離,進(jìn)行識別時,將機(jī)器人在自己調(diào)試的最適距離范圍內(nèi)。
三、智能物流機(jī)器人的競賽
完成智能物流機(jī)器人的設(shè)計制作和調(diào)試之后,最后的面對的就是相關(guān)競賽的發(fā)揮和策略。首先要找好隊(duì)員,隊(duì)員之間要相互協(xié)調(diào),通常競賽為三人一組,一個人做機(jī)器人的結(jié)構(gòu)、一個人編寫機(jī)器人的程序、最后一人最好兩者都懂一些來做機(jī)器人的相關(guān)調(diào)試。機(jī)器人的機(jī)身多為有機(jī)玻璃板用激光切割機(jī)切割而成,控制板多數(shù)競賽沒有要求,可自由選擇。因Arduino有中文社區(qū),相關(guān)資料更為豐富,其自身控制板操作簡單、種類多和功能足,所以Arduino控制板是一個很好的選擇,其中Arduino Mega2560控制板效果更好。有些競賽要求機(jī)械手與物塊接觸的全部零件需要用3D打印機(jī)打印出來,應(yīng)對策略可以調(diào)整機(jī)械手的抓取位置,在保證抓取效果不影響的情況下,減少與物塊接觸的部分,這樣會用最少的時間打印完零件,會有更多的時間進(jìn)行現(xiàn)場調(diào)試。
競賽前,觀察賽道和各區(qū)域分布是否按照競賽規(guī)則上的圖紙布置,現(xiàn)場光線的情況,如有問題,及時向場地維護(hù)人員提出申請。正式比賽前調(diào)試時,要充分利用好每一分鐘,大多數(shù)情況下賽前調(diào)試的時間很短,此時盡量不要再修改機(jī)器人的程序了,需要的是依靠參賽選手備賽過程中調(diào)試時的大量經(jīng)驗(yàn)積累來應(yīng)對賽前調(diào)試的突發(fā)情況。最后,良好的心理素質(zhì)關(guān)系到競賽時水平的發(fā)揮,不要過于緊張,調(diào)整好狀態(tài),穩(wěn)定發(fā)揮出備賽時的水平。
四、結(jié)語
智能物流機(jī)器人的設(shè)計并不是很困難,但是要將其制作出來,應(yīng)用在比賽中,取得優(yōu)異的成績,也絕非易事。競賽時,考驗(yàn)的是隊(duì)伍成員之間的相互配合,共同將機(jī)器人完成,而不是全由一個人負(fù)責(zé)。遇到特殊情況時,要保持冷靜,多方面考慮。
參考文獻(xiàn):
[1]梅蓉.淺析Arduino單片機(jī)智能小車設(shè)計[J].企業(yè)科技與發(fā)展,2019(02):123-124.
[2]吳波濤,孔金平,王湘.基于Arduino和樹莓派的智能小車的設(shè)計與實(shí)現(xiàn)[J].電子設(shè)計工程,2017,25(15):58-61.
作者簡介:賀一烜,就讀于西南石油大學(xué)本科二年級學(xué)生,常參與機(jī)器人類相關(guān)競賽,單位是:西南石油大學(xué)機(jī)電工程學(xué)院。