2018-3-13 12:02 上傳
點(diǎn)擊文件名下載附件
工作驗(yàn)收中提到的問(wèn)題:
(1)如何編寫blocky自定義塊(對(duì)應(yīng)自定義塊在blocky里面js的位置以及用法)。(2)blocky自定義快如何跟pythonAPI里面的函數(shù)聯(lián)系起來(lái)。(3)如何編寫pythonAPI。(4)blocky塊生成的python文件是怎么樣一種機(jī)制(Browser.java這個(gè)類有什么作用)。(5)點(diǎn)擊執(zhí)行按鈕的時(shí)候,后臺(tái)做了什么操作(6)項(xiàng)目中Java是如何去調(diào)用python的,需要注意什么?(7)項(xiàng)目中pythonDemo.py有什么作用?個(gè)人總結(jié)對(duì)以上問(wèn)題的回答:
前言:以下內(nèi)容是我針對(duì)與上面驗(yàn)收問(wèn)題的總結(jié)和回答,因某些地方文字描述可能不好表達(dá)出本意,所以會(huì)以截圖加上文字說(shuō)明進(jìn)行概括,希望大家能將我所描述的以及圖中標(biāo)記的內(nèi)容或者文字仔細(xì)查看,避免漏掉一些細(xì)節(jié)以免造成困擾!
另外,因?yàn)閷?duì)代碼部分,個(gè)人理解有所不同,如果有說(shuō)的不對(duì)的地方,或者理解錯(cuò)誤的地方,請(qǐng)指出并說(shuō)明,萬(wàn)分感謝!
(1)如何編寫blocky自定義塊(對(duì)應(yīng)自定義塊在blocky里面js的位置以及用法)。編寫自定義塊,通常編寫一個(gè)自定義塊,首先是看BrobotAPI里面的分類里面是否需要定制一個(gè)自定義塊,根據(jù)給出的分類里面塊的描述,找到對(duì)應(yīng)的嵌入式端的接口,根據(jù)接口了解這個(gè)里面需要傳入哪些參數(shù),以及這個(gè)塊的作用,這樣就決定了這個(gè)塊長(zhǎng)什么樣,需要傳幾個(gè)參數(shù),以及是手動(dòng)輸入值還是可以選擇值,或者兩者并存! 當(dāng)有了接口之后,我需要在E:\eclipse\workplace\BRobotAPP\pythonFile\blocklyAPI.py中將接口通過(guò)python語(yǔ)言進(jìn)行封裝, 例如下圖是對(duì)門型運(yùn)動(dòng)的接口的封裝

這個(gè)就是根據(jù)接口封裝的pythonAPI.py文件,當(dāng)中的每個(gè)語(yǔ)句我都有加以說(shuō)明, 當(dāng)然其他的方法也都跟這類似,只是有的方法因?yàn)榭紤]到安全因素,需要在方法前面加上一系列的判斷,確保判斷條件通過(guò)后才能執(zhí)行方法
有了pythonAPI.py封裝了方法,那么就可以編寫Blockly自定義塊了,編寫自定義塊是個(gè)比教麻煩的步驟,因?yàn)?/strong>Blockly是谷歌的一個(gè)插件,所以編輯Blockly塊就要用到谷歌封裝的工具了,這個(gè)工具是用谷歌瀏覽器打開E:\eclipse\workplace\BRobotAPP\blockly\googleDemo\blockly-master\demos\blockfactory\index.html這個(gè)頁(yè)面,通過(guò)這個(gè)頁(yè)面就可以編寫Blockly塊了!
上圖就是編輯一個(gè)自定義塊的頁(yè)面了,而塊就是這樣定義出來(lái)的,至于你希望塊長(zhǎng)成什么樣,就完全靠圖中左側(cè)的代碼進(jìn)行調(diào)整, BrobotAPI中的每一個(gè)塊就是這樣定義出來(lái)的!
而Blockly所對(duì)應(yīng)的js就是 E:\eclipse\workplace\BRobotAPP\blockly\googleDemo\blockly-master\tests\generators目錄下面的myBlockly.js 和myBlocklyPython.js文件了, myBlockly.js中的文件是不需要改動(dòng)的,直接復(fù)制上圖中的右邊中間的那地方的代碼就行了, 就是這個(gè)圖片里的內(nèi)容

而myblocklyPython.js中的代碼就要改動(dòng)了,如圖

在所有的步驟完成后,還需要在index.html中添加上對(duì)應(yīng)的<Blockly>標(biāo)簽

這樣 一個(gè)完整的Blockly塊就編寫完成了!
(2)blocky自定義快如何跟pythonAPI里面的函數(shù)聯(lián)系起來(lái)。這個(gè)Blockly塊跟pythonAPI里面函數(shù)的聯(lián)系就是在定義塊的時(shí)候

這個(gè)圖右下角對(duì)應(yīng)的就是myblocklyPython.js文件這個(gè)文件中的紅框里面就是對(duì)應(yīng)pythonAPI里面的方法了


對(duì)應(yīng)的通過(guò)Blockly頁(yè)面中的js方法會(huì)拼接成這樣的一個(gè)語(yǔ)句,也就是調(diào)用PythonAPI里面方法的語(yǔ)句,并且里面有參數(shù),你可以用這個(gè)語(yǔ)句和pythonAPI中的方法進(jìn)行對(duì)比!

(3)如何編寫pythonAPI。編寫PythonAPI,是需要對(duì)照著為知筆記中的Brobot函數(shù)接口.md來(lái)進(jìn)行編寫,舉個(gè)例子就拿 向嵌入式端發(fā)送激光雕刻的圖片的路徑數(shù)據(jù) 這個(gè)接口來(lái)說(shuō)吧 它的接口是
int SendEngravePathData(unsigned char laserlevel, unsigned char pathtype, float goalcoor[3])
首先 int 是這個(gè)方法的返回值,
SendEngravePathData 這個(gè)是方法名
括號(hào)里面的是參數(shù) laserlevel 是表示激光功率的等級(jí),它是char型,所以在pythonAPI中需要將它轉(zhuǎn)為char型
Pathtype 參數(shù)表示的是路徑的類型,也是char型,所以也需要將它轉(zhuǎn)為char型
goalcoor[3] 參數(shù)分別對(duì)應(yīng)的就是傳進(jìn)去的坐標(biāo)點(diǎn)X,Y,Z 因?yàn)樗且粋(gè)數(shù)組,所以我們寫pythonAPI時(shí)候需要將它轉(zhuǎn)成python語(yǔ)言的數(shù)組格式
下面就是pythonAPI中封裝的截圖

(4)blocky塊生成的python文件是怎么樣一種機(jī)制(Browser.java這個(gè)類有什么作用)。event.js就是相關(guān)事件,這里面有很多事件,這個(gè)也是動(dòng)態(tài)產(chǎn)生python代碼和xml代碼的文件,其中alert()事件中時(shí)python代碼,confirm中時(shí)xml代碼confirm()事件,
Field_textinput.js中,鍵盤按下事件中,動(dòng)態(tài)生成python代碼和xml代碼。
這個(gè)是谷歌里面封裝的生成python文件的機(jī)制! 在工作頁(yè)面中我們選擇blockly塊生成python代碼,這里我們用到的是Browser.Java這個(gè)類里面定義的方法.
在這個(gè)類里面我們首先是需要通過(guò)絕對(duì)路徑獲得用戶目錄里面路徑

有了路徑之后我們需要拼接路徑加載index.html地址

下面是通過(guò)拼接生成python的頭文件

頭文件拼接完成后動(dòng)態(tài)獲取python的代碼,并創(chuàng)建python文件

這樣python文件就生成了.
Browser.java這個(gè)類有什么作用
這個(gè)類的作用. 主要作用就是上面介紹的通過(guò)io的讀取路徑,定義方法創(chuàng)建出python文件,然后定義里面的一些js響應(yīng)事件,生成項(xiàng)目的xml文件以及做一些關(guān)于用戶操作界面的彈窗和響應(yīng)
(5)點(diǎn)擊執(zhí)行按鈕的時(shí)候,后臺(tái)做了什么操作點(diǎn)擊執(zhí)行按鈕時(shí)候,后臺(tái)先會(huì)判斷你是否連接機(jī)械臂,如果沒(méi)有連接,會(huì)提示請(qǐng)先連接機(jī)械臂,如果已經(jīng)連接則會(huì)判斷你當(dāng)前是否選擇了要運(yùn)行的demo,有了demo就可以加載到demo對(duì)應(yīng)的python腳本文件,并逐條運(yùn)行腳本中的python語(yǔ)句,在語(yǔ)句的前面因?yàn)槊織l都添加了一個(gè)判斷dll是否正確的判斷,如果BrobotCheck()中的腳本有問(wèn)題的話則也會(huì)終止機(jī)械臂的操作,如果語(yǔ)句沒(méi)有錯(cuò)誤,則機(jī)械臂會(huì)按照腳本上的坐標(biāo)或者其他指令進(jìn)行運(yùn)動(dòng),直至完成最后一條指令,或者有人點(diǎn)擊了終止按鈕!
(6)項(xiàng)目中Java是如何去調(diào)用python的,需要注意什么?Java中調(diào)用python,主要是通過(guò)在JavaCallPython.java類中調(diào)用cmd然后通過(guò)cmd執(zhí)行python代碼,所以如果想要執(zhí)行python代碼必須要安裝python環(huán)境

這其中需要注意的是首先需要配置好python的環(huán)境,其次就是Process pr = Runtime.getRuntime().exec("python " + url3); 這個(gè)當(dāng)中括號(hào)里面的python后面必須要加上一個(gè)空格, 其三就是url的路徑是要保證正確的,如果路徑錯(cuò)誤,或者找不到python文件的話那么肯定運(yùn)行會(huì)出現(xiàn)問(wèn)題的
(7)項(xiàng)目中pythonDemo.py有什么作用?我們項(xiàng)目中生成的文件為python.py文件,而pythonDemo.py文件是修改串口之后的pythonDemo文件,這個(gè)文件是我們Java調(diào)用cmd進(jìn)行加載的python腳本文件.