劉世平, 夏文杰, 陳 萌, 馬梓焱, 黃元境, 張文奇
(1.上海市空間飛行器機構(gòu)重點實驗室, 上海 201108; 2.華中科技大學機械科學與工程學院, 武漢 430074)
對于自由度數(shù)目小于7 的非冗余機械臂,通過所期望的末端位置和姿態(tài)信息,可使用幾何解法對其運動學逆解進行求解,得到機械臂的各個關(guān)節(jié)角度來控制機械臂的運動。 與非冗余機械臂相比,冗余機械臂具有許多優(yōu)良的性能,如增加機械臂靈活度、實現(xiàn)避障、具有良好的容錯性等,但是其求解運動學逆解的過程更加復雜。
幾何解法和數(shù)值解法是目前主要的7 自由度機械臂運動學逆解的求解方法。 幾何解法具有求解速度快、求解精度高等優(yōu)點,但是其通用性差,主要適用于符合Pieper 準則的特殊構(gòu)型機械臂,通過給定臂形角,增加約束的方法進行求解。目前傳統(tǒng)數(shù)值解法有加權(quán)最小范數(shù)法、廣義/狹義雅克比偽逆法、梯度投影法等,這些方法具有良好的通用性,但是計算量大、求解時間較長、存在累積誤差,并且當機械臂處于奇異位置時,無法對其運動學逆解進行求解。
為克服傳統(tǒng)方法的不足,智能算法在冗余機械臂運動學逆解求解問題中得到應用,這些算法主要采用遺傳算法、神經(jīng)網(wǎng)絡(luò)等。 Xia等通過雙神經(jīng)網(wǎng)絡(luò)完成了對冗余機械臂的控制;Toshani 等通過將神經(jīng)網(wǎng)絡(luò)與非線性二次規(guī)劃相結(jié)合進行7 自由度機械臂逆解的求解;歐群文等首先通過遺傳算法獲得7 自由度冗余機械臂運動學逆解的樣本數(shù)據(jù),然后使用RBF(徑向基)神經(jīng)網(wǎng)絡(luò)對樣本進行訓練得到運動學逆解解法;Demby 等使用人工神經(jīng)網(wǎng)絡(luò)和自適應神經(jīng)模糊推理系統(tǒng)對4、5、6 和7 自由度機械臂的運動學逆解進行了求解。
卷積神經(jīng)網(wǎng)絡(luò) ( Convolutional Neural Networks, CNN)在獲取數(shù)據(jù)特征方面得到廣泛的應用。 本文基于某型7 自由度機械臂的運動學模型,對LeNet 模型進行改進,設(shè)計卷積神經(jīng)網(wǎng)絡(luò)對機械臂運動學逆解的問題進行求解。
對該7 自由度機械臂構(gòu)型連桿坐標系進行建立,坐標系如圖1 所示。 DH 參數(shù)表如表1 所示。
圖1 7 自由度機械臂DH 坐標系Fig.1 DH coordinates frames of the 7-DOF manipulator
表1 7 自由度機械臂DH 參數(shù)Table 1 DH parameters of the 7-DOF manipulator
各關(guān)節(jié)角度與末端位姿的關(guān)系如式(1)、式(2)所示。
式中,θ為第關(guān)節(jié)角度, T(θ) 為第1關(guān)節(jié)到第關(guān)節(jié)之間的變換矩陣,=1,2,…,7。
機械臂的末端位姿矩陣是通過7 個關(guān)節(jié)角計算得出,具有對應關(guān)系,因此可以對神經(jīng)網(wǎng)絡(luò)模型輸入末端位姿矩陣來計算機械臂相應的關(guān)節(jié)角角度。 在本文建立的卷積神經(jīng)網(wǎng)絡(luò)模型中,輸入層為3× 4 的位姿矩陣,包括3× 3 的旋轉(zhuǎn)矩陣與1× 3 的平移矩陣;輸出層為7 個神經(jīng)元,代表機械臂各個關(guān)節(jié)角度。
數(shù)據(jù)的特征可以通過卷積核進行卷積操作獲得。 由于所給的輸入層是3×4 的矩陣,并且該矩陣以列向量作為特征,所以輸入層選用的卷積核大小為3× 1,通過卷積核可以組合列向量的值,如式(3)所示。
激活函數(shù)可以讓線性輸入變?yōu)榉蔷€性輸出,通過不同的神經(jīng)元個數(shù)以及激活函數(shù)可以完成映射關(guān)系的實現(xiàn)。 目前激活函數(shù)有多種,常用的有函數(shù)、函數(shù)以及函數(shù)。 由于函數(shù)相對于其他2 種激活函數(shù)的計算復雜度低、收斂速度快,并且不容易出現(xiàn)梯度消失與梯度飽和等問題,因此本模型選用的激活函數(shù)為函數(shù),如式(4)所示。
在模型訓練中,需要衡量模型所得到的預測值與真實值之間的誤差,在機器學習中,將衡量誤差大小的函數(shù)稱為損失函數(shù)。 通常損失函數(shù)的值是正的,其值越大表示得到的模型的訓練誤差越大。 平方誤差函數(shù)與交叉熵損失函數(shù)是目前比較常用的損失函數(shù)。 交叉熵損失函數(shù)通過計算得到輸出層的每個神經(jīng)元預測值在0 到1 之間,因此一般用于分類問題中。 平方誤差函數(shù)直接得到預測值與真實值的誤差,可以用于函數(shù)擬合,所以損失函數(shù)使用平方誤差函數(shù),見式(5)。
根據(jù)已經(jīng)給出的損失函數(shù),為了求得最小化損失函數(shù)的值,需要通過優(yōu)化算法有限次迭代神經(jīng)網(wǎng)絡(luò)模型參數(shù)來盡可能降低損失函數(shù)的值。 目前神經(jīng)網(wǎng)絡(luò)使用較多的優(yōu)化算法有SGD 算法、Adam 算法等。 SGD 算法雖然可以達到全局最優(yōu),但是該算法需要自己設(shè)定學習率,對學習率的設(shè)定很嚴格,并且容易在模型訓練過程中停在鞍點,而Adam 算法不用人為設(shè)定干預學習率且容易跳過鞍點。 該模型所選用的優(yōu)化算法為Adam算法。
卷積神經(jīng)網(wǎng)絡(luò)能夠保留數(shù)據(jù)輸入的形狀從而較好地得到數(shù)據(jù)的特征。 LeNet是一個具有5層網(wǎng)絡(luò)結(jié)構(gòu)的CNN 模型,含有2 個卷積層、3 個全連接層及2 個池化層。 2 個卷積層卷積核大小為5× 5,輸出通道數(shù)為6 和16,3 個全連接層的輸出個數(shù)為120,84 和10,最后一層的10 代表模型的輸出種類個數(shù),LeNet 已經(jīng)成功用于手寫數(shù)字的識別。
本文對LeNet 模型進行改進設(shè)計,模型總共設(shè)計7 層,前3 層結(jié)構(gòu)為卷積層,后4 層的結(jié)構(gòu)為全連接層,由于每一層輸入的數(shù)據(jù)尺寸較小且卷積核較小,因此該模型不包含池化層,并且增大卷積層輸出通道數(shù)以增加訓練的參數(shù),增強擬合能力。
模型的輸入層是3×4 的矩陣,輸入層的卷積核為3× 1,輸出通道數(shù)為64,對矩陣每一個列向量的特征進行學習,下一層的卷積核為1× 1,輸出通道數(shù)為64,第3 層卷積核為1× 4,輸出通道數(shù)為256,第3 層對前一層數(shù)據(jù)的所有特征進行學習。 后4 層全連接的輸出個數(shù)分別為256、128、64 和7,最后一層輸出數(shù)7 表示7 自由度機械臂的各個關(guān)節(jié)角角度。
為防止模型對某些神經(jīng)元過度依賴,造成模型過擬合問題,可以在不改變輸出期望值的情況下對模型使用丟棄法,隨機丟棄一些神經(jīng)元。 該模型在第3 層與第4 層使用了丟棄法,丟棄概率為0.1。
本文建立的卷積神經(jīng)網(wǎng)絡(luò)如圖2 所示,模型的輸入信息為7 自由度機械臂的位姿矩陣,輸出值為7 自由度機械臂各個關(guān)節(jié)角角度,訓練集為10 000組數(shù)據(jù)。 該卷積神經(jīng)網(wǎng)絡(luò)的訓練過程如下:
圖2 卷積神經(jīng)網(wǎng)絡(luò)模型Fig.2 Convolutional neural networks model
1)參數(shù)初始化設(shè)置。 由于偏置對于神經(jīng)網(wǎng)絡(luò)中的梯度流動并無影響,神經(jīng)網(wǎng)絡(luò)偏置初始化為0。 但是當神經(jīng)網(wǎng)絡(luò)初始權(quán)重也置為0 時,正向計算時所有狀態(tài)值與激活值的結(jié)果為0,同時反向計算時所有梯度為0,那么對于整個神經(jīng)網(wǎng)絡(luò)訓練過程而言,相當于梯度消失了,不能進行任何有效的訓練。 神經(jīng)網(wǎng)絡(luò)的訓練過程中是基于梯度下降進的,因此參數(shù)的均值為0,輸出和輸入數(shù)據(jù)的方差一致訓練效果更好,可以通過對初始參數(shù)進行高斯分布或均值分布達到該目的。 He等考慮了激活函數(shù)對輸出數(shù)據(jù)分布的影響,其正態(tài)分布初始化以0 為中心,標準差為式(6)。
式中,_為權(quán)重張量中輸入單位的數(shù)量。
該模型選用的激活函數(shù)為函數(shù),因此神經(jīng)網(wǎng)絡(luò)初始權(quán)重初始化方法為He 等的方法。 為了得到較快的訓練速度與較好的訓練精度,模型的_設(shè)置為64,設(shè)置為160。
2)正向傳播與反向傳播。 數(shù)據(jù)沿著神經(jīng)網(wǎng)絡(luò)模型的結(jié)構(gòu)進行正向傳播,依次計算并存儲模型的中間變量,通過正向傳播得到的輸出值與真實值的平方差計算得到單個樣本的損失函數(shù),為了防止過擬合,同時計算范數(shù)正則化對模型的權(quán)重參數(shù)進行約束,得到總的損失函數(shù)為式(7)、式(8):
式中,為總的損失函數(shù),為單個樣本損失函數(shù),為對權(quán)重參數(shù)范數(shù)正則化的值,的取值影響約束程度,k為權(quán)重參數(shù)。
通過反向傳播,從輸出層到輸入層,依據(jù)鏈式法則計算神經(jīng)網(wǎng)絡(luò)中參數(shù)的梯度,并對參數(shù)進行更新,最終得到卷積神經(jīng)網(wǎng)絡(luò)的模型。
3)實驗配置與訓練結(jié)果。 本文使用的開發(fā)語言為python3.7,深度學習平臺為tensorflow2.0,GPU 為NVIDIA GeForceGTX 950M,CPU 為Intel Core i5-6300HQ。 通過為160 次的訓練得到卷積神經(jīng)網(wǎng)絡(luò)的損失值如圖3 所示,在訓練過程中最后損失值接近于0,訓練能夠收斂,訓練效果較好。
圖3 卷積神經(jīng)網(wǎng)絡(luò)訓練過程中損失值Fig.3 Loss value in convolution neural networks training
為驗證所設(shè)計模型對7 自由度機械臂運動學逆解求解的準確度與有效性,通過設(shè)計軌跡跟蹤實驗進行驗證。 實驗內(nèi)容為:通過給定期望軌跡,用卷積神經(jīng)網(wǎng)絡(luò)求出7 自由度機械臂的各關(guān)節(jié)角度值,用所求得的角度通過運動學正解得到機械臂末端的運動軌跡,最后得到與期望軌跡誤差值。所定義的機械臂的期望軌跡為式(9):
從軌跡中選取66 個點的位姿信息輸入卷積神經(jīng)網(wǎng)絡(luò)模型中求運動學逆解得到各個關(guān)節(jié)角度如圖4 所示,所計算的關(guān)節(jié)角范圍在機械臂的給定范圍內(nèi),并且計算得到的各關(guān)節(jié)角角度的曲線為光滑曲線,因此機械臂的運動為連續(xù)運動。
圖4 機械臂各關(guān)節(jié)角角度曲線Fig.4 Angle curve of each joint angle of manipulator
把機械臂關(guān)節(jié)角角度通過運動學正解得到末端軌跡圖,如圖5 所示,基于卷積神經(jīng)網(wǎng)絡(luò)所求得的軌跡與期望軌跡基本重合,因此使用該方法進行機械臂運動學逆解求解得到的結(jié)果較好。
圖5 軌跡對比圖Fig.5 Comparison of the trajectories
同時,根據(jù)機械臂運動學正解的結(jié)果獲得本模型求解過程中實際軌跡點與期望軌跡點各個方向的誤差值與總體誤差值,分別如圖6 與圖7 所示。 從圖6 中得出所求實際軌跡點與期望軌跡點在各個方向上的誤差在2.5 mm 以內(nèi),從圖7 中得出總的誤差在3 mm 以內(nèi),平均誤差為1.2 mm。模型求解的誤差在實際任務中能夠滿足所需的運動要求。 本方法求解的時間為12.96 ms,而使用該機械臂自帶的粒子群算法計算時間為428 ms,使用傳統(tǒng)的梯度投影法計算時間為637 ms,本方法在計算時間上得到了明顯提高。 通過對軌跡跟蹤實驗的誤差分析表明所設(shè)計的模型能夠用來求解7 自由度機械臂運動學逆解,并且具有一定的求解精度與較短的求解時間,滿足所執(zhí)行實際任務的需求。
圖6 實際軌跡與期望軌跡各個方向誤差Fig.6 Error of the actual trajectory and expected trajectory in all directions
圖7 實際軌跡與期望軌跡總誤差Fig.7 Total error between actual trajectory and expected trajectory
本文針對7 自由度冗余機械臂運動學逆解的求解問題,設(shè)計了卷積神經(jīng)網(wǎng)絡(luò)模型進行求解,得到機械臂運動軌跡到各個關(guān)節(jié)角度之間的映射關(guān)系。 通過對LeNet 模型進行改進,對卷積核、激活函數(shù)、損失函數(shù)、優(yōu)化算法、模型結(jié)構(gòu)與初始參數(shù)等進行設(shè)計與選擇,建立了符合7 自由度機械臂運動學逆解求解問題的卷積神經(jīng)網(wǎng)絡(luò)模型。 最后設(shè)計了軌跡跟蹤實驗對所建立的卷積神經(jīng)網(wǎng)絡(luò)模型的有效性和求解精度進行驗證,結(jié)果表明使用卷積神經(jīng)網(wǎng)絡(luò)對機械臂運動學逆解問題求解方法有效。