999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

工業(yè)機(jī)器人代碼解釋器的開(kāi)發(fā)*

2018-05-05 08:39:02楊曉鈞井孟凱周紹帆
機(jī)電工程技術(shù) 2018年4期
關(guān)鍵詞:指令語(yǔ)義單詞

楊曉鈞,井孟凱,李 朋,周紹帆

0 前言

機(jī)器人語(yǔ)言系統(tǒng)是工業(yè)機(jī)器人與用戶交流的接口,用戶可以借助語(yǔ)言系統(tǒng)以機(jī)器人指令編寫的方式實(shí)現(xiàn)對(duì)機(jī)器人的控制[1]。機(jī)器人語(yǔ)言系統(tǒng)一般包括:機(jī)器人編程語(yǔ)言,代碼編輯器和代碼解釋器。

整個(gè)語(yǔ)言系統(tǒng)的處理過(guò)程為:用戶根據(jù)自己的意圖,按照機(jī)器人語(yǔ)言規(guī)定的格式編寫出機(jī)器人指令,經(jīng)由編輯器輸入編輯得到機(jī)器人源程序,但通過(guò)編輯器輸入的機(jī)器人源程序并不能直接被機(jī)器人后端的運(yùn)動(dòng)控制模塊所理解,需由代碼解釋器翻譯與數(shù)據(jù)處理完成從源程序到中間程序的轉(zhuǎn)換,作為后端運(yùn)動(dòng)控制模塊的輸入[3],控制器調(diào)用軌跡規(guī)劃模塊進(jìn)行插補(bǔ)運(yùn)算,最后送給執(zhí)行機(jī)構(gòu)去控制工業(yè)機(jī)器人的動(dòng)作,如圖1所示。

其中代碼解釋系統(tǒng)連接著機(jī)器人語(yǔ)言系統(tǒng)和控制系統(tǒng),是語(yǔ)言系統(tǒng)最主要的子模塊。它的作用是將用戶編寫的源程序指令翻譯成機(jī)器人控制系統(tǒng)能夠識(shí)別的目標(biāo)指令[2]。本文將以代碼解釋器為主要任務(wù)完成對(duì)機(jī)器人語(yǔ)言系統(tǒng)的開(kāi)發(fā)。

圖1 機(jī)器人語(yǔ)言系統(tǒng)結(jié)構(gòu)圖Fig.1 Structure of the robot language system

在機(jī)器人領(lǐng)域中,通常有專用的機(jī)器人編程語(yǔ)言。不同的工業(yè)機(jī)器人編程語(yǔ)言并不一樣,但是基本的功能是必要的。指令代碼主要以動(dòng)作級(jí)語(yǔ)言AL語(yǔ)言為主體,并在其基礎(chǔ)上進(jìn)行修改作為工業(yè)機(jī)器人的編程語(yǔ)言。不僅具有基本的運(yùn)動(dòng)指令及運(yùn)算指令,還擁有與外部傳感器交互的輸入輸出指令,以及改變操作流程的控制指令,同時(shí)還具有根據(jù)用戶需求添加特定指令的功能,實(shí)現(xiàn)了很好的開(kāi)放性。機(jī)器人程序格式舉例如表1示。

表1 機(jī)器人編程語(yǔ)言指令格式Tab.1 Examples of Robot Programming Language

1 解釋器的運(yùn)行流程

所開(kāi)發(fā)的解釋器系統(tǒng)軟件結(jié)構(gòu)如圖2所示。

圖2 解釋系統(tǒng)軟件結(jié)構(gòu)Fig.2 Structure of the Code Interpreter

本文采用三遍掃描的方式[4]來(lái)實(shí)現(xiàn)解釋器的工作,即各子模塊作為獨(dú)立程序,按步驟依次運(yùn)行。機(jī)器人源程序輸入后,調(diào)用解釋器的詞法分析函數(shù)檢查并轉(zhuǎn)換源程序,輸出為規(guī)定格式的中間代碼1;中間代碼1進(jìn)而輸入到語(yǔ)法分析函數(shù),完成對(duì)源程序語(yǔ)法結(jié)構(gòu)的檢查,并輸出中間代碼2,記錄語(yǔ)句類型信息;然后將中間代碼1、2輸入到語(yǔ)義分析函數(shù),進(jìn)行指令內(nèi)容的檢查,通過(guò)后將被提取信息到符號(hào)表并翻譯成最終的目標(biāo)代碼;對(duì)中途識(shí)別出的非法指令將記錄狀態(tài)并轉(zhuǎn)入相應(yīng)的錯(cuò)誤處理函數(shù)[5]。

2 詞法分析模塊的實(shí)現(xiàn)

詞法分析的主要任務(wù)是識(shí)別出源程序中的各個(gè)單詞,把源程序中的字符轉(zhuǎn)換成一種內(nèi)部形式,遇到識(shí)別不出的符號(hào),要進(jìn)行錯(cuò)誤處理。選用的機(jī)器人語(yǔ)言包括以下幾種單詞符號(hào):(1)關(guān)鍵字,如SUB、OFF、IF等;(2)標(biāo)識(shí)符,如QI0、QD2、KI#3、P1等給定變量名;(3)常量,如整形或浮點(diǎn)型;(4)判斷符以及位置參數(shù)等。詞法分析程序除了識(shí)別單詞外,還輸出該單詞類型,所以為每一個(gè)基本命令字都設(shè)置了標(biāo)號(hào)值與屬性值[6],部分對(duì)應(yīng)關(guān)系如表2。

表2 單詞符號(hào)對(duì)照表Tab.2 Intermediate Format 1

圖3 分離單詞流程圖Fig.3 Lexical Analysis Diagram

分析每行代碼時(shí),識(shí)別單詞分為兩步:先通過(guò)函數(shù)Separword()將各單詞分離出來(lái);然后調(diào)用函數(shù)Recogword()負(fù)責(zé)具體識(shí)別每個(gè)單詞。當(dāng)識(shí)別出單詞后,同時(shí)需輸出并存儲(chǔ)單詞的標(biāo)號(hào)與屬性值,以及所在位置,為此在VC程序中,定義一個(gè)類CWordInfor來(lái)存儲(chǔ)以上信息,該類型具有五個(gè)數(shù)據(jù)成員與兩個(gè)成員函數(shù)。

通過(guò)對(duì)機(jī)器人語(yǔ)言規(guī)則的研究,可以對(duì)每行指令以空格符或判斷符為界來(lái)劃分單詞,為此,設(shè)計(jì)分離單詞的流程圖,如圖3,按照規(guī)劃好的流程圖即可設(shè)計(jì)分離單詞的算法。當(dāng)單詞完成分離之后即可由Recogword()函數(shù)進(jìn)行識(shí)別工作,單詞識(shí)別后,輸出單詞的同時(shí)建立CWordInfor類的對(duì)象,保存對(duì)應(yīng)單詞的標(biāo)號(hào)值與屬性值等相關(guān)信息用于后續(xù)的語(yǔ)法分析處理。對(duì)于無(wú)法識(shí)別的單詞將進(jìn)行特殊賦值,并轉(zhuǎn)入錯(cuò)誤處理。

3 語(yǔ)法分析模塊的實(shí)現(xiàn)

語(yǔ)法分析的任務(wù)是將輸入的單詞流進(jìn)行組合,按照特定的語(yǔ)法規(guī)則去分析源程序的語(yǔ)法結(jié)構(gòu)并檢查語(yǔ)法錯(cuò)誤,當(dāng)發(fā)生錯(cuò)誤時(shí)輸出相應(yīng)的錯(cuò)誤信息,檢查無(wú)誤則輸出合法語(yǔ)句[7]。

圖4 語(yǔ)法分析流程圖Fig.4 Syntax Analysis Diagram

本文采用的機(jī)器人語(yǔ)言指令結(jié)構(gòu)比較固定,所以可以采用將單詞的標(biāo)號(hào)值與規(guī)范的標(biāo)號(hào)值相匹配的方法進(jìn)行語(yǔ)法分析。首先建立規(guī)范指令的數(shù)字串集合,稱為序列號(hào)表。將語(yǔ)法結(jié)構(gòu)正確的指令中所有的單詞標(biāo)號(hào)值連成數(shù)字串,作為序列號(hào)存入序列號(hào)表中;當(dāng)處理一行指令時(shí),將指令中所有單詞的標(biāo)號(hào)值提取并連為數(shù)字串,通過(guò)matc_nu1()函數(shù)與序列號(hào)表中的序列號(hào)進(jìn)行查詢,查詢到相同的數(shù)字串則表明匹配成功。若匹配成功,則代表語(yǔ)法結(jié)構(gòu)正確;若失敗,則對(duì)該行指令進(jìn)行錯(cuò)誤處理。例如“MOVJ P2 VJ=50 PL=0”這條指令中所有單詞按順序組合出的序列號(hào)為“51359266026”,分析首單詞“MOVJ”的標(biāo)號(hào)值為51,則進(jìn)入MOVJ指令的序列號(hào)表進(jìn)行匹配查詢。對(duì)應(yīng)序列號(hào)表為:{"51359286026","51359266026","51360265926", "51360265928", "5135926", "5135928"},根據(jù)查詢對(duì)比,與表中第二項(xiàng)序列號(hào)匹配,證明該行指令語(yǔ)法格式正確。可進(jìn)行中間代碼2的生成,進(jìn)入語(yǔ)義分析模塊的處理。語(yǔ)法分析模塊流程如圖4所示。

4 語(yǔ)義分析與中間代碼生成模塊

語(yǔ)法分析是檢查句子的結(jié)構(gòu),語(yǔ)義分析則是檢查句子的意思。因此語(yǔ)義分析的任務(wù)為對(duì)源程序中每行指令的具體意思進(jìn)行剖析,檢查指令中的靜態(tài)語(yǔ)義錯(cuò)誤。若同時(shí)滿足語(yǔ)法層面的“形式”正確和語(yǔ)義層面上的“內(nèi)容”正確,則指令無(wú)誤,可翻譯成等效的中間代碼。因此在語(yǔ)義分析和中間代碼生成階段,解釋系統(tǒng)要做的工作是進(jìn)行靜態(tài)語(yǔ)義檢查和翻譯[8]。

語(yǔ)義分析的方法主要依照編譯原理中的語(yǔ)法制導(dǎo)翻譯的思想。即對(duì)每一種指令類型都編制其各自的語(yǔ)義子程序,其中包括語(yǔ)義檢查模塊和目標(biāo)代碼生成模塊。當(dāng)用語(yǔ)法分析匹配出一條指令時(shí),立即調(diào)用相應(yīng)的語(yǔ)義子程序進(jìn)行處理[9]。基本流程如圖5所示。

由于在前面詞法分析模塊中,將每個(gè)單詞的類型與屬性值等各項(xiàng)信息已提取為類CWordInfor的對(duì)象,作為中間代碼1;又經(jīng)過(guò)語(yǔ)法分析模塊,識(shí)別出每行指令的種類等信息,并保存在類CWordInfor的對(duì)象中,作為中間代碼2。因此可將中間代碼1與中間代碼2作為語(yǔ)義分析模塊的輸入,根據(jù)中間代碼2中指令類型及其參數(shù)信息,調(diào)用相應(yīng)的語(yǔ)義動(dòng)作:通過(guò)該指令的靜態(tài)語(yǔ)義檢查模塊對(duì)中間代碼1中信息進(jìn)行查錯(cuò)與變量表的填充,然后通過(guò)翻譯子程序模塊對(duì)中間代碼1進(jìn)行信息的提取[10],完成中間代碼的輸出。語(yǔ)義分析檢查無(wú)誤后,進(jìn)入翻譯模塊,需要對(duì)當(dāng)前指令進(jìn)行信息的提取,以生成中間代碼,在這里采用對(duì)每種指令類型創(chuàng)建一種數(shù)據(jù)結(jié)構(gòu)的形式,指令的參數(shù)作為數(shù)據(jù)結(jié)構(gòu)的成員,定義在頭文件Struct.h中。例如對(duì)運(yùn)動(dòng)指令MOVJ,其數(shù)據(jù)結(jié)構(gòu)定義為:

typedef struct Traj_linear_move

{

int type; //命令類型

圖5 語(yǔ)義分析流程圖Fig.5 Semantic Analysis Diagram

EEPose end; //目標(biāo)點(diǎn)

double maxvel;//速度

int feed_mode; //平滑度

}Traj_joint_move;

對(duì)運(yùn)算指令A(yù)DD、SUB、MUL、DIV等,其數(shù)據(jù)結(jié)構(gòu)定義為:

typedef struct Cal_asmd

{

int type; //命令類型

int caltype;//運(yùn)算符類型

Vari var1;//操作數(shù):變量1

Vari var2;//操作數(shù):變量2

}Cal_asmd;

其中Vari作為變量類型,用于表示指令中各變量,包括整形變量QIn、浮點(diǎn)型變量QDn、布爾型變量QBn,以及IO接口KI#(n)、KO#(n)等。定義的數(shù)據(jù)結(jié)構(gòu)為:

typedef struct Vari

{

int vtype;//變量類型

union{

int num; //變量標(biāo)號(hào)

double value;//常量數(shù)值

}vdata;

}Vari;

將各行指令創(chuàng)建為相應(yīng)的數(shù)據(jù)結(jié)構(gòu)對(duì)象后,即可將其提取在消息列表中,定義在頭文件Struct.h中的消息列表的數(shù)據(jù)結(jié)構(gòu)為:

struct CODE_INTERP_LIST_MSG

{

int line_number;//指令行號(hào)

int cmd_type; //命令類型

union{ //各指令對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)

Traj_circular_move tcmd;

Traj_linear_move tlmd;

IF_Condition ic;

Traj_joint_move tjm;

Ctl_begin cb;

……

}cmd_data;

};

其中數(shù)據(jù)成員line_number表示當(dāng)前指令所在行的位置,cmd_type表示所存儲(chǔ)的指令類型,聯(lián)合體cmd_data則用于存儲(chǔ)當(dāng)前指令的數(shù)據(jù)結(jié)構(gòu)對(duì)象。這樣,創(chuàng)建的消息列表即為當(dāng)前行生成的中間代碼。

5 實(shí)例測(cè)試

進(jìn)行解釋系統(tǒng)的實(shí)例測(cè)試,通過(guò)在基于MFC開(kāi)發(fā)的程序編輯器中編寫機(jī)器人的運(yùn)動(dòng)測(cè)試指令,經(jīng)過(guò)代碼解釋器最終生成中間代碼以驗(yàn)證機(jī)器人語(yǔ)言系統(tǒng)尤其是代碼解釋系統(tǒng)的正確性。測(cè)試指令在程序編輯器中輸入如圖6所示。

圖6 測(cè)試指令輸入Fig.6 The Testing Code

經(jīng)過(guò)解釋系統(tǒng)后生成的中間代碼如圖7所示。

可以證明,本文開(kāi)發(fā)的代碼解釋器可以準(zhǔn)確地將機(jī)器人指令翻譯輸出為規(guī)定的中間代碼。代碼執(zhí)行過(guò)程中,當(dāng)用戶給定的機(jī)器人運(yùn)行軌跡為連續(xù)直線形移動(dòng)時(shí),有的目標(biāo)點(diǎn)并不需要精確移動(dòng)到,此時(shí)為使機(jī)器人平穩(wěn)運(yùn)行,可以采用貝塞爾曲線路徑對(duì)原始路徑在目標(biāo)點(diǎn)處進(jìn)行平滑擬合,降低機(jī)構(gòu)的沖擊。因此連續(xù)型軌跡可規(guī)劃為精確定位的插補(bǔ)和軌跡逼近的插補(bǔ)。

圖7 目標(biāo)代碼輸出結(jié)果Fig.7 The Object Code

這在機(jī)器人運(yùn)動(dòng)指令中體現(xiàn)為位置精度等級(jí)的選取,即在指令MOVL的參數(shù)中,PL的值代表過(guò)渡路徑的平滑度,PL設(shè)定值越大,則過(guò)渡曲線越平緩,但接近原始路徑的程度越低。當(dāng)PL設(shè)為0時(shí),機(jī)器人將按規(guī)劃路徑精確移動(dòng)而不進(jìn)行過(guò)渡曲線的擬合。對(duì)于精度的劃分,如圖8所示,過(guò)渡點(diǎn)Q1與Q2的選取遵循λ∈[0,1]的規(guī)則,其中λ作為精度系數(shù),取值大小直接影響過(guò)渡。精度等級(jí)對(duì)照如表3所示。

表3 精度等級(jí)對(duì)照表Tab.3 Precision control table

插補(bǔ)器采用了直線段的五次方多項(xiàng)式軌跡插補(bǔ)函數(shù),四階貝塞爾曲線路徑平滑函數(shù)及曲線段的五次多項(xiàng)式軌跡插補(bǔ)函數(shù)。在插補(bǔ)器中經(jīng)軌跡插補(bǔ)后的路徑點(diǎn)擬合如圖9所示。

圖9 路徑點(diǎn)插值結(jié)果Fig.9 The results of path interpolation

6 結(jié)論

圖8 位置等級(jí)規(guī)劃Fig.8 Position Levels

本文在工程需求分析的基礎(chǔ)上,以Delta機(jī)器人為工作平臺(tái),重點(diǎn)開(kāi)發(fā)了機(jī)器人軟件模塊中的語(yǔ)言系統(tǒng)的解釋模塊。選用AL機(jī)器人語(yǔ)言并擴(kuò)充作為用戶輸入語(yǔ)言,基于MFC設(shè)計(jì)了機(jī)器人程序編輯器,并基于C語(yǔ)言重點(diǎn)開(kāi)發(fā)了機(jī)器人代碼解釋系統(tǒng),通過(guò)三次掃描依次調(diào)用詞法分析程序、語(yǔ)法分析程序、語(yǔ)義分析及中間代碼生成程序以完成源指令到目標(biāo)指令的翻譯。經(jīng)指令測(cè)試,驗(yàn)證了各模塊運(yùn)行的正確性。

參考文獻(xiàn):

[1]彭慧,尹朝萬(wàn).機(jī)器人語(yǔ)言研究[J].機(jī)器人,1991,13(5):36-41.

[2]張瑋光.面向復(fù)雜作業(yè)的微操作機(jī)器人編程語(yǔ)言[D].天津:南開(kāi)大學(xué),2008.

[3]黃永華.機(jī)器人語(yǔ)言編程系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].南京:東南大學(xué),2004.

[4]王浩,謝存禧.工業(yè)機(jī)器人解釋器的研究[J].機(jī)械設(shè)計(jì)與制造,2010(3):160-161.

[5]郭顯金.工業(yè)機(jī)器人編程語(yǔ)言的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2013.

[6]別衛(wèi)春,朱志紅,葉伯生,等.HNC-IR機(jī)器人語(yǔ)言解釋系統(tǒng)的研究與實(shí)踐[J].機(jī)電一體化,2000,6(3):27-30.

[7]王偵,馬旭東.工業(yè)機(jī)器人語(yǔ)言解釋器的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2015,28(3):6-8.

[8]伍春香.編譯原理[M].北京:清華大學(xué)出版社,2001.

[9]熊巍.機(jī)器人編程語(yǔ)言解釋器的研究與開(kāi)發(fā)[D].北京:北京工業(yè)大學(xué),2005.

[10]LOUDEN KENNETH C.編譯原理及實(shí)踐(計(jì)算機(jī)科學(xué)叢書)[M].北京:機(jī)械工業(yè)出版社,2011.

猜你喜歡
指令語(yǔ)義單詞
聽(tīng)我指令:大催眠術(shù)
語(yǔ)言與語(yǔ)義
單詞連一連
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
看圖填單詞
“上”與“下”語(yǔ)義的不對(duì)稱性及其認(rèn)知闡釋
認(rèn)知范疇模糊與語(yǔ)義模糊
坐標(biāo)系旋轉(zhuǎn)指令數(shù)控編程應(yīng)用
最難的單詞
主站蜘蛛池模板: 久久精品人人做人人爽97| 91综合色区亚洲熟妇p| 国产在线视频自拍| 91视频99| 国产精品一区二区在线播放| 日本一区二区不卡视频| 国产精品视频免费网站| 国产精品美人久久久久久AV| 在线观看无码av五月花| 夜夜高潮夜夜爽国产伦精品| 无码内射在线| 日韩精品无码免费一区二区三区 | 亚洲欧洲国产成人综合不卡| 91原创视频在线| 波多野结衣二区| 免费va国产在线观看| 亚洲无码日韩一区| 亚洲午夜天堂| 久久毛片免费基地| 国产精品.com| 国产在线观看99| 亚洲视频免费在线看| 狼友av永久网站免费观看| 欧美天堂久久| 2020久久国产综合精品swag| 亚洲不卡av中文在线| 午夜小视频在线| 日本一区二区不卡视频| 色综合成人| 青青草a国产免费观看| 欧美一级在线播放| 片在线无码观看| 精品国产电影久久九九| 91美女视频在线| 91在线精品免费免费播放| av大片在线无码免费| 日韩国产亚洲一区二区在线观看| 国产va欧美va在线观看| 国产在线精彩视频二区| 99久久国产精品无码| a毛片在线播放| 99久久精品国产精品亚洲| 欧美亚洲国产视频| 一级片免费网站| 亚洲午夜福利精品无码不卡 | 国产国产人免费视频成18| 一级毛片免费观看久| 天堂岛国av无码免费无禁网站| 久久黄色一级片| 97se亚洲综合在线韩国专区福利| 国产白浆视频| 试看120秒男女啪啪免费| 91口爆吞精国产对白第三集| 毛片网站在线看| V一区无码内射国产| 无码精品国产VA在线观看DVD| 午夜老司机永久免费看片| 美女一区二区在线观看| 中文字幕无码电影| 久久亚洲高清国产| 激情综合网址| 欧美精品伊人久久| 亚洲有无码中文网| 国产一区二区精品高清在线观看| 国产永久在线观看| 成人年鲁鲁在线观看视频| 婷婷色一区二区三区| 在线看片免费人成视久网下载| 午夜精品福利影院| 97精品久久久大香线焦| 国产成人久久777777| 人妻精品全国免费视频| 国产杨幂丝袜av在线播放| 在线欧美a| 永久在线精品免费视频观看| 国产情侣一区二区三区| 国产在线拍偷自揄观看视频网站| 亚洲国产成熟视频在线多多| 久久91精品牛牛| 嫩草影院在线观看精品视频| 丝袜高跟美脚国产1区| 国产女人爽到高潮的免费视频|