摘 要:利用機(jī)器人代替人工搬運(yùn)將成為未來的趨勢(shì)之一,為適應(yīng)非結(jié)構(gòu)化地面,本文設(shè)計(jì)一種機(jī)器人,仿照人類腿部結(jié)構(gòu),將機(jī)器人足部設(shè)計(jì)為正屈膝串聯(lián)構(gòu)型,以適應(yīng)非結(jié)構(gòu)化復(fù)雜地面環(huán)境。以樹莓派4B為核心主控,搭配串行總線舵機(jī)以及攝像頭進(jìn)行視覺識(shí)別任務(wù)。該機(jī)器人利用攝像頭獲取外界圖像,圖像經(jīng)過處理后,識(shí)別行走路線以及待抓取事物,識(shí)別完成后,根據(jù)程序設(shè)定控制串行總線舵機(jī),進(jìn)而控制機(jī)器人的行動(dòng)與動(dòng)作。測(cè)試結(jié)果表明,機(jī)器人基本可以完成指定物品的抓取與巡線行走。
關(guān)鍵詞:人形機(jī)器人;樹莓派4B;視覺識(shí)別
中圖分類號(hào):TP 242 " 文獻(xiàn)標(biāo)志碼:A
1 基于嵌入式Linux系統(tǒng)的搬運(yùn)機(jī)器人總體設(shè)計(jì)
機(jī)器人的主要功能為尋跡行走、識(shí)別物品和抓取物品,本文以人形結(jié)構(gòu)為框架,結(jié)合各電控模塊編寫程序來實(shí)現(xiàn)以上功能。機(jī)器人的總體設(shè)計(jì)包括硬件設(shè)計(jì)和軟件設(shè)計(jì)。硬件設(shè)計(jì)包括機(jī)器人的電控系統(tǒng)與機(jī)械結(jié)構(gòu)設(shè)計(jì),設(shè)計(jì)完成后,裝配各個(gè)模塊并進(jìn)行調(diào)試。完成機(jī)器人的組裝后,進(jìn)行機(jī)器人軟件設(shè)計(jì)方面的調(diào)試,軟件設(shè)計(jì)包括視覺系統(tǒng)程序設(shè)計(jì)和動(dòng)作控制程序設(shè)計(jì),在各模塊全部設(shè)計(jì)完成后對(duì)機(jī)器人本體進(jìn)行組裝并調(diào)試。
機(jī)器人的電控系統(tǒng)包括主控核心、電源模塊、驅(qū)動(dòng)模塊以及機(jī)械結(jié)構(gòu)設(shè)計(jì)。主控核心使用嵌入式Linux系統(tǒng),運(yùn)行內(nèi)部程序代碼控制各個(gè)模塊;電源模塊為舵機(jī)與其余模塊提供電源,保證各個(gè)部件正常運(yùn)行;驅(qū)動(dòng)模塊包括舵機(jī)驅(qū)動(dòng)電路和全身舵機(jī),其作用是執(zhí)行指定任務(wù)。機(jī)械結(jié)構(gòu)設(shè)計(jì)包括機(jī)器人的全身舵機(jī)分配、自由度分配等。
硬件設(shè)計(jì)完成后,須裝配并調(diào)試各個(gè)模塊,保證各個(gè)部件之間連接和配合良好,功能正常運(yùn)行,裝配調(diào)試須檢查電路連接,保證攝像頭正確傳輸視頻數(shù)據(jù),舵機(jī)正確運(yùn)行,整體機(jī)構(gòu)穩(wěn)定運(yùn)行。
機(jī)器人組裝完成后,將進(jìn)行軟件設(shè)計(jì)方面的調(diào)試。其包括編寫運(yùn)動(dòng)控制與視覺識(shí)別程序,測(cè)試舵機(jī)以及攝像頭的功能,保證機(jī)器人能夠在預(yù)期環(huán)境中正常運(yùn)行。此時(shí)需要對(duì)軟件和硬件進(jìn)行聯(lián)調(diào),保證機(jī)器人能夠?qū)崿F(xiàn)設(shè)計(jì)的功能。
2 基于嵌入式Linux系統(tǒng)的搬運(yùn)機(jī)器人硬件設(shè)計(jì)
2.1 主控核心
本設(shè)計(jì)采用樹莓派4B作為主控板,樹莓派4B采用Broadcom BCM2711四核64位ARM處理器,主頻為1.5 GHz,配備雙SD卡片槽。此外,樹莓派4B還有2個(gè)USB 3.0接口、2個(gè)USB 2.0接口,并配備容量為32 GB的SD卡,使樹莓派更好地儲(chǔ)存系統(tǒng)數(shù)據(jù)[1]。
樹莓派4B還有40個(gè)通用輸入輸出(General-purpose input/output,GPIO)引腳,其作用是輸出驅(qū)動(dòng)信號(hào)給驅(qū)動(dòng)擴(kuò)展板來驅(qū)動(dòng)機(jī)器人全身的總線舵機(jī),主控板的作用是處理圖像信息,識(shí)別要搬運(yùn)的物品并運(yùn)行運(yùn)動(dòng)功能的代碼,使機(jī)器人能夠利用舵機(jī)來運(yùn)動(dòng),本文將利用其外設(shè)的USB接口與視覺模塊連接。
2.2 電源模塊
本文機(jī)器人的各個(gè)模塊需要供給不同的電源,分別為12 V舵機(jī)電源和電壓為5 V、電流為3 A的主控板電源、5 V攝像頭電源和3.3 V串行總線電路工作電源。
舵機(jī)電源使用12 V鋰電池直接供電,視覺系統(tǒng)使用樹莓派的USB 2.0接口直接供給5 V電源,樹莓派在接受電壓為5 V、電流為3 A的電源供電后,可使用引腳輸出穩(wěn)定的3.3 V電源,該電源可供給74HC126D芯片,保證串行總線電路穩(wěn)定工作。
如果主控板樹莓派正常工作,就需要采用穩(wěn)定電壓為5 V、電流量為3 A 的電源;如果電壓不穩(wěn)或不能滿足要求要求,就很容易出現(xiàn)系統(tǒng)無故關(guān)機(jī)、程序出錯(cuò)等問題,因此本文在擴(kuò)展板中搭建額外的電源電路,對(duì)鋰電池電流降壓穩(wěn)壓處理,得到穩(wěn)定電壓為5 V、電流為3 A的電源,保證樹莓派正常運(yùn)行。降壓穩(wěn)壓電路如圖1所示。
12 V電源電流通過P2輸入接口流入BL8033,經(jīng)過芯片整流后輸出穩(wěn)定電壓為5 V、電流量為3 A的電流,電路由SW1撥動(dòng)開關(guān)控制通斷,當(dāng)開關(guān)閉合時(shí),VBAT與輸入電源連接,將BL8033使能引腳電平拉高,VBAT經(jīng)過C1、C3濾波后進(jìn)入BL8033的電流輸入引腳,經(jīng)過芯片內(nèi)部整流穩(wěn)壓后輸出為穩(wěn)定電壓為5 V、
電流為3 A的電流,此時(shí)LED1燈亮起,表明電路正常工作。
2.3 驅(qū)動(dòng)模塊與舵機(jī)
舵機(jī)控制是機(jī)器人運(yùn)動(dòng)的重要環(huán)節(jié),可以采用數(shù)字舵機(jī)和串行舵機(jī)2種方案,由于數(shù)字舵機(jī)需要占用大量I/O口,串行總線舵機(jī)可使用1條總線操控多個(gè)舵機(jī),因此更加節(jié)省主控的硬件資源。串行舵機(jī)支持角度回讀和智能防堵,本文使用LX-224HV串行總線舵機(jī)作為機(jī)器人的控制舵機(jī),采用異步串行總線通信方式與舵機(jī)通信,UART異步通信接口輸出信號(hào)。
在樹莓派4B中有2個(gè)串口來進(jìn)行串口通信。1)硬件串口。具有單獨(dú)時(shí)鐘源,性能高。2)mini串口。由于mini串口時(shí)鐘源是由CPU內(nèi)核時(shí)鐘直接提供的,因此其波特率受到內(nèi)核時(shí)鐘的影響,并不可靠。本文選擇硬件串口對(duì)外通信,須恢復(fù)硬件串口對(duì)GPIO口的映射。
使用“sudo gedit /boot/config.txt”指令打開樹莓派的配置文件,在文件末尾添加“dtoverlay=miniuart-bt”以及“force_turbo=1”語(yǔ)句即可將主串口serial0指向硬件串口,此時(shí)TXD/RXD位于BOARD編碼的PIN8/10位置,將2個(gè)引腳使用拓展板與串行總線舵機(jī)相連,即可開始驅(qū)動(dòng)舵機(jī)。
使用串行總線電路將樹莓派輸出的UART信號(hào)轉(zhuǎn)換為舵機(jī)的驅(qū)動(dòng)信號(hào),使用74HC126D芯片完成這個(gè)過程,串行總線電路如圖2所示。
當(dāng)樹莓派向舵機(jī)控制器發(fā)送指令包時(shí),其使用TXD將并行數(shù)據(jù)串行輸出至74HC126D,此時(shí)如果控制引腳TX_CON電平被拉高,那么SERVO引腳電平將隨TXD引腳變化而變化,同時(shí)74HC126D 的另一個(gè)輸入引腳讀回SERVO電平 ,拉高第二個(gè)控制引腳RX_CON的電平,RXD引腳的輸出電平也將隨SERVO變化而變化。樹莓派使用RXD引腳讀回舵機(jī)狀態(tài),如果TX_CON與RX_CON這2個(gè)控制引腳都為低電平,那么SERVO信號(hào)線與RXD信號(hào)線的輸出狀態(tài)恒為高阻態(tài)。
機(jī)器人全身LX-224HV串行總線舵機(jī)信號(hào)線全部連接至SERVO總線,可以同時(shí)接收SERVO總線上的信號(hào)。當(dāng)舵機(jī)指令包由SERVO總線傳輸至全身舵機(jī),每個(gè)舵機(jī)初始化時(shí)都分配唯一的ID號(hào)作為從機(jī)地址,此時(shí)根據(jù)指令包中的舵機(jī)ID號(hào),對(duì)應(yīng)舵機(jī)即可進(jìn)行反應(yīng),例如舵機(jī)轉(zhuǎn)動(dòng)角度、速度和時(shí)間等。多個(gè)舵機(jī)運(yùn)動(dòng)配合關(guān)節(jié)零件連接,使機(jī)器人運(yùn)動(dòng)。
2.4 機(jī)械結(jié)構(gòu)設(shè)計(jì)
本文設(shè)計(jì)適應(yīng)非結(jié)構(gòu)化復(fù)雜地面環(huán)境,在足式機(jī)器人的基礎(chǔ)上仿照人類腿部結(jié)構(gòu)的正屈膝串聯(lián)構(gòu)型作為機(jī)器人足部結(jié)構(gòu),機(jī)器人仿照人體結(jié)構(gòu)設(shè)計(jì),有頭部、軀干和四肢,共19個(gè)自由度。
頸部采用1個(gè)舵機(jī)連接機(jī)器人的頭部與軀干,使機(jī)器人頭部能夠轉(zhuǎn)向;手部采用3個(gè)自由度,分別在肩關(guān)節(jié)、肘關(guān)節(jié)和腕關(guān)節(jié)處,其能夠幫助機(jī)器人完成手臂旋轉(zhuǎn)、彎曲和平伸等動(dòng)作;腿部采用6個(gè)自由度,分別為髖關(guān)節(jié)處的3個(gè)自由度、膝關(guān)節(jié)處的1個(gè)自由度和踝關(guān)節(jié)處的2個(gè)自由度,其能夠幫助機(jī)器人完成腿部基本的行走動(dòng)作[2]。
機(jī)器人的手爪結(jié)構(gòu)分為內(nèi)抓型和外抓型,腕部運(yùn)動(dòng)方式分為回轉(zhuǎn)型和平動(dòng)型,本文選擇內(nèi)抓型手爪結(jié)構(gòu)[3],使用舵機(jī)驅(qū)動(dòng)手部關(guān)節(jié),轉(zhuǎn)動(dòng)舵機(jī)使機(jī)器人手爪開合。
在實(shí)際使用過程中,須考慮機(jī)器人的材料。為保證強(qiáng)度,本文機(jī)器人的關(guān)節(jié)與抓手均采用鋼合金材料制作。在機(jī)器人行動(dòng)過程中,金屬腳面受到磕碰可能會(huì)劃傷瓷LX-224HV磚地面或出現(xiàn)在濕滑地面打滑的情況,因此為適應(yīng)室內(nèi)環(huán)境,機(jī)器人的腳面采用PLA絕緣材料,使用3D打印技術(shù)制造,其比金屬材質(zhì)更加柔軟,比橡膠等防滑材料強(qiáng)度更高,更不易磨損[4]。
2.5 視覺模塊
為增強(qiáng)機(jī)器人視覺模塊的可開發(fā)性,提高圖像分辨率,本文使用USB2.0的WebBL8033Camera嵌入式攝像頭,簡(jiǎn)稱WebCam。
WebCam是結(jié)合傳統(tǒng)攝像機(jī)與網(wǎng)絡(luò)技術(shù)的新一代攝像機(jī),本文利用標(biāo)準(zhǔn)的網(wǎng)絡(luò)瀏覽器監(jiān)視其影像,使用USB2.0接口將其與樹莓派連接。當(dāng)WebCam連接至樹莓派4B的USB端口時(shí),樹莓派4B可以使用USB通信協(xié)議與多個(gè)USB設(shè)備通信,此時(shí)樹莓派識(shí)別并配置設(shè)備,保證其正常工作;加載USB設(shè)備驅(qū)動(dòng)程序,設(shè)置設(shè)備參數(shù),與其進(jìn)行通信。
ZC301P攝像頭不僅具有圖像捕捉功能,還內(nèi)置了數(shù)字化壓縮控制器和基于Web的操作系統(tǒng)。視頻數(shù)據(jù)經(jīng)壓縮加密后,利用局域網(wǎng)、Internet或無線網(wǎng)絡(luò)送至終端用戶,在內(nèi)核為L(zhǎng)inux 4.14的系統(tǒng)中,ZC301P芯片已有默認(rèn)驅(qū)動(dòng)程序,可以直接使用。
在樹莓派系統(tǒng)中利用Python代碼即可調(diào)用攝像頭獲取外界圖像,在后續(xù)程序中,圖像會(huì)得到處理并用于機(jī)器人運(yùn)動(dòng)。
3 基于嵌入式Linux系統(tǒng)的搬運(yùn)機(jī)器人軟件設(shè)計(jì)
3.1 嵌入式Linux系統(tǒng)
機(jī)器人的程序存放在樹莓派內(nèi)部的嵌入式系統(tǒng)中,樹莓派官方提供了專門為樹莓派的開發(fā)準(zhǔn)備的系統(tǒng)樹莓派 os,樹莓派本身還可以燒錄其他嵌入式系統(tǒng),本文選擇以Linux系統(tǒng)為藍(lán)本開發(fā)的樹莓派 os,該系統(tǒng)包括UI,便于可視化開發(fā)。
為了將系統(tǒng)燒錄至樹莓派內(nèi),需要將插在樹莓派上的TF卡格式化,再使用官方提供的樹莓派鏡像燒錄器,選擇所需要的系統(tǒng)版本。設(shè)置主機(jī)名,勾選SSH服務(wù)與Wi-Fi設(shè)置,點(diǎn)擊燒錄,即可完成樹莓派系統(tǒng)的燒錄。打開樹莓派的電源,在上位機(jī)中尋找樹莓派的Wi-Fi并連接后,使用遠(yuǎn)程桌面連接即可對(duì)機(jī)器人的程序進(jìn)行調(diào)試。
3.2 OpenCV進(jìn)行物品識(shí)別以及尋跡
視覺識(shí)別的過程包括以下2個(gè)步驟。首先,對(duì)視覺模塊采集的圖像進(jìn)行一系列處理,其次,對(duì)處理后的圖片進(jìn)行尋線路徑的識(shí)別或物品形狀的匹配,巡線和物品識(shí)別的程序在主程序運(yùn)行的同時(shí),以雙線程的形式一起運(yùn)行,當(dāng)識(shí)別到待拾取物品時(shí),兩線程同時(shí)關(guān)閉并開始拾取物品的動(dòng)作,拾取動(dòng)作結(jié)束后,再次開啟巡線與物品識(shí)別雙線程。
當(dāng)巡線程序開始,程序會(huì)將獲取的圖像分為上、中和下3個(gè)部分進(jìn)行處理,減輕程序壓力。巡線識(shí)別線為黑線,環(huán)境地面顏色為白色。根據(jù)黑色塊的形狀判斷是否在起始位,起始位為黑色十字形狀。識(shí)別到起始線后,機(jī)器人開始向前行走,程序時(shí)刻根據(jù)黑線中心點(diǎn)在畫面中的位置判斷機(jī)器人所在位置。
使用OpenCV圖像處理得到黑色巡線中心點(diǎn)位置,利用黑色顏色閾值對(duì)圖像進(jìn)行二值化處理后,找到所有輪廓,再找到最大面積的輪廓,計(jì)算輪廓面積最大值。如果輪廓不為空,就尋找最小外接矩形的4個(gè)頂點(diǎn),獲取矩形的對(duì)角點(diǎn)后,計(jì)算得到矩形的中心點(diǎn)坐標(biāo),當(dāng)中心點(diǎn)在圖像偏左,說明機(jī)器人行走偏右,做小幅左移、左轉(zhuǎn)動(dòng)作,反之右移、右轉(zhuǎn),機(jī)器人可以動(dòng)態(tài)保持正面直行,不會(huì)偏離巡線。尋跡程序流程如圖3所示。
啟動(dòng)識(shí)別程序,樹莓派將得到攝像頭獲得的外界圖片,利用OpenCV庫(kù)提供的函數(shù)對(duì)圖片進(jìn)行灰度化,得到原圖像的灰度圖后,使用函數(shù)對(duì)灰度圖進(jìn)行二值化,二值化的過程是讓圖像中的每個(gè)像素點(diǎn)與設(shè)定閾值進(jìn)行逐一比較,高于閾值的設(shè)置為白色,低于閾值的設(shè)置為黑色,二值化閾值選擇決定邊界是否準(zhǔn)確,程序在運(yùn)行的過程中利用大津法自動(dòng)計(jì)算最佳閾值。
使用findContours函數(shù)在完成二值化的圖像中尋找尋跡線或物品圖像邊界,這個(gè)步驟須檢測(cè)所有輪廓,但是不建立繼承關(guān)系,尋找結(jié)束后儲(chǔ)存輪廓中所有的點(diǎn)。計(jì)算輪廓面積,篩選掉非目標(biāo)的小輪廓,當(dāng)輪廓面積大于設(shè)定的面積閾值時(shí),利用MatchShapes算子與事先準(zhǔn)備好的模板進(jìn)行形狀匹配,形狀越相似,匹配分值越小。將匹配分值與設(shè)定匹配閾值進(jìn)行比較,如果匹配分值小于閾值,那么認(rèn)為識(shí)別指定物品,設(shè)置物品識(shí)別成功的標(biāo)志位,進(jìn)行抓取。
3.3 機(jī)器人運(yùn)動(dòng)程序
機(jī)器人的運(yùn)動(dòng)即舵機(jī)的運(yùn)動(dòng),進(jìn)行串口舵機(jī)運(yùn)動(dòng),使用上位機(jī)PC向下位機(jī)樹莓派4B發(fā)送指令包,控制樹莓派的引腳輸出信號(hào),指令包以16進(jìn)制數(shù)組形式發(fā)出。當(dāng)初始化時(shí),每個(gè)舵機(jī)利用信號(hào)總線相連作為從機(jī),程序賦予其1個(gè)唯一的ID號(hào)作為從機(jī)地址,總線根據(jù)指令包內(nèi)的地址拉起對(duì)應(yīng)位置的舵機(jī),對(duì)應(yīng)的舵機(jī)給出反應(yīng)。
每個(gè)指令包包括以下5個(gè)部分。1) 幀頭。固定設(shè)置為2個(gè)0x55的16進(jìn)制數(shù),幀頭到達(dá)表示有數(shù)據(jù)包等待接收。2)ID。當(dāng)初始化時(shí),每個(gè)舵機(jī)都會(huì)被賦予1個(gè)唯一的ID號(hào),在上位機(jī)操控機(jī)器人進(jìn)行動(dòng)作的過程中,對(duì)應(yīng)關(guān)節(jié)處舵機(jī)的ID號(hào)范圍為0x00~0xFD,ID號(hào)0xFE為廣播ID,所有舵機(jī)均接收指令,但是為了防止總線沖突,所有舵機(jī)均不回應(yīng)。3)數(shù)據(jù)長(zhǎng)度。即待發(fā)送的數(shù)據(jù)長(zhǎng)度。4)指令。其作用是控制舵機(jī)的各種指令,例如舵機(jī)運(yùn)動(dòng)速度等。5)參數(shù)。 除指令外需要補(bǔ)充的控制信息。6)校驗(yàn)和。在指令包利用串口傳遞至總線舵機(jī)后,對(duì)應(yīng)舵機(jī)以對(duì)應(yīng)速度轉(zhuǎn)動(dòng)指定角度,并在下一個(gè)指令前保持該速度,多個(gè)指令包組合成為1個(gè)動(dòng)作,多個(gè)動(dòng)作組合成為1個(gè)動(dòng)作組,將調(diào)試好的動(dòng)作組封裝為1個(gè)文件,當(dāng)主程序需要使用時(shí)調(diào)用,機(jī)器人可以在對(duì)應(yīng)時(shí)間做出對(duì)應(yīng)動(dòng)作,例如抓取、行走等。
4 結(jié)語(yǔ)
本文研究基于嵌入式Linux系統(tǒng)的人形搬運(yùn)機(jī)器人,經(jīng)測(cè)試發(fā)現(xiàn)機(jī)器人可以完成巡線、行走和轉(zhuǎn)彎等運(yùn)動(dòng)動(dòng)作,當(dāng)識(shí)別到指定物塊時(shí)可以做出對(duì)應(yīng)的拾取動(dòng)作。在測(cè)試過程中也發(fā)現(xiàn)了許多問題,例如當(dāng)巡線識(shí)別時(shí)機(jī)器人會(huì)被周圍物品顏色影響、有時(shí)無法成功拾取物塊以及電池續(xù)航不足等,因此,該機(jī)器人在視覺識(shí)別程序、拾取動(dòng)作調(diào)試以及電源系統(tǒng)設(shè)計(jì)等方面還有待優(yōu)化。
參考文獻(xiàn)
[1]王澤龍. 基于ROS的搬運(yùn)機(jī)器人控制系統(tǒng)設(shè)計(jì)[D].青島:青島科技大學(xué),2021.
[2]付裕.基于單片機(jī)STM32的搬運(yùn)機(jī)器人控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].無線互聯(lián)科技,2023,20(5):39-42.
[3]盧鑫,郭婷,譚越洋.搬運(yùn)機(jī)器人控制系統(tǒng)的設(shè)計(jì)[J].科技與創(chuàng)新,2022(16):103-105,109.
[4]羅慶生,陳胤霏,劉星棟,等.仿人機(jī)器人的機(jī)械結(jié)構(gòu)設(shè)計(jì)與控制系統(tǒng)構(gòu)建[J].計(jì)算機(jī)測(cè)量與控制,2019,27(8):89-93.