朱偉枝 楊亞萍 梁華成



摘要:以智能小車為載體、機械手為抓取機構,采用Arduino為核心控制器,利用OpenMV的形狀和顏色識別功能檢測棋子位置,提供了一種能夠完成識別和夾取棋子的任務的可實踐的合理化設計方案,結構穩定,程序設計簡單。
關鍵詞:智能小車;Arduino;OpenMV;機械手;識別
中圖分類號:TP242 文獻標識碼:A 文章編號:1007-9416(2020)08-0132-03
0 引言
嵌入式系統與微處理器近年來的發展突飛猛進,由此我們的日常生活中逐漸開始大量應用無線傳輸技術與圖像處理技術[1]。智能搬運小車的功能核心是代替人來運輸貨物,實現智能搬運涉及到了兩個核心功能,一是識別,二是夾取。本文的主要設計思路是采用Arduino[2]作為智能小車的核心控制器,利用OpenMV[3]攝像頭模塊來實現圖像信息采集工作,并將收集到的圖像信息輸送到控制器上,控制器根據收到的信息做出相應的指令動作控制智能小車和機械手,從而實現智能小車自動識別物體并將其夾起的功能。
1 系統總體設計
本文采用綠色的矩形棋子來模擬貨物,綠色和矩形是作為OpenMV的顏色和形狀識別特征,棋子是作為實物來測試機械手的工作。本文設計的自動搬運系統主要由傳感器、控制器、執行器等組成,如圖1所示。
控制器Arduino單片機作為整個系統的控制核心,負責收集各個I/O口輸入的信息并進行處理,實現各個模塊統一協調工作。傳感器部分包括OpenMV和超聲波測距模塊。OpenMV是一個功能強大的機器視覺模塊,利用廣角鏡頭使得識別范圍更加廣,采用具有識別顏色和形狀特征的組合算法,將收集到的信息實時通過串口上傳至Arduino控制器上,Arduino就會根據OpenMV上傳的數據作出判斷,從而控制智能小車和機械手的運作。超聲波測距模塊主要負責確保車頭與棋子的距離,將收集到的數據經處理后,通過串口將處理好的數據發送至Arduino上,保證機械手能準確無誤夾取棋子。執行器部分為機械手和電機。機械手由兩個舵機組成,一個舵機負責機械手臂的上下運動,另一個則負責機械手的展開和閉合,控制兩個舵機的工作就能控制整個機械手的工作;Arduino采用PID控制算法[4],控制電機轉動方向和速度,可以使電機產生正轉、反轉,從而根據兩輪差速原理使小車實現前進、后退及轉彎等動作。
2 系統軟件設計
2.1 總體控制流程
如圖2所示,智能小車通電后,所有硬件都進行初始化,識別模塊開始采集照片,需要準確識別到目標棋子的所在位置,并將處理好的目標棋子的信息傳送給Arduino控制器,Arduino控制器接收到信號后發出指令控制智能小車的電機模塊開始工作,并向棋子的位置靠近。為了保證機械手能準確地夾起棋子,就需要控制好智能小車與棋子之間的距離,當智能小車與棋子之間的距離在設定的閾值范圍之內時,電機模塊停止工作,Arduino控制器控制夾取模塊開始工作,通過機械手把棋子夾起來。
2.2 行駛模塊程序設計
小車的行駛模塊包含幾個子函數模塊:前進模塊run()函數、停止模塊stop()函數、轉彎模塊turn()函數和識別模塊search()函數。當棋子在OpenMV識別區域中心時,控制器就執行前進run()函數控制智能小車前往棋子所在位置;當智能小車與棋子之間的距離在設定閾值范圍時,控制器就執行停止stop()函數;當棋子在OpenMV識別區域中心兩邊時,控制器就執行轉彎turn()函數控制智能小車前往棋子所在位置;當OpenMV識別不到目標棋子時,控制器就執行search()函數,控制智能小車移動到其他位置直到識別到棋子為止。控制電機轉動方向和速度采用PID算法運行,設定智能小車正常直線運動時的PWM閾值,當智能小車轉彎時,分別對智能小車左右兩輪電機的參數進行PID運算,保證左右車輪實現差速轉彎。
2.3 識別模塊程序設計
如圖3所示,識別模塊采用具有識別顏色和形狀特征的組合算法,首先調用find_rects()函數對拍攝到的物體進行形狀識別,若識別到的物體是矩形,再調用rect.corners()函數,返回一個由矩形對象的四個角組成的四個元組的列表,使OpenMV只在這個區域內進行像素統計,最后調用 get_statistics()函數進行像素統計,若LAB的三個通道的眾數分別在綠色的閾值范圍內,OpenMV就判定識別到了綠色的棋子。
2.4 機械手模塊程序設計
機械手模塊的動作由兩個舵機來完成,分別命名為s1和s2,s1為機械臂的舵機,s2為機械手的舵機。機械手模塊的程序設計包含putup()函數、putdown()函數、open()函數和close()函數。putup()函數和putdown()函數負責機械臂的抬起和放下,open()函數和close()函數負責機械手的展開和閉合。
3 功能測試
本文設計測試主要用到Arduino IDE、OpenMV IDE進行程序編寫,主要測試智能小車的功能包括識別功能、機械手夾取功能。
3.1 識別功能
為了對智能小車進行識別功能測試,在測試區擺放了各種形狀各種顏色的物體。OpenMV通過廣角鏡頭對周圍環境進行掃描,對采集到的圖像中的物體進行顏色和形狀識別,首先對物體進行形狀識別,然后在識別到的棋子形狀區域內通過像素統計進行顏色識別。經多次試驗表明,智能小車能成功識別到綠色棋子,設計能滿足要求。
3.2 夾取功能
當智能小車與棋子的距離在設定的閾值范圍時,智能小車會停止運動,機械手開始執行工作。首先是s1舵機開始工作,順時針向下旋轉,然后s2舵機逆時針旋轉,機械手夾爪接著張開,延時后再順時針旋轉夾住棋子。經多次隨機測試,機械手的運作也符合了設計要求。
4 結語
本文設計的智能搬運小車,由Arduino與OpenMV組成,能夠完成目標棋子的識別與夾取。智能搬運小車根據實際生產需求,設計帶萬向輪底盤與由機械臂及夾爪組成的機械手,可以科學規劃目標物體的搬運計劃,精確地實現小車在工廠的位置控制,按照設定的程序,能夠準確識別物體和全自動搬運。其應用可以大大減輕工人勞動強度,提高生產效率,降低生產成本,縮短生產周期。
參考文獻
[1] 張錚.基于圖像處理的智能小車無線遠程滅火[J].實驗室研究與探索,2018(1):43-57.
[2] 趙勇.基于Arduino 和Android平臺的智能小車避障系統設計研究[D].西安:長安大學,2014.
[3] 鄒浩,郭雨婷,李佳盈,等.基于OPENMV的色彩引導機器人系統研究[J].科技資訊,2018(25):65-76.
[4] 趙永永.基于PID智能控制算法的智能車車速控制研究[J].軟件,2019(1):195-198.