楊廣峰
我們在2022年第50期《用樹莓派六足機器人實現(xiàn)垃圾分類搬運》中已經(jīng)實現(xiàn)了基于樹莓派的智能垃圾識別搬運機器人,能夠智能識別垃圾筒,自動計算機器人與垃圾筒的距離,從而實現(xiàn)智能搬運的功能。但是這個實例中機器人的初始位置必須在目標物體正前方,如果把機器人放在任意位置,機器人簡單的直線前進就不能達到合適的夾取位置,實用場景非常有限。
本文將給原來的程序增加智能識別任意位置垃圾桶的功能,增加動態(tài)自動糾偏功能,打造出一個任意場景下的智能垃圾識別搬運機器人,能自動調(diào)整機器人的運行方向、前進和夾取,從而實現(xiàn)任意場景下的智能搬運功能。
實驗器材:樹莓派六足機器人一套(六足機器人一個,樹莓派4B一塊,古德微擴展板一塊,電機驅動板一個,USB攝像頭一個),目標物體兩個(紅色、藍色海綿正方體各一個,邊長為10厘米)(圖1)。
創(chuàng)建物體檢測模型的步驟與前例相同。
1.登錄網(wǎng)站,開始“物體檢測”
首先,登錄古德微機器人網(wǎng)站(http://www.gdwrobot.cn),選擇“物體分類”進入“遠程使用樹莓派攝像頭進行物體分類”頁面。
2.采集并標注,訓練與驗證
使用拍照功能,不斷變換機器人的位置與角度,進行目標圖片添加,完成目標圖片的采集工作。這個訓練過程中目標圖片采集得越全面,后期識別的效率和準確度就會越高。然后,手工完成對采樣的目標圖片的物體的標注工作(圖2)。
接下來,使用“開始訓練”按鈕對采集的圖片進行訓練。最后對預覽圖片中的物體進行分類驗證,目標物體的分類識別置信度在80%以上,即說明訓練模型具有較高的應用價值。
3.下載訓練模型文件,保存至樹莓派中
拍照采集與訓練驗證均完成之后,點擊右下角的“下載樹莓派上使用的模型”按鈕,很快就會有“模型轉換下載完成”的提示,這時,相關文件已被下載到樹莓派的/home/pi/model/object_detection目錄下,模型文件為model.tflite,對應標簽文件為labels.txt。通過Windows的遠程桌面連接進入樹莓派進行查看,labels.txt的文件包含兩行內(nèi)容,依次對應訓練模型的分類名稱:“紅色、藍色”。
本例中,機器人面向前方進行拍照,自動尋找并識別目標物體,讀取物體的位置數(shù)據(jù),計算物體的位置偏差,根據(jù)情況進行相應的偏差處理,機器人自動轉向,按照步數(shù)前進至物體前方,并實施搬運。
1.拍照與檢測函數(shù)
使用機器人攝像頭對前方拍照,調(diào)用物體檢測模型對照片進行檢測,返回檢測結果列表(圖3)。
2.讀取檢測結果函數(shù)
這個函數(shù)是從檢測結果列表中找到我們的
目標(紅色物體)的名稱和置信度。
通過判斷檢測結果列表的長度是否大于0來區(qū)分有沒有檢測結果,沒有檢測結果則需要跳出判斷重新檢測;如果有檢測結果,則對檢測結果進行下一步的處理。首先,循環(huán)讀取檢測結果列表中的每一個檢測結果字典,分別讀出這個檢測結果字典中的置信度和物體名稱。然后判斷物體名稱是否紅色物體,如果符合條件,則找到了我們的目標名稱和置信度,中斷循環(huán),準備下一個環(huán)節(jié)(圖4)。
3.計算位置偏差函數(shù)
首先,從檢測結果字典中獲取檢測框的位置列表,分別獲取檢測框的左上和右下兩個點的橫、縱坐標值。計算出檢測框的物體橫向像素位置(橫向中心),與圖片中心位置相比較獲取物體的位置偏差。這里使用的公式為:位置偏差=320-物體橫向位置。因為攝像頭拍出的照片是640×480,所以照片的橫向總寬度是640,照片的中心位置是320(圖5)。
4.位置偏差處理函數(shù)
獲取了物體的位置偏差,接下來就需要控制機器人進行相應的旋轉,以實現(xiàn)機器人能夠鎖定目標物體進行前進。考慮到偏差較大的情況,我們還需要對位置偏差做偏差除以8的縮放,并且對偏差值進行了一定范圍(從負10到正10)的限制。偏差處理結束后,機器人按照位置偏差的角度進行相應的旋轉,最后將置信度設為0,完成本次拍照的識別糾正工作(圖6)。
5.計算距離與步數(shù)函數(shù)
首先,計算出檢測框的物體橫向像素大?。M向長度),根據(jù)計算公式得到機器人與目標物體之間的當前距離。然后,計算出機器人到達物體所需要的前進步數(shù)。最后,控制機器按照步數(shù)前進(圖7)。
6.智能搬運物體
首先,判斷機器人是否到達最佳夾取位置,如果條件滿足,開始夾取物體。然后,控制機器人先向后移動,再左轉90度,再向前,到達指定的投放位置。接著,控制機器人放下物體完成垃圾的智能搬運工作,最后將變量步驟設為0,標志著整個搬運工作全部結束(圖8)。
7.主程序
首先,控制攝像頭兩個舵機,調(diào)整其最佳拍攝角度,設置機器人的最初姿態(tài),將機器人任務的開關變量“步驟”設為1,完成對機器人的初始化。然后,建立一個重復當真的循環(huán),實現(xiàn)根據(jù)任務反復拍照、識別、糾偏、前進,直至到達最佳夾取位置,實現(xiàn)夾取任務。目標物體有效識別后,如果偏差較大,進行合適的偏差縮小,機器人自動旋轉至目標物體的正前方,根據(jù)距離計算出步數(shù),并進行有限步數(shù)(1-10步)的前進,如果達到了最佳夾取距離,機器人完成夾取任務。最后,為了解決因為目標物體不在機器的前方的原因造成的識別為空的情況,我們給機器人設置了一個識別不成功時,原地自行旋轉30度的操作,自動尋找識別(圖9)。
經(jīng)過多次測試,機器人在任意角度、任意位置時均能成功夾取目標物體,實現(xiàn)了垃圾的智能搬運的成功升級。
本次我們通過位置偏差的計算和處理,配合有限步數(shù)的前進實現(xiàn)了機器人位置的動態(tài)調(diào)整,通過重復循環(huán)實現(xiàn)了機器人多次前進與調(diào)整,使得機器人在反復拍照識別后逼近目標物體正前方,再現(xiàn)了機器人處于目標物體正前方的應用場景,實現(xiàn)了復雜情況下的機器人的智能搬運。
大家可以在這個例子的基礎上進一步思考多個搬運任務的編程實現(xiàn),也可以結合其他場景,給物體動態(tài)調(diào)整賦予更多的實際意義。