2020年2月19日 星期三

工件語言及工作語言的功能及插件功能設計

DXP或是SVG都是工件語言,它只描述工件的樣子,但沒有說是如何做加工。
機器手動作語言是有加工程序,但它有它自己的語言及函式,和工件語言並不相同。
且各家機器人使用的工作語言也都不相同。
所以MCU製作的機器人就有二套語言,一個是工件語言解析器,另一個是它自己動作用的工作語言解析器。
工件語言解析器分解後變成工作語言格式,這是一般工作。
但現在軟體都流行插件,也就是使用者可以加工作程序。很多軟體會後加工DXP檔,就是要加入一些機器才有的工作行為。
若是沒有將工作語言獨立出來,插件功能就無法成形。
所謂的插件,就是工作語言函式,它由使用者從機器操作界面輸入,然後在指定的工件語言指令中插入。
對於使用者來說是工件語言指令插入,實則是分解成工作語言後才插入,只是使用者看不到工作語言層的狀況下會以為是工件指令插入。

本來是想以巨集方式解決,就是使用文章插入的方式做。
但後來想到有可能要解析工件語言參數的狀況,改成用函式插入,這樣就可以在執行時取得參數做判定。

有了工件語言,也有機會做使用者新加指令的可能。
在解析工件語言,若遇到無法解析指令,就轉跳去工作語言的使用者新增指令掛勾,就有機會利用工作語言去做新指令解析並插入對應函式。

在實際上這個插件功能可以做什麼? 主要用在加工中插入檢查功能。
機器手上除了加工手指外,還有camera手指,工件語言不會使用機器檢查機制,就要用插件來做。
變成加工到一半,可以叫camera進來看,簡言之就是拍照存證。
這樣的機器可以由使用者加檢查點,或是改變部分加工行為。

照顧用機器人工作及需求分析

機器人取代人的工作,個人是認為取代照顧工作最多。
此類工作需求量大,照顧對象固定,可以寫成標準照顧程序。
問題出在辨識能力,先不管需求多少計算力,依辨識反應時間可以應用的需求就不同。
一般檢知仍以camera識別為主,其他環境檢知為輔。
辨識反應時間定義為:輸入新的影像資料,辨別出目標物的狀況,並找到對應的處理行為。
依據反應時間不同,應用的目標就不同。
反應時間級的定義:1分鐘級,表示可以在1分鐘到10分鐘內完成。
若是反應等級為10分鐘級的,可以做為植物照顧用,應用於自動化農場。
若是反應等級為1分鐘級的,可以照顧魚類,應用於自動化水產養殖。
若是反應等級為1秒級的,可以照顧動物,應用於自動化畜牧。
反應到0.1秒級的,可以照顧人。
反應到0.01秒的,可以開車。

所以MCU做機器人再和AI聯合,後面還是有很多事可以做。

2020年2月18日 星期二

Sine等面積計算

A=0~90
B=2/90*A
C=arccos(1-B)
D=sin(C)
C,D畫圖
A為角度
B調整分割數目

機器人座標轉換規劃

主要是幾個工作座標轉換之間的關係。
目前機器人都是吃工件檔案,機器手再輸出。中間其實沒有如此簡單。
因為機器人都是由馬達控制,所以馬達要做加減速控制。
馬達吃的指令其實是移動量/單位時間。
將馬達吃的指令也當成是指令,MCU的角色就是直譯器。
主要是將工件指令一路分解到馬達指令。
工件指令可能是DXF檔一類的,實驗或是模擬也可以用SVG來做。
目前有數個轉換在中間。
1.工件指令轉成工件座標:主要是轉成簡單向量,因為向量圖檔有一大堆高階指令,主要是分解成單一向量座標。
2.媒體座標分割:有時輸出座標過大,可能要做分次輸出,或是和檢知器對位做座標修正。
3. 分割/分檔管理:可以做輸出管理,或是重覆次數管理
4.裝置映射:機器人指尖轉換,因為機器人指尖是可以變換的。加工用的和檢查用的不會在同一個座標上。這個就要套上不同的裝置映射。例如鑽頭和camera可以在同手臂上,但看的位置不同,加工中檢查,可以快速轉換。
5.工區座標轉換:因為加工手指可能可以控制,也有被動控制,在這一階完成轉換。平移式手臂比較好轉換,轉軸式手臂就要解反向機器人運動學矩陣。另外機構座標檢查及保護也在這一層。
6.馬達路徑規劃:向量轉成馬達指令,馬達加減速路徑解析,才可以產出移動量/單位時間的指令列表。

2020年2月5日 星期三

平行編譯實驗

舊式MCU Compiler只能發動單核心執行。想利用多核心平行編譯。
找到可以利用 start指令將make分去新的cmd上去執行。這個可以成功。但合併成一個的make分不了。
另外也無法測平行化的cmd是否全部結束。
後來將編譯最久的make改成使用start /wait指令,就可以順利的接回來編譯並包成hex檔案。

2020年1月21日 星期二

MCU上直譯器的應用

直譯器(Interpreter)在電腦語言上的應用已超過編譯器,但MCU工程師卻沒什麼在用。
主因在於RAM空間不足難以放入實際應用。
MCU大部分應用的RAM都是受限的。它是稀缺資源,而正統語言編譯都是用RAM很多的,二者互斥下,難有發展。
但就算是簡單直譯器,在MCU的應用中,都是很好用的方案,對於動態的事件及實務實驗有很大的幫助。
再來就是個人實務上所使用的及評估的。

終端命令直譯器
用xprintf函式很容易做。也可以轉成各式通信。再加上xmodem傳輸,可以將PC檔案直接對應到MCU內部可以管理的裝置上。
在MCU使用外部儲存上會很好用,不管是用SPI Flash或是SD卡,會很好驗證MCU的工作環境遇什麼。
有時還會看到客戶在操機器,有次從MCU讀回來的log檔中,看到客戶在做開機穩定性測試,它上電一分鐘後斷電,再一分鐘後再次上電,好在STM32有內建RTC,所以時間錄得一清二楚。問題是這種log不是一二筆,而是一整天,所以才會認為客戶在測試。

簡單語言實現
這個要用到的RAM就比較大,對於加工機器來說,常會遇到CNC指令或是其他簡單語言。大部分是用手寫程式做解析,但傳久了,往往也不符合時代(使用者會想要加自己的指令),此時就可以用到compiler-compiler,它可以吃語法解析,免去人工解析及維護的痛苦。
常用的就是flex, bison的組合,使用的RAM還可以控制。

編程於Flash?
前面都是工作做完就結束,沒有程序控制所以無需做編程。但要實現真的語言就有編程再調用,但編程後要存在那,MCU的RAM是有限的,比較沒有問題就是Flash,有無可能在執行後再加程式於flash ROM上,覺得有機會,但實在不想自造語言,光是找可以改的就找了很久。

Forth改造於Flash ROM編程
Forth語言的編程動作很像C巨集。C巨集主要是文字取代,就是找到指定的字,就進入巨集定義。若是遇到巨集定義字,就進行巨集取代。Forth有點不一樣的地方在巨集定義時以函式指標做編程,巨集取代則改成函式指標執行。
它沒有傳統的compile行為,且大部分是單次寫回,所以改成寫入flash是有機會的,因為flash ROM也可以一小筆一小筆寫回。
但要去改forth編程,將原先bit flag write以flash ROM寫回單位取代。不過有小部分功能也有問題,但是用在高階定義上,先不管,了不起變成子集語言。這樣修改後,可以成功,真的可以在未用的flash ROM上添加新的函式。但再來的問題就卡住,以致無法公開。
因為MCU界面受限,只能用串列通信來做,所以PC端一定有終端機,我在上面試用中文做為函式名,它以Big5為編碼(2 byte編碼),程式本體是函式指標這個沒有問題。但用手機終端機連上,發現它丟的是unicode(3 byte編碼),平台問題卡到,暫時先放著了。

MCU可用小型語言
RAM若是更大到1MB(STM32H7系列就有)那就可以放入一般用的小型語言。eLua是最早移入MCU的高階語言,所以lua早就鎖定很久了。但高階語言移入MCU不是沒有優勢,它可以實現從網路直接載入函式庫,就是網路函式庫可以直通MCU,這功能最早實現的就是microPython,也因為網路函式庫直通MCU,使得microPython大為流行。所以傳統MCU工程師一直看不起的直譯器,經由網路函式庫直接對應,改變的MCU直譯器的使用觀感。

2020年1月14日 星期二

STM32免費C,MCU再進化

免費,會造成經濟系統新變化。
STM32也將C變成免費,所以MCU的生態又有新變化。但這個改變不是憑空來的,個人是認為是因應RISC-V的對應行為。
其實免費的MCU C Compiler一直都在,但沒有人整合,不易上手,所以一直沒有流行起來。
這次不同了,由晶片供應商直接供應免費C,看來MCU由ARM一統再次轉成由單一晶片商一統。
C的免費,變成取用C函式庫的障礙會完全消失。再來只剩下電子問題。
在經濟學上的免費,會加速經濟發展。
簡單的模型,障礙如同河,分割二地,二地的物產交換代價大。利潤由特別管道知識的人所獲取。
第一代就是由渡船人取得,對應工程師大約是會電子又能寫組語的人,以及可以設計MCU的人。
後來造橋技術出現,可以造出直接連通的橋,就會變成很方便。
第二代由造橋人收過路費取得,對應工程師大約是會電子又會C的人,因為不用再造基礎運行單位,基本上可以設計MCU的人等於不再有任何優勢。
C的免費,等於沒有過路費,你想會如何?變成只要會C又懂電子的都會進來做生意。生意大爆發。
MCU的使用只要懂電子就行了,因為C是一般人都會的基本技能。
若是C免費是由單一廠商先行發動,又會如何?
等於各大廠商本來都是造橋人,不同的橋大家都因位置不同收不同費用,使用者要精算如何過橋才能省時省錢。現在突然有座橋不收過路費,你想會如何?

再來就要看其他做MCU的廠商如何因應了。基本上非ARM的MCU可以不用考慮了,因為組語維護困難,只能隨時代消失。