国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于以太網(wǎng)通信和OpenGL的庫卡機器人在線控制及仿真

2018-02-20 06:26杜必強陳佳楠
關(guān)鍵詞:庫卡以太網(wǎng)客戶端

杜必強 陳佳楠

(華北電力大學(xué) 能源動力與機械工程學(xué)院,保定 071000)

目前工業(yè)機器人應(yīng)用范圍的越來越廣,示教編程作為大部分機器人設(shè)計的編程方式,存在過程繁瑣、精度較低的,且示教過程存在安全隱患并占用較多機器人工作時間,導(dǎo)致傳統(tǒng)機器人示教編程方式已經(jīng)無法滿足現(xiàn)代化生產(chǎn)制造的要求。隨著計算機圖形技術(shù)和可視化技術(shù)的發(fā)展,離線編程逐漸成為一種主流編程方式,大部分國外離線編程軟件通用性差,且價格昂貴,國內(nèi)在機器人離線編程仿真領(lǐng)域也進(jìn)行了相關(guān)的研究,但和國外相比仍有一定的差距[1]。

本文利用C#編程語言,基于socket的C/S(客戶端/服務(wù)器)結(jié)構(gòu)以及庫卡編程語言開發(fā)了一種通信模塊和在線運動控制界面,以此在NET框架下對OpenGL圖形庫進(jìn)行調(diào)用,建立機器人三維模型,實現(xiàn)機器人末端軌跡在線運動控制以及運動仿真功能。

1 機器人通信及在線控制界面搭建

1.1 基于以太網(wǎng)的數(shù)據(jù)通信

庫卡的Ethernet KRL可以實現(xiàn)庫卡控制系統(tǒng)和外部系統(tǒng)之間的以太網(wǎng)通信,并支持TCP協(xié)議以及UDP協(xié)議。UDP/IP是無連接的網(wǎng)絡(luò)協(xié)議,在通信過程中可能丟失數(shù)據(jù),因此本文采用面向連接的TCP/IP通訊協(xié)議,并通過C/S模式將PC端作為通信服務(wù)器端,而庫卡機器人控制器作為通信客戶端,通過EthernetKRL以太網(wǎng)通信連接庫卡機器人控制系統(tǒng)上的KLI接口以及PC機的以太網(wǎng)接口,并通過XML文件格式進(jìn)行數(shù)據(jù)的傳輸,從而實現(xiàn)庫卡機器人的在線運動控制[2]。

1.2 服務(wù)器程序

socket是一組接口,主要由IP地址和端口號組成,建立網(wǎng)絡(luò)通信連接需要一對socket,其中一個運行于服務(wù)器端,另一個運行于客戶端。其中服務(wù)器端的socket用于網(wǎng)絡(luò)監(jiān)聽,處于等待連接狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài),一旦有客戶端發(fā)出連接請求,立即響應(yīng)[3-4]。

C#中的socket為網(wǎng)絡(luò)通信提供了可行的方法,針對TCP/IP通信協(xié)議,使用Listen方法監(jiān)聽網(wǎng)絡(luò)狀態(tài),并通過Bind方法指定IP地址以及端口號,收到客戶端連接請求時,使用Accept方法進(jìn)行處理,并且返回一個可與客戶端進(jìn)行數(shù)據(jù)通信的socket,部分代碼如下:

//創(chuàng)建一個新的線程

secondThread = new Thread();

//啟動該線程

secondThread.Start();

//創(chuàng)建socket

Socket handler;

Socket listener;

EndPoint = new IPEndPoint(ipAddress, Port);

//綁定IP地址及端口號

listener.Bind(EndPoint);

//開始對網(wǎng)絡(luò)狀態(tài)進(jìn)行監(jiān)聽

listener.Listen(1);

//綁定收到的連接請求

handler = listener.Accept()

socket命名空間下定義的NetworkStream作為一個網(wǎng)絡(luò)數(shù)據(jù)流通道,可以對數(shù)據(jù)進(jìn)行發(fā)送和讀取,特別是在處理不是很復(fù)雜的字符型數(shù)據(jù)時,傳輸效率很高,部分代碼如下:

//創(chuàng)建一個用于存儲數(shù)據(jù)的字符串

StringBuilder message;

//創(chuàng)建一個網(wǎng)絡(luò)數(shù)據(jù)流對象

NetworkStream stream = new NetworkStream(handler);

//將收到的數(shù)據(jù)添加到字符串

Num = stream.Read();

message.AppendFormat();

//將發(fā)送的數(shù)據(jù)寫入數(shù)據(jù)通道

stream.Write()

1.3 客戶端程序

機器人控制系統(tǒng)作為客戶端,內(nèi)布設(shè)置為KRL語言(庫卡機器語言),并通過EthernetKRL指令進(jìn)行數(shù)據(jù)接收和發(fā)送。另外,庫卡機器人控制器讀取和發(fā)送的數(shù)據(jù)主要為XML文件,所以預(yù)先設(shè)置好一個XML文件結(jié)構(gòu),然后每次發(fā)送數(shù)據(jù)之前,在XML文件的各個節(jié)點中將待發(fā)數(shù)據(jù)添加進(jìn)去,部分指令如下:

//打開連接通道

EKX_Open()

//發(fā)送字符串

EKX_Write()

EKX_WriteLine()

//發(fā)送XML結(jié)構(gòu)數(shù)據(jù)

EKX_Send()

EKX_WriteReal()

//等待要讀取的XML結(jié)構(gòu)數(shù)據(jù)

EKX_WaitForSensorData()

//讀取數(shù)據(jù)

EKX_GetIntegerElement()

//關(guān)閉通道

EKX_Close()

1.4 在線控制界面

機器人控制器與外部系統(tǒng)進(jìn)行通信是實現(xiàn)在線控制的前提,兩者之間通訊系統(tǒng)建立之后,就可以由外部系統(tǒng)定義運動相關(guān)信息,從而對機器人運動進(jìn)行控制。運動相關(guān)信息包括角度空間軸坐標(biāo)、笛卡爾空間坐標(biāo)以及運動方式,如果是圓弧運動還需要給出角度值。這些信息通過C#中的XmlDocument的根節(jié)點以及子節(jié)點來定義,將每一個運動坐標(biāo)點的所有相關(guān)信息都保存在同一個根節(jié)點下,最后生成XML文件并通過連接通道發(fā)送。在機器人控制系統(tǒng)運行客戶端中,若程序接收到由客戶端發(fā)來的數(shù)據(jù),即可搜索XML文件中各個節(jié)點元素獲得運動坐標(biāo)點以及運動方式,從而實現(xiàn)了外部系統(tǒng)對機器人的在線運動控制,機器人運動控制界面如圖1所示。

圖1 機器人運動控制界面

2 工業(yè)機器人運動仿真界面的設(shè)計

OpenGL為跨編程、跨平臺的三維圖形程序接口,其功能強大,且可以方便地調(diào)用底層圖形庫[5]。由于C#開發(fā)環(huán)境中不支持直接對OpenGL進(jìn)行調(diào)用,所以通常需要借助第三方OpenGL開源庫來實現(xiàn)[6]。這些開源庫包括有csgl、SharpGL、OpenTK以及Tao.OpenGL等。其中SharpGL庫支持的OpenGL版本比較高,且安裝配置方便,所以本文利用SharpGL庫對機器人進(jìn)行三維建模,并設(shè)計仿真界面。

在C#開發(fā)環(huán)境中,需要調(diào)用SharpGL.dll、SharpGL.SceneGraph.dll、SharpGL.WinForms.dll三 個 OpenGL動態(tài)鏈接庫。其中SharpGL.dll包含OpenGL的主要對象,并包括了OpenGL所有函數(shù)以及擴(kuò)展內(nèi)容,SharpGL.SceneGraph.dll主要包含了OpenGL中的場景元素,如燈光、材質(zhì)及紋理等,而SharpGL.WinForms.dll則提供了窗體控件,模型構(gòu)建及仿真模擬顯示功能。

對機器人進(jìn)行三維建模過程中,需要在OpenGLControl控件上對以上三個標(biāo)準(zhǔn)事件進(jìn)行編程。在OpenGLInitialized事件中,對光照及材料屬性等進(jìn)行編程;在Resized事件中,對視點變換、模型變換以及投影變換等進(jìn)行編程;在OpenGLDraw事件中對機器人進(jìn)行建模及仿真。其中機器人各關(guān)節(jié)坐標(biāo)系平移以及旋轉(zhuǎn)是通過gl.Translate()以及gl.Rotate()來完成,各坐標(biāo)系之間齊次變換定義如下:

gl.Translate(a,0,0)

gl.Rotate(α,1,0,0)

gl.Translate(0,0,d)

gl.Rotate(θ,0,0,1)

在OpenGL中生成的旋轉(zhuǎn)矩陣計算量很大,因此將各連桿間的齊次變換通過函數(shù)gl.NewList()、gl.EndList()以及gl.CallList()進(jìn)行存儲與顯示。機器人各個連桿進(jìn)行建模時,需要通過函數(shù)gl.PushMatrix()以及gl.PopMatrix()來操作矩陣堆棧,同時對各個桿件進(jìn)行建模以及坐標(biāo)系之間的變換。完成上述步驟后,機器人模型構(gòu)建完成,并以機器人各關(guān)節(jié)角作為控制變量實現(xiàn)機器人的運動仿真,本文所設(shè)計的機器人運動仿真界面如圖2所示。

圖2 運動仿真界面

3 運動仿真及軌跡規(guī)劃

建立機器人運動仿真模型主要以關(guān)節(jié)角為控制變量,并根據(jù)機器人運動學(xué),通過齊次變換得到機器人末端坐標(biāo)系相對于基坐標(biāo)下的位姿。當(dāng)機器人進(jìn)行軌跡規(guī)劃時,需要根據(jù)機器人逆運動學(xué),給定初始點以及終點位置,然后對軌跡進(jìn)行插值,得到一系列中間點位置信息,然后再利用逆運動學(xué)求解方法求出各個中間點對應(yīng)的關(guān)節(jié)角,即可實現(xiàn)離線軌跡運動仿真。本文通過離線軌跡規(guī)劃,對機器人末端執(zhí)行機構(gòu)進(jìn)行矩形軌跡規(guī)劃,得到仿真結(jié)果如圖3所示。

通過給出運動坐標(biāo)信息,利用上述建立機器人控制界面控制機器人運動,庫卡機器人觸發(fā)器可以獲取每段運動路徑中間點關(guān)節(jié)角,利用這些關(guān)節(jié)角信息可以對實際運動軌跡進(jìn)行運動仿真。按機器人控制器返回的參量進(jìn)行實際運動軌跡的仿真,可以得到與規(guī)劃的軌跡相同的結(jié)果,對兩個軌跡的關(guān)節(jié)變量進(jìn)行對比,可以發(fā)現(xiàn)兩者之間的誤差很小,比較結(jié)果如表1所示。

圖3 機器人運動仿真結(jié)果

對于復(fù)雜路徑,可以在matlab中采用機器人工具箱進(jìn)行路徑規(guī)劃,通過運動控制界面將數(shù)據(jù)發(fā)送給機器人控制器控制其運動,并采集其中節(jié)點關(guān)節(jié)角,通過C#中matlab函數(shù)對中間插值點進(jìn)行計算,將關(guān)節(jié)變量作為參數(shù)對軌跡進(jìn)行運動仿真。

4 結(jié)論

本文用C#語言在Visual Studio平臺上開發(fā)了機器人在線控制系統(tǒng),并通過以太網(wǎng)通信實現(xiàn)了機器人控制系統(tǒng)與外部PC的數(shù)據(jù)交換功能,通過服務(wù)器和客戶端程序?qū)崿F(xiàn)了在線控制,使得對機器人編程脫離了現(xiàn)場環(huán)境以及復(fù)雜KRL編程語言的限制。最后利用OpenGL圖形庫建立了機器人模型,開發(fā)了機器人運動仿真界面,以及進(jìn)行軌跡規(guī)劃以及運動仿真,對機器人離線規(guī)劃軌跡及實際運動軌跡進(jìn)行比較,結(jié)果證明了在線運動控制有效性和仿真結(jié)果的正確性。

表1 關(guān)節(jié)參量對比

猜你喜歡
庫卡以太網(wǎng)客戶端
基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設(shè)計與實現(xiàn)
庫 卡(節(jié)選)
庫卡(節(jié)選)
如何看待傳統(tǒng)媒體新聞客戶端的“斷舍離”?
縣級臺在突發(fā)事件報道中如何應(yīng)用手機客戶端
孵化垂直頻道:新聞客戶端新策略
大樞紐 云平臺 客戶端——中央人民廣播電臺的探索之路
談實時以太網(wǎng)EtherCAT技術(shù)在變電站自動化中的應(yīng)用
美的已收購庫卡86.7%股份
淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應(yīng)用