王焱清,湯旸,楊光友
(1. 湖北工業大學農機工程研究設計院,武漢市,430068; 2. 湖北省農機裝備智能化工程技術研究中心,武漢市,430068)
現階段我國的柑橘采摘主要還是依靠人工,人工采摘耗時耗力、效率低。機器人代替人工采摘是未來柑橘采摘的發展方向,是促進采摘作業機械化、自動化和智能化水平的必由之路。在采摘機器人硬件平臺的基礎上,結合控制系統實現各類果蔬采摘作業。采摘機器人控制系統包括視覺模塊、機械臂控制模塊、末端執行器控制模塊等,因此設計穩定、高效的控制系統是關鍵環節[1-16],如熊俊濤等[17]以多類型采摘機器人平臺為基礎,在Window XP開發環境下,采用Matlab等編程工具,通過對RSR232通信總線、運動控制板以及位控板等進行開發,設計了機器人控制系統,包括水果圖像信息采集系統、主控制器、運動控制系統;劉靜等[18]基于柑橘類水果采摘機器人平臺,采用Micopython、keil5編程軟件,Python、C編程語言,通過對OpenMV機器視覺模塊進行二次開發,同時編寫單片機控制程序,設計了包括視覺識別系統、末端執行器控制、機械臂控制、移動平臺控制和升降裝置控制等在內的采摘機器人控制系統。本文面向機器人柑橘采摘,基于由上位機、深度相機、機械臂和柔性手爪等硬件設備組成的采摘機器人平臺,研究了該平臺控制系統的設計,包括視覺識別定位程序模塊、柔性手爪動作控制程序模塊、機械臂運動控制程序模塊以及采摘控制程序模塊的程序設計。
采摘機器人硬件平臺如圖1所示。

圖1 采摘機器人硬件平臺Fig. 1 Picking robot hardware platform
上位機為搭載Windows10操作系統的筆記本電腦,主要負責運行控制系統主體程序,包括獲取、處理平臺數據和控制平臺設備。深度相機為RealSense Camera系列的R200型號深度相機,主要負責提供場景物體實時的圖像數據和包含在深度圖像數據中的距離信息。由于相機的最小深度測量距離為0.5 m,因此采用“眼在手外”的方式,利用支架將相機固定在機械臂旁,同時面向正前方。機械臂為VS-6556型號的垂直多關節工業用機械臂,主要負責帶動柔性手爪到達指定位置并配合其完成相應動作,其配備有RC7M型控制器。三指柔性手爪主要負責抓取,其具有能夠彈性形變、表面粗糙、手指間距可調等特性,能夠有效降低抓取柑橘造成的損傷,使抓取更加牢固,提高手爪的定位容錯能力,其配備的控制器以Arduino UNO為控制核心,采用氣壓驅動方式控制手爪的抓取動作。
采摘控制系統的程序框架如圖2所示。

圖2 采摘控制系統程序框架Fig. 2 Picking control system program framework
工作流程如圖3所示。

圖3 采摘控制系統程序工作流程圖Fig. 3 Workflow chart of picking control system program
工作原理是通過視覺識別定位模塊控制深度相機采集柑橘圖像數據,并結合算法對柑橘進行識別和定位,獲取柑橘的空間位置信息,再通過機械臂運動控制模塊、柔性手爪動作控制模塊以及采摘控制模塊,確定柑橘采摘點的位置信息,確定由機械臂和柔性手爪組成的機械手的采摘姿態,規劃采摘路徑,并控制機械手沿著指定軌跡運動,執行柑橘抓取和果梗分離動作,最終將柑橘放置到收集點。
在Windows10開發環境下,采用Visual Studio 2015、PyCharm和Arduino IDE編程工具,C++和Python編程語言,借助相應的軟件開發工具包、函數庫,設計控制系統程序。根據其工作原理、流程的需要,為控制系統設計了視覺識別定位模塊、機械臂運動控制模塊、柔性手爪動作控制模塊,用于控制深度相機、機械臂、柔性手爪等硬件設備。同時設計了采摘控制模塊,用于實現需要視覺、機械臂與柔性手爪之間相互配合的機器人自主采摘功能和一些特定的采摘輔助功能,使采摘機器人能夠更好地完成柑橘采摘作業。
視覺識別定位模塊的具體工作流程如圖4所示。

圖4 視覺識別定位模塊的工作流程圖Fig. 4 Workflow chart of visual identification and positioning module
根據工作流程的需要,在視覺識別定位模塊中設計了圖像數據采集、視覺識別、視覺定位功能模塊,用于柑橘的識別定位,獲取柑橘的位置信息。程序設計采用Intel librealsense軟件開發工具包提供的編程接口rs命名空間中的類函數和OpenCV計算機視覺庫的圖像處理函數,對R200相機進行二次開發,同時采用Python中TensorFlow-GPU、Keras深度學習框架的函數庫。
2.1.1 圖像采集功能
上位機通過圖像采集功能函數CamPicData()啟動相機,獲取實時的彩色RGB圖像和深度圖像數據,便于后續圖像識別和定位。
其中CamPicData()會調用rs的類函數和OpenCV的圖像處理函數,分別用于功能實現過程中的相機操作和圖像處理。
2.1.2 視覺識別功能
上位機通過視覺識別功能函數PicDetect()對采集到的彩色圖像進行柑橘識別,用于后續的柑橘定位。
其中柑橘識別所采用的是基于改進YOLOv3-tiny[19]輕量化深度卷積網絡模型的識別方法,該模型在YOLOv3-tiny深度卷積網絡模型的基礎上,采用MobileNetv3-Small[20]網絡替換主干特征提取網絡,使模型更加輕量化,提高識別速度。
在MobileNetv3-Small中加入新的殘差結構,使主干網絡能夠更好地保留之前提取出的特征信息,減少特征信息的損失,提升模型對特征的學習能力,提高模型的識別精度。
在加強特征提取網絡中加入簡化的空間金字塔池化SPP(Spatial Pyramid Pooling)[21]網絡、深度可分離卷積層集、兩個尺度層之間的下采樣層以及替換hard-Swish激活函數,提升模型提取特征信息的能力,減少特征信息的損失,使模型能夠充分學習特征信息,進一步提高模型的識別精度。
采用DIOU(Distance Intersection over Union)[22]損失函數改進損失函數,進一步提高模型的識別定位精度。
通過1 144張柑橘圖像數據集的訓練、測試,改進的YOLOv3-tiny網絡模型平均識別精度mAP、F1值分別達到了96.52%、0.92,平均識別單幅圖像所耗時間、模型權重大小僅為47 ms、16.9 MB。
由于功能實現過程中YOLOv3-tiny網絡模型的搭建和運行需要借助Python中TensorFlow-GPU、Keras深度學習框架的函數,因此PicDetect()會調用Python設計編寫的Detect()識別程序。
2.1.3 視覺定位功能
上位機通過視覺定位功能函數Positioning()對圖像中識別到的柑橘進行定位,獲取其相機坐標系下的空間位置坐標。
圖像采集、視覺識別、視覺定位功能模塊的實現過程如圖5所示。

(a) 圖像采集功能

(b) 視覺識別功能

(c) 視覺定位功能圖5 視覺功能模塊的實現過程Fig. 5 Implementation of visual function module
機械手控制模塊的具體工作流程如圖6所示。

(a) 機械臂控制模塊

(b) 手爪控制模塊圖6 機械手控制模塊的工作流程圖Fig. 6 Workflow chart of robot arm control module
2.2.1 柔性手爪動作控制模塊程序設計
根據工作流程的需要,在柔性手爪動作控制模塊中設計了數據通信、動作控制功能模塊,用于上位機與手爪控制器之間的數據通信,包括數據傳遞、接收控制指令等,以及控制手爪動作,而由于控制器采用Arduino UNO,因此需要分別設計功能模塊的上位機程序部分和Arduino程序部分。程序設計采用SerialPort串口通信軟件開發工具包提供的SerialPort類函數和Arduino IDE函數庫的串口通信Serial類函數等。
1) 數據通信功能。上位機和Arduino通過設計的通信連接功能函數RobotGripConn()和Setup()、數據傳遞功能函數RobotGripSendData()和RobotGripReceiveData()建立USB串口通信連接,實現數據通信,為后續的手爪動作控制傳遞控制指令等。
其中上位機程序RobotGripConn()和Arduino程序Setup()分別借助SerialPort類函數和Serial類函數,調用InitPort()、StartMonitoring()和Serial.begin()指定串口參數,包括串口號、波特率、檢驗位、數據位、停止位,建立上位機與控制器之間的連接。
2) 動作控制功能。上位機和Arduino通過設計的釋放動作功能函數RobotGripRelease()、抓取動作功能函數RobotGripGrab()以及動作執行功能函數RobotGripAction()控制手爪執行各類動作。
2.2.2 機械臂運動控制模塊程序設計
根據工作流程的需要,在機械臂運動控制模塊中設計了數據通信、運動控制功能模塊,用于上位機與機械臂控制器之間的數據通信,包括接收柑橘的位置信息、接收控制指令、傳遞位姿信息等,以及控制機械臂運動。程序設計采用ORIN2機械臂控制軟件開發工具包,借助其提供的編程接口Cao類函數,和通信驅動組件CaoProv.DENSO.NetwoRC結合,實現對機械臂的二次開發。
1) 數據通信功能。上位機通過設計的通信連接功能函數RobotArmConn()、獲取位姿變量功能函數GetRobotArmPosVar()以及發送位姿變量功能函數SaveRobotArmPosVar(),建立上位機與控制器之間的以太網通信連接,實現數據通信,為后續的機械臂運動控制傳遞目標位姿變量、控制指令等,目標位姿變量包括末端位姿變量和關節位姿變量,末端位姿變量由機械臂基準坐標系末端法蘭中心位置(x,y,z)、末端工具坐標系各軸旋轉角度(Rx,Ry,Rz)以及關節形態Fig組成,關節位姿變量由機械臂各關節旋轉角度組成。其中RobotArmConn()調用Cao類函數m_pICtrls->Add()指定控制器型號、機械臂通信驅動組件名以及控制器IP地址,建立上位機與控制器之間的連接。
2) 運動控制功能。上位機通過設計的軌跡運動功能函數RobotArmMove()、關節旋轉運動功能函數RobotArmRotate()、機械臂復位功能函數RobotArmGoHome()以及中止運動功能函數RobotArmStop()等控制機械臂執行各類運動。
這些運動控制功能函數的實現過程類似,分別調用不同的Cao類函數,向控制器發送相應的運動控制指令,控制器接收到控制指令后,通過RobSlave程序將其轉換成PAC(DENSO機械臂專用的編程語言)控制指令,并執行該指令以實現對機械臂的運動控制。
根據采摘控制系統工作流程的需要,基于視覺識別定位模塊、機械臂運動控制模塊以及柔性手爪動作模塊的部分功能模塊,在采摘控制模塊中設計機器人自主采摘功能模塊和其他為了實現自主采摘功能而設計的輔助功能,包括機械手坐標轉換、采摘點篩選、采摘姿態確認、采摘軌跡規劃、機械手采摘控制、分離果實果梗動作控制功能模塊,以及與之對應的功能函數RobotPick()、RobotArmCoordinateTrans()、FilterPoint()、RobotArmPickPos()、PickTrajectPlan()、RobotArmPick()、RobotArmPickAction(),用于實現采摘過程中的各個環節和硬件設備之間的協調控制。
分離果實果梗動作控制、機械手采摘控制以及機器人自主采摘功能模塊的實現過程如圖7所示。

(a) 分離果實果梗動作控制功能

(b) 機械手采摘控制功能
為了驗證采摘機器人平臺控制系統程序的可行性,在實驗室環境下準備了試驗材料,包括:仿真樹、若干個柑橘、采摘機器人平臺、控制系統程序測試界面、測量工具等,設置了平臺硬件參數,包括:柔性手爪氣壓值100 kPa、機械臂速度32%等。測試界面如圖8所示。

圖8 控制系統程序測試界面Fig. 8 Control system program test interface
3.2.1 視覺定位功能程序測試
將柑橘隨機擺放在5個位置,用測量工具測量其實際位置信息,再通過視覺識別定位模塊的視覺識別功能程序和視覺定位功能程序對其進行識別定位,獲取其位置信息,將實際測量的位置信息與視覺定位的位置信息進行對比,結果如表1所示。

表1 視覺定位測試結果Tab. 1 Visual location test results
由表1可知:將5組數據的定位誤差求和取平均值,最終采摘控制系統視覺識別定位模塊的平均定位誤差為1.22 cm。
3.2.2 柑橘自主采摘功能程序測試
分批次布置總共30個柑橘在仿真樹上,同時柑橘和仿真樹的位置也隨批次進行隨機放置,避免出現柑橘位置固定的情況,機器人通過自主采摘功能程序控制模塊來進行柑橘采摘,過程如圖9所示。
圖9(b)為采摘過程中采摘機器人進行柑橘定位,定位結果為相機坐標系下x:6.36 mm、y:237.63 mm、z:848.00 mm,機械手坐標系下x:588.27 mm、y:-236.83 mm、z:627.52 mm,圖9(d)、圖9(e)為采摘機器人從正前方進行柑橘抓取,圖9(f)為采摘機器人執行分離動作,成功分離柑橘果實與果梗,圖9(g)、9(h)為采摘機器人將采摘后的柑橘放置到收集點,完成柑橘采摘,最終測試結果如表2所示。

(a) 柑橘識別

(b) 柑橘定位

(c) 機械手初始位姿

(d) 采摘準備點

(e) 采摘點

(g) 柑橘放置點

(h) 放置完成點圖9 采摘過程Fig. 9 Picking process
由表2可知,實驗室環境下,采摘機器人的柑橘識別成功率為100.0%,平均識別時間為47 ms,柑橘采摘成功率達到了80.0%,平均采摘時間為15.2 s。
如表1所示,柑橘的平均定位誤差僅為1.22 cm,采摘控制系統視覺識別定位模塊的定位精度高,而之所以還存在定位誤差是由于識別、定位算法所確定的柑橘中心坐標與實際柑橘中心坐標之間存在位置誤差,同時由于采摘機器人所采用的深度相機在進行深度測量時也存在著一定的系統誤差,因此在柑橘坐標轉換計算的過程中產生了定位誤差。
如表2所示,采摘控制系統視覺識別定位模塊的平均識別時間僅為47 ms,實時性好,能夠滿足柑橘采摘在線識別的要求;試驗表明即使受到柑橘周圍環境條件的影響如遮擋、光照等,識別算法對30個柑橘的識別成功率依然達到了100.0%,之所以識別成功率高,其主要原因是識別算法采用了深度卷積網絡模型,既能夠提取和學習淺層次特征信息,也能夠提取和學習深層次特征信息,對復雜環境的適應性好。
如表2所示,采摘機器人的柑橘采摘成功率達到了80.0%,平均采摘時間為15.2 s。之所以柑橘采摘成功率高,一定程度上是由于采摘控制系統視覺識別定位模塊的平均精度誤差小,結合柔性手爪本身能夠容許柑橘一定位置誤差的特性,使柔性手爪在不受枝葉遮擋的情況下能夠準確地抓取到柑橘果實;另一方面是由于采摘控制系統的采摘控制模塊在控制機械手進行柑橘采摘的過程中,采摘姿態確認功能和采摘軌跡規劃功能的控制算法通過預設的多個采摘軌跡點,將采摘軌跡分成多段,盡可能保持機械手與柑橘樹的合理距離,同時根據柑橘周圍枝葉的遮擋情況,對柑橘采取不同的采摘姿態,有效減少機械手與柑橘枝葉觸碰;再是由于采摘控制模塊果實果梗分離動作控制功能的控制算法發揮了作用。
試驗中6個柑橘采摘失敗的情況,主要是由于采摘控制系統受到了周圍復雜環境的影響。其一,采摘過程中視覺識別定位模塊由于采摘機器人自身的深度相機和所采用的定位算法,受到了橘枝葉遮擋和光照條件等因素的影響,出現了未能準確測量出柑橘位置信息的情況,導致柑橘未能成功采摘;其二,機械手在接近被定位柑橘的過程中,由于環境復雜,即使采用了采摘姿態確認功能和采摘軌跡規劃功能的控制算法,依然發生了與柑橘周圍枝葉觸碰的情況,致使柑橘脫離了原來的位置,從而導致手爪未能成功抓取到柑橘,柑橘最終未能成功采摘。
本文面向機器人柑橘采摘,構建了以上位機、RealSense Camera R200深度相機、VS-6556垂直多關節工業用機械臂、三指柔性手爪等組成的采摘機器人硬件平臺,研究了采摘機器人的控制系統程序設計,包括視覺識別定位程序模塊、機械臂運動控制程序模塊、手爪動作控制程序模塊以及采摘控制程序模塊的程序設計。
1) 基于librealsense相機軟件開發工具包、OpenCV計算機視覺庫、TensorFlow-GPU和Keras深度學習框架,采用Visual Studio 2015、PyCharm編程工具,C++和Python編程語言,設計了視覺識別定位模塊中的圖像采集功能模塊、基于改進YOLOv3-tiny輕量化識別方法的視覺識別功能模塊以及基于識別結果的視覺定位功能模塊。
2) 基于ORIN2機械臂控制軟件開發工具包、Arduino IDE自帶函數庫以及SerialPort串口通信軟件開發工具包,采用Visual Studio 2015、Arduino IDE編程工具,C++編程語言,設計了柔性手爪動作控制模塊、機械臂運動控制模塊中上位機與機械臂、柔性手爪的數據通信功能模塊、柔性手爪的動作控制功能模塊以及基于位姿變量的機械臂運動控制功能模塊等。
3) 結合視覺識別定位模塊、柔性手爪動作控制模塊和機械臂運動控制模塊,設計了采摘控制模塊,包括分離果實果梗動作控制功能、機械手采摘控制功能以及機器人自主采摘功能等在內的功能模塊。
4) 采摘控制系統程序測試的結果表明:視覺識別定位模塊的平均定位精度誤差為1.22 cm,柑橘的識別成功率達到100%,平均識別時間約為47 ms,機器人柑橘采摘成功率達到80%,平均采摘時間為15.2 s。驗證了采摘機器人平臺控制系統程序的可行性,為水果采摘機器人的控制系統程序設計提供參考。