□ 高美原 □ 秦現生 □ 白 晶 □ 于喜紅 □ 馬 闖
西北工業大學 機電學院 西安 710072
基于ROS和LinuxCNC的工業機器人控制系統開發*
□ 高美原 □ 秦現生 □ 白 晶 □ 于喜紅 □ 馬 闖
西北工業大學 機電學院 西安 710072
針對傳統工業機器人控制系統開放性差、內部結構復雜和技術升級困難等弊端,在保證系統實時性和穩定性的前提下,構建了基于ROS和LinuxCNC的工業機器人控制系統軟件架構。根據系統的功能要求和所選平臺的特點,軟件分為三部分:任務調度模塊、實時任務模塊和EtherCAT主站模塊。通過實驗證明原型控制系統具備控制工業機器人完成基本工作的能力。
工業機器人 ROS LinuxCNC 控制系統
隨著工業機器人技術逐漸成熟,應用范圍不斷擴大,對控制系統的要求也越來越高。面對復雜的工作環境和嚴格的安全要求,機器人對外界的感知能力越來越重要。機器人配備的傳感器從簡單的光電開關和觸碰開關,發展到觸覺、聲覺、視覺、力覺等高端傳感器,隨著這些傳感器的大規模使用和價格不斷下降,整合和處理各種傳感器的數據顯得更加重要。因此,在工業機器人控制系統中,如何實現各種信息的融合,并與傳統的運動控制和邏輯控制銜接,成為實際應用中亟待解決的問題。
ROS(Robot Operating System)是一個機器人軟件平臺,最早源于2007年斯坦福人工智能實驗室的STAIR項目和機器人技術公司Willow Garage的個人機器人項目 (Personal Robots Program)之間的合作。2008年后主要由Willow Garage公司繼續該項目的研發,并于2010年發布了開源機器人操作系統ROS,現在大部分傳感器在ROS上都得到了比較好的支持[1]。具有多傳感器的工業機器人面對的主要問題之一是控制器的時鐘同步問題,多傳感器和控制器之間的通信,控制器和執行器之間的通信,都必須具有統一的時鐘,否則無法完成傳感器間的數據融合,ROS中基于點對點的通信機制很好地解決了這個問題。在ROS中設備之間的通信有一個統一的調度中樞(Roscore),通過這個調度中樞,開發者能夠很好地控制信號傳遞,并且可以便捷地實現復雜的功能。但ROS本身并不具備實時環境,因此為了保證控制系統實時性和穩定性,底層算法需要在具有實時補丁的 Linux內核中實現。LinuxCNC是一個應用于機床和機器人運動控制的開源軟件,由美國國家標準與技術研究院開發,使用RTAI實時補丁,提供完整的底層運動控制算法,并且可配置的軟件架構和模塊化的設計使其能夠便捷地被其它軟件調用。
結合ROS和LinuxCNC,基于軟件的層次化和模塊化設計原則,筆者提出了工業機器人控制系統的軟件架構,如圖1[2~4]所示。軟件架構主要分為三部分:①上層任務調度模塊,主要實現信息融合和智能規劃,包括非實時傳感器數據的提取和處理,傳感器間的信息融合,機器人的行為規劃等;②實時任務模塊,主要實現傳統的運動控制和I/O控制,包括命令解碼、軌跡規劃、粗插補、正逆解、細插補、I/O邏輯控制等;③以太網現場總線通信模塊,采用EtherLab(在Linux環境下針對工業自動化領域用于快速生成實時代碼的開源工具包)提供的部件EtherCAT Master,實現控制系統對伺服系統和I/O硬件的實時控制。
任務調度模塊主要功能是將輸入的命令和傳感器的信息自動分解為對運動控制模塊和PLC模塊的操作,并監控整個操作過程。數據采集節點和數據處理節點負責傳感器信息的處理和整合。為了增加工業機器人自主運動能力,減少試教操作和編程,針對工業現場中機器人廣泛應用的動作(如抓取動作、噴涂動作等),構建面向任務的命令控制。決策中心是調度模塊的核心組成部分,根據有窮自動機理論,將任務逐層細化,直到拆分成基本的動作、輸出運動和邏輯控制指令[5]。其中狀態集合Q描述機器人當前狀態,輸入字符集Σ描述輸入命令和外界環境抽象之后的狀態。轉移函數表征當有窮狀態機獲得一個字符,或者發生一個事件
時,狀態的轉移情況。利用ROS提供的軟件點對點通信機制以及豐富的軟件資源,構建原型系統。
2.1 數據處理節點
在傳感器數據采集節點中,完成對數據的預處理,使其能夠被數據處理節點使用。數據處理節點通過對采樣數據進行分析,設計算法提取特征,根據實際需求生成“消息”或“服務”,供決策中心調用。“消息”或“服務”包括:1)運動控制命令,如運動暫停,直線運動等;2)I/O控制命令,如氣抓打開,PLC中某個變量改變等;3)軌跡信息,如目標位置,目標特征,障礙物信息等;4)自定義數據,為后續開發預留。由于數據處理節點具有相似結構,但與采集數據節點的接口變化劇烈,因此采用工廠方法軟件設計模式。
2.2 抓取動作的有窮自動機模型
工業機器人抓取動作在碼垛工藝和裝配工藝中廣泛存在,是實現復雜功能的基本要求,圖2所示完成了對抓取動作的任務劃分。
根據抓取動作的任務劃分,建立有窮自動機模型,其中狀態轉換如圖3所示。該模型共有11個狀態,包括:初始化狀態q0;輸入檢測狀態q1;目標匹配狀態q2;目標判定狀態q3;路徑規劃狀態q4;碰撞檢測狀態q5;接近目標狀態q6;位置調整狀態q7;角度調整狀態q8;末端執行器動作狀態q9;執行完畢狀態q10。因此有限狀態集合Q={q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10}。開始狀態為 q0,結束狀態為q10。輸入符號w1~w21的生成主要由三部分決定:輸入命令、當前狀態和外部環境。從整體分析,轉態轉換主要分為三部分:當輸入命令為運動指令時,控制器直接執行命令,接近目標后判斷是否需要調整;當輸入命令是目標位置時,要經過路徑規劃和碰撞檢測,生成運動指令并執行;當輸入命令是目標特征時,經過目標匹配和目標判定,生成目標位置或運動命令并執行。當運行中出現系統錯誤或者檢測到危險,將首先判定當前狀態是否有誤,如果有誤則進行修正,否則根據條件向上個狀態轉移。

▲圖1 工業機器人控制系統軟件架構

▲圖2 抓取動作任務劃分
3.1 通信接口模塊
任務調度模塊和實時任務模塊之間需要通信接口,用于實現兩者信息交換和命令傳遞。由于ROS的穩定性無法滿足工業要求,為了防止上層軟件的風險向下層傳播,需要嚴格控制通信通道。在ROS中建立負責通信的節點Commucation Package,在linuxCNC的任務控制模塊中建立與之對應的線程Commucation Thread。節點 Commucation Package通過有名管道pipe Statue和pipe Error獲取實時任務模塊當前的狀態信息和錯誤信息,將任務調度模塊生成的控制命令通過有名管道pipe Command發送給實時任務模塊;線程Commucation Thread與之相反,通過有名管道pipe Statue和pipe Error發送控制器當前的狀態信息和錯誤信息,通過有名管道pipe Command獲取當前命令。控制命令通過運動解析模塊和軟件PLC解析模塊將信息發送到實時模塊。
3.2 運動控制模塊修改及配置
運動控制模塊是工業機器人數控系統的核心組成部分,包括軌跡規劃、T型加減速、正逆解、三次樣條曲
線插補、PID組件等[6]。加載運動模塊前,首先根據工業機器人構型及連桿參數修改src/emc/kinematics目錄下的正逆解并進行編譯,然后在hal文件中添加啟動模塊,示例如下:



▲圖3 決策中心狀態轉換圖
3.3 軟件PLC編程及配置
LinuxCNC下嵌入了軟件 PLC模塊classicladder,用于實現工業機器人運行過程中的邏輯控制。PLC的編程分為兩部分:系統編程和用戶編程。系統編程主要針對機器人安全措施(如緊急停止,使能開發,操作模式,限位開關等)、錯誤信息(如電機報錯,通信失敗等)和編程指令,系統啟動時程序運行,因此具有一定的權限才可修改。用戶程序主要針對和其它外部I/O或控制系統的集成,如電磁閥,開關或PLC等。啟動PLC人機界面編寫程序 (以單個軸的限位開關為例)并保存為myladder.clp,如圖4所示[7]。完成后在hal文件中添加PLC啟動及配置:


3.4 HAL下EtherCAT組件開發
HAL(硬件抽象層)是LinuxCNC重要的組成部分,使用了基于硬件的引腳模型,有效的連接了系統的軟件和硬件。HAL本質上是使用RTAI提供的一組實時函數,構造的具有管理功能的軟件框架,用于維護和配置實時組件。實時組件是一個定義了輸入引腳、輸出引腳、參數值、函數和線程的程序軟件,通過HAL文件可以加載和連接各個組件形成具有特定功能的復雜系統[8]。通過將EtherCAT master提供的應用接口,封裝為HAL下的實時組件,即可實現EthereCAT驅動的動態加載。
EtherCAT組件開發包括主站配置、從站配置以及組件配置。主站配置流程包括:1)初始化部件,注冊HAL驅動,獲取組件ID;2)調用hal_malloc函數分配共享內存;3)調用hal_pin_type_newf函數創建引腳;4)解析主站配置文件參數,如圖5所示,包括主站的主站號、運行周期、偏移時間、從站序號、名稱、類型以及周期參數等[9]。

▲圖4 軟件PLC程序編寫

▲圖5 主站配置文件

▲圖6 實驗平臺

▲圖7 實驗過程
從站配置主要根據廠商提供的XML設備描述文件,設置從站的運行模式,配置非周期性數據和周期性數據,并添加引腳和功能函數。應用層采用CoE協議,根據CiA402(伺服運動控制規范)配置周期性數據,示例如下:

組件配置包括將EthereCAT組件和運動控制模塊與軟件PLC模塊相連接。
4.1 系統組成
搭建實驗平臺如圖6所示,分為三部分:①非實時傳感器和監控系統,包括工業相機和遠程操作機等;②中央控制器,實驗采用的是研華工控機;③執行器,包括工業機器人及末端執行器。
4.2 實驗結果
機器人實驗過程如圖7所示。在輸入零件特征后,通過工業相機獲取目標的位置,工業機器人抓取零件,并將零件放于另一個相機視野中,檢查零件是否合格,如果合格則放入物料箱中。經過調整和修改,機器人能夠完成整個流程。
為了提高工業機器人的靈活性和適應性,筆者提出了基于ROS和LinuxCNC的控制系統軟件架構,并分析了每個模塊的具體實現。由實驗可知,軟件原型能夠實現工業機器人最基本的抓起動作。
[1]黃開宏,楊興銳,曾志文,等.基于ROS戶外移動機器人軟件系統構建 [J].機器人技術與應用,2013(4):37-41.
[2]張少勛,郗曉田.基于 Linux-RTAI的Ether CAT主站研究[J].電子設計工程,2013,21(10):151-154.
[3]王飛,裴海龍.開放式數控系統中軟件 PLC系統的開發及應用 [J].制造技術與機床,2010(8):73-76.
[4]劉鑫.基于 EtherCAT的工業機器人控制器研究與設計[D].武漢:武漢科技大學,2012.
[5]劉磊.仿人機器人嵌入式視覺系統和決策系統 [D].哈爾濱:哈爾濱工業大學,2012.
[6]The LinuxCNC Team.User Manual[EB/OL].http://www. linuxcnc.org/index.php/english/documentation.
[7]The LinuxCNC Team.Developer’s Manual[EB/OL].http:// www.linuxcnc.org/index.php/english/documentation.
[8]謝林菲,游林儒.基于 HAL的 ClassicLadder的研究與應用[J].組合機床與自動化加工技術,2010(2):41-45.
[9]張少勛.基于嵌入式數控平臺的 EtherCAT主站實現[D].廣州:華南理工大學,2013.
(編輯 平 平)
TP306+.2
A
1000-4998(2015)10-0021-04
*西北工業大學研究生創業種子基金資助(編號:Z2015071)
2015年5月