祁海東
(鄭州飛機裝備有限責任公司維修中心,河南鄭州 450000)
在飛機上,有許多結構復雜的航空附件產品,特別是其中很多機械類產品,由于尺寸精度要求較高,在產品裝配時大多需要視情調整產品中的某些裝配尺寸,增減墊片就是較為常用的調整方式之一。當前調整的墊片的主要方法是試裝,通過“粗調- 精調”的反復裝卸的試裝環節,最終將產品尺寸調整到滿足圖紙技術要求為止。原調整方法對新員工極為不友好,由于新員工缺乏調整經驗,致使單套產品的反復調整次數較多。如何有效的預測墊片的調整量,減少裝配調整次數,提升產品裝配效率成為目前急需解決的問題。針對這個問題,本文采用百度PaddlePaddle 深度學習平臺,在其平臺上快速搭建一個回歸模型,來實現對墊片調整量的預測。實驗結果表明,用150 組數據訓練產生的模型預測墊片調整量,可使單套產品單側的平均調整次數由原來的4 次降低為1.3 次,極大提高了裝配效率。
根據產品結構得到簡化示意圖,見圖1,該產品支架與底座通過主軸相連,支架兩端裝有限位機構,在限位機構與支架之間安裝有調整墊片,通過增減墊片,控制支架繞主軸的旋轉角度范圍,調整墊片的目標是使支架旋轉到預定角度后會觸發限位機構轉接。原有的調整方法為:在限位機構與支架之間先墊上若干數量的墊片,這個數量一般都是由操作人員憑感覺而定,然后給產品通電,測試支架運動的角度范圍,根據測試結果,視情增減墊片后,再進行角度范圍測試,按照此方法,反復調整墊片數量,直至產品角度運動范圍滿足圖紙技術條件要求。由于該產品支架的角度公差很小,僅有±0.15°,需反復調整次數較多,裝配效率很低。僅對該簡化示意圖進行初步分析,就可以得到,與墊片的調整量有關的因素有:支架的各段的公差因素,限位機構的轉接行程因素,主軸在底座上的位置偏差因素等。按照一般的分析思路,通過測試出所有零件的尺寸,通過尺寸鏈計算,可以得到墊片調整量的具體數值。但實際上,很多零件加工完成后是通過檢驗工裝進行檢驗,只能知道零件是符合尺寸要求的,不知道零件的具體數值,所以就無法通過實際尺寸計算的方法計算出墊片的調整量。而且實際產品復雜程度更高,很難對影響因素進行全面分析。

圖1 產品簡化示意圖
通過分析,該調整過程實際可以測量的數據見表1。在產品調整完成后,可以記錄上述數據。但在調整前,“初始角度”的數值可以通過空載通電測量得到的;“目標角度”是產品技術要求中的需要達到的角度,也是可以在調整前得到的;“墊片值”是調整過程中需要加墊片的數量,這個值在調整前是一個未知量。綜上所述,如果“初始角度”、“目標角度”與“墊片值”之間存在某種關系的話,就可以通過該關系來預測“墊片值”。這時,可以考慮嘗試通過PaddlePaddle深度學習平臺構建模型,探索其中的關系。

表1 可測量數據表
PaddlePaddle 又稱飛槳,是百度出品的深度學習平臺,該平臺集合了學習核心訓練和推理框架、基礎模型庫、端到端開發套件與豐富的工具組件,是中國首個自主研發、功能豐富、開源開放的產業級深度學習平臺。從2016 年至今,經歷了多次版本更新,現在已經來到了飛槳2.x 時代[1]。通過PaddlePaddle 深度學習平臺構建模型一般需要5 個步驟,分別是數據處理、模型設計、訓練配置、模型訓練、模型保存。
由于本文需采集的數據量較小,所以采用人工記錄的方法進行數據采集,根據項目數據需求,制作調整數據記錄表,由工人在調整時進行記錄,每調整完成一套產品后,記錄調整前后“初始角度”、“目標角度”與“墊片值”的具體數值。人工記錄數據后,用“記事本”軟件建立一個.data 文件,第一列為“初始角度”,第二列為“目標角度”,第三列為“墊片值”,列與列之間用“空格”隔開。為了方便后續計算,減少小數點的存在,這里將角度數值記為4 位整數,例如角度“12.50°”記為“1 250”;同樣,將“墊片值”也記為4 位整數,例如墊片值為3.3 mm,記為3 300。數據記錄見圖2。

圖2 數據記錄示意圖
數據準備完成后,在Pycharm 中建立一個.py 文件,并定義一個數據載入函數load_data()。該函數會讀取.data 中的數據,并經過數據形狀變換,最終得到一個2 維矩陣,矩陣每行是一個包含3 個值的數據樣本,每個數據樣本包含2 個X(初始角度x1 與目標角度x2),和一個Y(墊片值y),這就建立了一個小型數據集。由于后續要使用數據進行模型訓練與測試,所以將數據集劃分為訓練集與測試集,其中訓練集用于模型訓練,以確定模型中的參數,測試集用于評判模型的效果,本文將原始數據隨機打亂后,使用前80%的數據作為訓練集,后20%的數據作為測試集。劃分好數據集后,要對數據進行歸一化處理,使得數據樣本中的每一個值縮放到0~1 之間,這樣可以使得后續的模型訓練更加高效,可以改善由初始化不良引起的訓練困難等問題[2]。
一般只需要調用PaddlePaddle 深度學習平臺中的庫文件與函數,即可完成模型構建工作。本文用到的庫文件與函數見表2。

表2 本文使用的庫文件與函數
本文構建一個全連接神經網絡,網絡輸入的維度為2,輸出的維度為1。該網絡僅由一個全連接層、一個輸出層組成,并通過飛槳構建一個前向計算網絡,通過飛槳VisualDL 查看網絡結構,見圖3。

圖3 模型網絡示意圖
這里使用的是飛槳2.x 平臺,構建網絡的方法非常簡單。具體代碼如下:


如上述代碼所示,本文完成模型設計僅需要3 步,第一步需要創建一個Python 類,這里為Regreessor(),該類需要繼承paddle.nn.Layer 父類;第二步需要在新建的類中定義__init__函數,并在初始化函數定義一層全連層,僅使用一行代碼即可完成,其中“in_features=2,out_features=1”表示輸入特征為2 個,輸出為1 個;第三步需要定義forward 函數,完成神經網絡結構構件,實現前向計算過程,并返回預測的結果。
模型設計完成后,一般要進行訓練配置工作,訓練配置工作一般有四步組成,分別是指定運行訓練的機器資料、聲明模型實例、加載訓練和測試數據、設置優化算法和學習率。使用飛槳2.x 框架完成這四步較為簡單,這里特別需要注意的是優化算法的選擇與學習率的設置,本文使用的是SGD(隨機梯度下降法)[3],需要設置學習率,根據經驗,學習速率暫時設為0.001[4],后續可根據訓練情況進行調整。有時候模型學習速率的調整非常耗時,找到最佳的學習率并不輕松,工程上為了獲得成功的模型,只要找到足夠大的學習率使得模型有效收斂就行。完成模型的配置工作后,即可開始訓練,本文采用內、外兩層循環套嵌的方式進行訓練,外層定義了遍歷數據集的次數,內層用于設置遍歷一次數據集的方法。一般來說,如果數據集較大,可以采用分批的方式進行學習,經過數據準備、前向計算、計算損失函數、反向傳播后,模型內的參數得到不斷的更新,隨著訓練測試的提升,損失會逐漸降低。若出現損失函數不變或上升的問題,可能通過調整學習批次、調整學習速率、調整模型結構或清洗數據集等方法進行改善。主要代碼如下:


學習完成后,得到了相對滿意的模型,即可進行保存,飛槳2.x 可將模型保存為動態圖或靜態圖模式,本文使用“paddle.jit.save(layer=model, path=path)”函數直接進行模型保存。
模型測試需要用到測試集數據,基本方法就是將測試集數據依次輸入模型,并計算結果,經過分析,評估模型的準確程度。這里需要注意的是測試集數據的輸入也要經過歸一化,經過模型計算后的結果,還要進行反歸一化運算才能使用。整個模型測試的過程中,模型預測成功與否的評價標準在這里顯得比較重要,在裝配領域,一般都有對應的公差要求,可以將公差要求作為對應的評判標準。本文的應用由于裝配公差的要求為±0.15°,根據統計計算,只要預測的墊片厚度誤差在±0.3 mm 之內,一般可滿足工程要求。最終模型經過測試,預測誤差大部分為±0.1 mm,未發現預測誤差超過±0.3 mm 的情況,可以滿足工程要求。
由于模型訓練與測試都采用Python 語言,在模型部署階段,可以考慮使用Pycharm+QT5 進行人機界面設計開發。飛槳2.x 的部署有服務器部署、移動端/嵌入式部署等方式[5],可參考百度飛槳官網的教程進行相應的開發。最終墊片預測軟件的運行效果見圖4,打開軟件后,按照選擇產品相應的調整位置、輸入產品調整前的運行的數據后,點擊“預測”按鈕即可進行預測,現場操作人員根據預測結果對產品進行調整,再次進行測試觀察產品調整后是否滿足要求。若最終的墊片調整值與預測值不同,可以在軟件中輸入實際的墊片調整值并記錄,軟件會將該值加入數據集,方便后續對模型進行重新訓練。

圖4 軟件運行效果示意圖
經過工程實踐,PaddlePaddle 深度學習平臺生成的模型已經可以有效的指導現場操作人員進行作業,將單套產品單側的平均調整次數由原來的4 次降低到1.3 次,極大的提高了裝配調整效率。
本文提出了一種利用百度PaddlePaddle 深度學習平臺解決產品裝配調整問題的方法,該方法具有開發過程簡單、開發周期較短、預測精度較高、部署簡單方便等特點,該方法可以通過數據積累不斷提高預測精度,提高裝配調整效率,而且該深度學習平臺為開源平臺,大大提高了軟件開發的便捷性與經濟性,能為企業帶來巨大的經濟效益。