巢惠世,梁宏斌,蔡土淇
(遼寧科技大學 機械工程與自動化學院,遼寧 鞍山 114051)
21世紀以來,我國工業機器臂取得了巨大的進步,隨著我國傳統制造業的轉型升級,我國的機械臂市場的潛力是巨大的,所以對機械臂的研究具有重要意義[1-2]?,F在機械臂常用的操作系統像VxWorks都是商用的操作系統,雖然實時性好,但是價格昂貴,而價格低廉、開源且可裁剪的Linux則非常適合機械臂系統的自主開發。由于標準的Linux操作系統不具備實時性,需要對其進行實時性改造。
在Linux的實時改造方面,有采用雙內核路線的美國新墨西哥州立大學研制的RT-Linux、意大利米蘭學院研制的RTAI以及移植性更好的Xenomai[3-4];還有采用直接修改內核路線的加州大學開發的RED-Linux,堪薩斯大學開發的Kurt-Linux,以及實時搶占補丁RT-Patch[5]。經過改造的Linux可以在數控系統、機器人系統、航空領域等得到應用。趙翔宇[6]采用嵌入式Linux對六自由度機械臂控制系統進行設計,運用CAN總線的分布式控制方式,實現了機械臂點到點的抓取控制;應思齊[7]利用Linux系統的嵌入式平臺作為SCARA機械臂的控制端,并基于Qt應用軟件對機械臂進行運動控制,提高了系統的實時性;中科院沈陽自動化研究所采用RT-Linux實時嵌入式操作系統,研制出基于對話方式設計實現的機器人示教器[8]。
本文針對機械臂實時控制系統開發,采用RT-Patch的改造方法對Linux進行實時性改造,在經過改造的Linux環境下對機械臂下位機進行系統架構搭建,實現譯碼、插補、逆解、通信功能;同時結合示教器軟件設計,完成機械臂從示教器端的指令輸入到下位機的數據處理功能,具有示教再現功能,同時使機械臂在實時性達到要求的前提下運行平穩且滿足一定的運動精度要求。
Linux作為開放源碼項目的典型代表,在各個領域都有廣泛的應用,但是標準的Linux是一款分時操作系統,追求的是高的信息吞吐量和公平性[9],雖然Linux的內核在2.4版本后支持和優化了實時性,但是它本質上并不是一個實時操作系統。主要體現在以下方面[10]:(1)內核的不完全搶占;(2)中斷不可搶占;(3)時鐘顆粒粗糙;(4)實時調度策略不足;(5)優先級反轉;(6)虛擬內存。
為解決Linux的實時性問題,本文采用的方法是在Linux社區kernel的基礎上加上RT-Preempt補丁,以使得Linux滿足實時的需求[11]。RT-Preempt補丁對Linux內核的主要改造包括:(1)通過用rtmutexes重新實現,使內核內鎖定原語(使用自旋鎖)可搶占;(2)受spinlock_t和rwlock_t保護的關鍵部分現在可以搶占;(3)將中斷處理程序轉換為可搶占的內核線程,RT-Preempt補丁在內核線程上下文中處理軟中斷處理程序,該任務由task_struct表示,就像普通的用戶空間進程一樣,但是也可以在內核上下文中注冊IRQ;(4)將舊的Linux計時器API轉換為用于高分辨率內核計時器的單獨基礎結構,再加上用于超時的基礎結構,從而產生具有高分辨率的用戶空間POSIX計時器;(5)豐富了實時調度策略算法;(6)實現內核內自旋鎖和信號量的優先級繼承;(7)提供內存鎖定功能,避免實時處理中存儲頁被換出。
測試環境為Ubuntu10.10,在安裝配置完實時補丁后,再在Linux下安裝RT測試工具集,運行其中的cyclictest測試工具,默認創建5個SCHED_FIFO策略的RT線程,優先級76~80,運行周期是1 000 μs、 1 500 μs、2 000 μs、2 500 μs、3 000 μs,分別在標準Linux環境下和改造后的Linux環境下進行測試,測試結果如圖1所示。由圖可知標準Linux內核中RT線程投入運行時間非常不穩定,而按照相關文檔加入實時補丁的Linux系統的最大延遲時間為436 μs,平均延遲時間為192 μs,本次測試的最大延遲時間為241 μs,證明Linux系統實時改造是滿足要求的。

圖1 延遲調用時間圖
機械臂的伺服控制系統如圖2所示,主要由指令平臺(示教器端,即PC機)、實時平臺(控制器端,即內嵌Linux系統的工控機)以及關節模塊的伺服驅動器和伺服電機組成三級控制。本文主要對指令平臺和實平臺進行設計。
機器臂示教器作為控制系統的上位機是運動控制器與操作人員之間連接的橋梁,一方面負責對操作人員的操作進行處理,例如機器人作業文件編寫、示教再現等;另一方面在圖形界面上監控機器人運動過程中的狀態信息,并向控制器發送指令使機械臂完成相應的動作。

圖2 機械臂伺服控制系統框圖
示教器的軟件編寫是在Windows環境下以Qt作為開發工具進行的,主要進行4方面設計。
(1)設計一款合適的人機交互界面。整個示教器主要分為主界面和控制界面兩個界面進行顯示。主界面主要顯示的是示教編程功能,在該界面可進行指令的輸入;控制界面主要進行狀態顯示、數據點顯示、模擬仿真視圖顯示和通信功能接口。同時示教器也具有指令的插入編輯等功能對應各自的界面。主界面圖如圖3所示。

圖3 主界面圖
(2)示教器與機器人控制器進行實時交互。示教器與機器人控制器的通信通過基于TCP/IP協議的以太網通信實現。
(3)提供了機器人操作的基本功能,含有直線、圓弧、關節的插補運動指令,在控制界面還添加了插補點坐標的顯示和插補點的仿真試圖。
(4)通過界面上的狀態信息顯示出當前機械臂的狀態,遇到故障或者錯誤時及時反饋到示教器界面。
下位機采用Linux系統(加入實時補丁)作為多任務控制系統的編寫環境平臺,具有多進程設計的控制系統其穩定性比較高,因此多任務采用多進程進行處理。本次多任務分為四個進程,分別為:TCP通信進程、I/O進程(實時RT進程)、譯碼進程、插補逆解進程(實時RT進程)。
TCP通信進程:與上位機進行TCP通信實現數據信息的交互,上位機獲得的人機運動指令TXT文檔傳遞給下位機[12]。上位機先發送文件的頭部信息,發送完畢后延時5 ms,然后循環讀取4 KB內存大小的文件數據,再發送給下位機直到文件讀取結束。下位機先接收文件的頭部信息,然后再連續接收文件的內部信息,從而實現人機涌動指令TXT文檔的接收。
I/O進程:此進程為實時進程,以20 ms的周期來讀取相關GPIO口的狀態置位信息,和內部設置好的GPIO口置位信息對比從而進行相關的程序處理。
譯碼進程:逐行讀取人機運動指令TXT文檔,根據每行的運動指令類型添加特征符變量,然后將每行識別的位置、速度、歐拉角的信息和特征符變量依次添加到鏈表當中,然后通過管道通信給插補逆解進程(實時RT進程)傳輸鏈表信息。具體過程如圖4所示。

圖4 譯碼流程框圖

圖5 插補逆解流程圖
插補逆解進程:設置定時器,以10 ms為周期觸發定時器(設計的插補周期為10 ms),進程開始依次讀取鏈表信息進行加減速、軌跡插補、逆解計算,然后進程移出工作隊列放入等待隊列,任務進入阻塞狀態,等待定時器觸發喚醒進程的下一次程序處理,直到鏈表全部讀取完。流程圖見圖5。
前面已經驗證安裝RT補丁后的系統實時性是滿足要求的,這里進行系統調用插補逆解進程完成機械臂運動控制的實時性檢驗,仍然用rt-test測試工具集對其進行實時性測試,測試結果如圖6所示。

圖6 程序執行時間圖
圖中橫坐標為所有插補點,縱坐標為每次執行插補逆解所需要的執行時間,從圖中可以看到最大執行時間為310 μs,加上進程最大延遲調用時間436 μs,一共耗時不超過1 ms,為后續添加更復雜功能提供了可能性,證明此系統設計具有良好的實時性和擴展性。
在機械臂的建模方法上采用D-H參數法[13]建立關節坐標系,以PUMA560為原型建立機器人連桿坐標系。利用MATLAB環境下的Robotic工具箱[14]的Link和robot函數建立機器人處于零點位置的位姿,根據表1給出的D-H參數建立機械臂的模型,建立第i個連桿的命令如下:
Li=Link(θi,di,ai,αi)
利用SerialLink函數將六個連桿依次序連接起來,命令如下:
robot=SerialLink([L1,L2,L3,L4,L5,L6])
調用teach函數調節6個關節變量,實現對機器人模型進行控制,關節變量由實時平臺的Linux系統計算得到。整個過程模擬焊接軌跡過程,包括三段直線,一段圓弧。機械臂的運動仿真結果如圖7所示,從仿真中可以直觀地看到末端執行器的整個連續平穩的運動軌跡。
本文在Linux內核上外加RT補丁的實時改造的基礎上,獨立完成對六自由度機械臂控制系統的搭建。進行以示教器為上位機的示教器軟件設計,完成了通信、指令輸入、視圖仿真等功能,下位機則進行了包括TCP通信、I/O、譯碼、插補逆解進程的系統架構搭建。
通過實驗,驗證了Linux外加RT補丁的實時性改造的可行性,并且完全可以應用到機械臂的控制系統當中,實時性可以滿足,同時對整個控制系統進行仿真,仿真結果為連續平穩的曲線,證明了機械臂控制系統的運動控制的正確性和可行性。

圖7 機械臂運動仿真圖