朱偉枝,楊亞萍,陳 智
(廣東理工學院,廣東肇慶 526100)
智能搬運小車是一種無需人操作的搬運設備,是智慧工廠和快遞行業重要的設備之一。隨著經濟的快速發展,傳統的生產方式已經無法滿足企業的需求,企業越來越重視現代化生產觀念,因此智能搬運小車也隨之飛快發展[1]。智能小車在倉庫、碼頭、快遞等多種行業起著關鍵作用,可以用于人類不宜或者無法勞動的工作環境中。運用智能小車的運送,不僅提高了運輸效率,減少搬運行業的成本,而且還可以使工人免受傷害,因此對智能小車研究顯得十分重要[2-3]。
本文提供了一種基于OpenMV[4]的智能小車路徑規劃及定點擺放棋子的可實踐的合理化設計方案,通過OpenMV 視覺系統模塊作為圖像處理工具,以Arduino[5]控制智能小車實現循跡行駛,協同完成路徑規劃[6]及定點擺放棋子功能,滿足卸載的搬運任務的要求。
本文設計的智能小車總體結構主要分為3 個部分:傳感器、控制中心和執行機構。傳感器讀取外界的信號,將周圍環境的信息以數據的方式反饋給控制中心;控制中心通過處理相應的信息給執行機構發送執行的命令。其總體布置如圖1所示。整個車體由底盤、主控制板、轉向舵機、電動機、車輪等所組成,主控制板上安置機械臂、主控器、傳感器、攝像頭等來實現小車的功能[7]。
Arduino Uno R3是一款使用AT mega328P進行研發的單片機。一邊有14個數字輸入/輸出引腳,其中6個數字口可用作PWM 輸出使用,另外還有2 路是串口鏈接端口;而在另一邊有6 路模擬輸出串口。ARDUINO UNO R3 自帶電源芯片,可以直接給ARHDUINO板供電。
圖1 總體布置
OpenMV 攝像頭是一款體積小,功耗低,成本低的電路板,適用于智能小車的視覺系統,使用高級Python 語言進行開發。OpenMV的主要工作是讀取周圍環境的信息,并將信息傳輸給控制中心進行處理,相當于人的眼睛。OpenMV讀取信息主要是按照以下方式進行。
(1)接通電源后,OpenMV初始化,設定目標。
(2)OpenMV開始拍攝照片,將拍攝完的照片以元組的方式把相關的參數返回給OpenMV處理器上。
(3)OpenMV處理器判斷是否檢測到目標,如果沒有檢測到目標,就發送一對數值相等、符號相反的參數到控制中心;如果檢測到目標,就通過PID 算法[8]計算出小車的速度,并將速度值發送到控制中心。
主控制板上安裝的機械臂的設計要滿足以下要求。
(1)機械臂要有適合的自由度,能靈活夾起物體。
(2)機械臂要有一定的預緊力,能在斷電的時候保持把棋子夾緊,防止棋子掉落。
(3)要確定視覺系統的安裝位置。安裝的位置需要滿足: 1 保證視覺系統要能監測到前面的路況,給控制系統反饋智能小車行駛的路況; 2 要有足夠的高度,能檢測到目標; 3 能夠跟隨機械臂的運動而運動,否則無法完成對物體的夾取。本文把視覺系統的安裝位置確定在機械主臂上。
智能小車通電后首先運行超聲波模塊,判斷智能小車前面是否有障礙物,如果檢測到有障礙物,則通過視覺系統判斷是否已經檢測到目的地,本文使用矩形的綠色本子作為目的地的標記,如果檢測到目的地,那么智能小車就運行避障程序避開前面的障礙物,當智能小車行駛到距離目的地在指定閾值范圍內的時候,智能小車就運行通過機械臂放置棋子的程序,完成定點擺放棋子的任務;如果超聲波沒有檢測到障礙物,則通過視覺系統判斷是否已經檢測到目的地,如果檢測到達目的地,智能小車就直接運行規劃路徑的程序,如果沒有檢測到目的地,智能小車就繼續運行檢測目的地的程序。
如圖2 所示,當接收到檢測目的地的信號時,系統首先判斷機械臂底座舵機轉動周期信號是否為1,本文定義的機械臂底座舵機轉動周期是指機械臂底座舵機向左向右各轉動45°,信號為1 時表示已經完成轉動,信號為0 時則表示未完成轉動。如果判斷出機械臂底座舵機周期信號為1時,則意味著智能小車在當前區域未能檢測到目的地,智能小車就會移動到其他位置繼續檢測,機械臂底座舵機轉動周期信號重新置0。如果判斷出機械臂底座舵機周期信號是為0時,機械臂底座舵機就會向左向右各轉動45°進行檢測,期間如果檢測到目的地就會停止轉動,接著運行追蹤目的地的程序;如果完成向左向右各轉動45°后仍未檢測到目的地,機械臂底座舵機則停止轉動,機械臂底座舵機轉動周期信號置1,系統重新開始判斷機械臂底座舵機的轉動周期信號。
圖2 目的地檢測
智能小車根據視覺系統反饋回來的信息判斷是否有檢測到目的地,如果檢測到目的地,智能小車就對目的地直線的距離進行計算,計算出距離后,讀取當前機械臂底座舵機的轉動參數,并輸出給轉向舵機,從而控制轉向舵機進行轉向。智能小車往目的地方向移動并保持目的地一直處于視覺中心的位置,途中運用超聲波模塊進行避障。智能小車到達目的地后停止運行,并通過控制機械臂將棋子放下。
智能小車執行擺放棋子動作之前,首先確認定點位置的顏色和形狀,本文設置的定點為綠色的矩形。首先通過Open-MV 的形狀識別功能采用四元檢測算法進行矩形識別,運用ImageReader 類的 image.find_rects() 函數,設置好threshold,然后通過OpenMV 的顏色識別功能設定 LAB 值為(28,57,-55,-6,-5,39)。
設定好 LAB 值和 mage.find_rects()函數后,OpenMV 只會識別綠色矩形的定點,當OpenMV 追蹤不到定點區域時,OpenMV 便會發信號給主控模塊,主控模塊就會發出相應的指令讓小車調整位置直到追蹤到綠色的區域為止;當 OpenMV 追蹤到定點區域就會發信號給主控模塊,主控模塊就會發出相應指令控制智能小車靠近定點區域,如圖3所示。
圖3 智能小車靠近定點區域
在小車左前方放置一個障礙物,智能小車通過OpenMV視覺系統檢測正前方是否有定點目標,如果檢測到定點目標,智能小車就運行程序直接追蹤目標;如果沒有檢測到定點目標,智能小車就通過移動位置以及控制機械臂底座舵機轉動直到檢測到定點目標為止。
如圖4 所示,由于在智能小車左前方放置了障礙物,小車首先檢測到離起始點位置距離較近的目標1,但是當靠近目標1時,識別到目標1并不是目的地,智能小車就通過運行避障程序避開障礙物,繼續檢測其他目標;當檢測到目標2 并靠近時,識別到目標2是目的地,智能小車就通過控制機械臂將棋子放下,完成定點擺放功能。
圖4 路徑測試
本文設計的智能搬運小車,通過OpenMV 的識別與控制、Arduino的驅動控制,提供了一種可拓展可實踐的結構設計方案,能夠完成路徑規劃及定點擺放棋子的任務。小車在完成任務的前提下仍有很多的設計與拓展的空間,如車身的材料、機械臂的靈活度、小車的運動速度以及成本方面等仍有待改進。通過對智能小車的研究和實踐,可以初步構建智能汽車的模型,為智慧工廠和無人駕駛技術提供更多的可能。