機器視覺小教室 Aurora Vision Studio 大家一起玩 3D【16】手臂加工路徑 (塗/磨/切/焊) 生成原理教學 feat. MechMind 梅卡曼德 3D結構光相機

弘翔精密科技股份有限公司
1粉絲
2024年10月14日
機器視覺小教室 大家一起玩3D 線上教學網頁
https://www.urvision-tw.com/article_detail/26.htm
加工路徑英文為Tooling Path,所謂的加工,泛指塗膠、研磨、切銷、焊接等,利用機器手臂進行加工製程或工藝的動作。
雖然一些要求精密的工藝也許會針對某些局部特徵有特殊的要求,需要特別去計較及規畫,但是某些工藝,例如大面積的噴膠或研磨,對精度沒有嚴格的要求,反而是常常需要少量多樣化的生產。
於是,就有所謂的【利用3D點雲外輪廓立即生成路徑】的需求,需要能掃出點雲,然後根據外輪廓形狀,把點雲內部曲面塗好塗滿。
此即為【萬物Tooling Path】的原由,本篇利用Zebra Aurora Vision Studio搭配MechMind梅卡曼德結構光3D相機,簡介路徑生成的原理教學。
我們接續手眼矯正
接續這個手眼矯正後
我們再繼續探討一個叫
Tooling Paths
就是加工路徑的一個應用
Tooling是一個Tool
Tool就是工具
Tooling Paths
Generation
Tooling Paths Generation
這個應用非常的廣泛
它可以是塗膠
或者說研磨
或者焊接各式各樣的工序
依據不同的工序
或者說製程
它可能會有
一些特殊的需求
我們這邊探討比較泛用的
我先把這個膠色板拿走
然後我放一個
圓盤
放一個圓盤
我們現在
拍完了以後
把這個電源
把它投影到地板的座標
我們現在有一個目標
我們是一個
剛才已經提過這是泛用型
我希望找到這個邊框
反正它只要是一個
實心的幾何
我們就要在這個範圍裡面
產生一個
圍繞這個邊框
然後去把它布滿
看你是繞圈的還是走工字型
不挑這個東西的形狀
它是圓的也好方的也好
奇怪的多邊形也好
反正它只要能長滿這個路徑
然後讓這個機器手臂
可以去針對這個路徑去做塗膠或圓模
的這個動作
那這個就是泛用型
我們用一個叫萬物
塗的萬物塗膠
反正你來什麼
我就塗什麼
反正有塗就好
少量多樣化的這個方式
我看到了
反正我知道它個人長這樣
我就大概把它這樣塗一塗
然後這個之前在比較早期的話
是有提過說
我們已經知道一個東西
就是那個
小叮噹的那個東西
我們已經知道這個東西
那我事先在它身上找好路徑
那它如果歪這一點
我只是定位到它
我把這個路徑固定的把它貼上去
那這種的話就適合說
我這個弓箭它其實是固定的形狀
那我可以把它做一個
matching或者說匹配的這個動作
把這個固定的
已經既定設計好的這個模式
把它貼到上去
可是現在不一樣就是說
我的形狀我可能不是固定的
我這次放的是圓盤
那可能我等一下
我馬上拿盒子過來
再等一下我可能是拿這個紙鞋
那至於這個應用要怎麼做呢
所以我們就先暫停這個
就把程式停下來
那第一個動作一定是
我要把這個弓箭把它取出來
那這個弓箭
我們已經用這個transform pose
把這個弓箭放到這個地板
所以這邊有一個共同的課程
我想要把這個底座、地板把它砍掉
砍掉我們就用swap
那swap有很多種選項
就是上下線、範圍
那因為我們已經把它擺正
所以用上下線的
那這個Z座標是多少
就是負的
然後這個上面的東西都是正的
我可以用負1
或是負2
把它丟上去
切換成不同的顏色
這個我放到X值
應該要用Z值
Z值負2
所以顯示層橘色的部分是
負2、超過負2
然後藍色的這個是
低於負2的
那這個crop完了以後
我還要把它轉回去
為什麼要轉回去
因為我們等一下要用到這個
萬物不交路徑的這個規劃
它是基於這個相機座標機型
所以我把它切下來
我還要把它丟回去
丟回去我們就再來一次transform
再把它transform回去
這個先參數把它提起來
這樣比較省空間
接上去了以後
把這個校正把它拉回來
這時候我們就
剛才轉過來用true
所以彈回去就用false
然後改成不同的顏色
這樣我們就切割完了
因為你不能直接在相機座標機切
因為你怎麼知道要切哪裡
所以我們先把它丟到地板上
丟到地板上切乾淨了
再把它丟回去
我們還是用其他的工件
稍微試試一下
所以大致上是有切成功
這個斜底框薄一點
我們可以再調
53
這個空洞不要太多就好
這個沒有關係
把它丟回去
就要用到這個
產生這個固定pass這個演算法
這個演算法包已經被載進
所以直接把它拉過來
這個叫做detect
point out border pass
所以它需要有一個
matching point out
那目前這邊沒有
所以這個我們先藏著
我們要先準備
所以我們要把這個東西
轉成這個格式
要怎麼轉
先把這個資料格式轉成
matching point out
我們會用到這個叫
make point out
from 3D grid
那這個工具是做什麼
將從你的3D grid
以及對應的文理2D grid
合成產生matching point out的結構
那這個結構
它除了可以保持3D點
也可以保持八向亮
當然顏色資訊不是必要的
我們把這個轉過來
那這個image就是2D貼比
因為我們沒有用到
這個2D貼比我們不用
所以就先不要理它
轉完了以後
接下來就做這個降產量
因為這個資料
我們要做一個萬物的固定pass
所以不需要這麼細的資料
大概就好
那這個降產量
它也是matching point out
所以直接接過來
那降多少
我們來看一下降產量的效果
這個按右鍵點過來
可以看到point的字是它原始的
matching point out是不能限制的
來看它的節點
把這個節點把它修出來
所以可以看到說
橘色的部分是原始的解析度
所以
換成綠色是它的節點
節點就是間隔的密度
所以這個是間隔的密度的資料
因為我們等一下要算這個八向亮
所以我們不需要去算太密
因為太密沒有用
這個可以隱藏起來
接下來就是要算八向亮
八向亮叫SMA
把它接過來
那這邊要給一個叫SMA的半徑
那你如果不想要
這個八向亮不想要隨著
裡面這些奇奇怪怪的紋路
這樣子亂飄的話
我們就可以把這個SMA
所以也是這個半徑
它預設的這個
那就可以把它調大
等一下我可以示範一下這個效果
所以我們來看一下八向亮
八向亮其實是沒辦法顯示的
所以我們要去動用一個叫做Vigilance
Vigilance Point Cloud Normal
所以把已經帶有
八向亮的Point Cloud把它連過來
然後Vigilance Point Cloud Normal
然後要顯示的尺度是多長
我們先用Vigilance
把這個Normal秀上去
你就可以看到這個點子身上長蠻多的毛毛
毛毛在長長
這些毛毛
它都是朝下的
我們想要塗的是這個
這個東見它這個裡面
塗這個裡面
所以我們不希望這個八向亮
我們不希望八向亮往這個地方長
我們是希望往這個下面
所以它這個八向亮會往這個地方下長
那什麼時候會長長錯呢
我們來看一下這邊有一個Normal Up
Normal Z Up
預設的是Force
因為假設你就是在相機坐標處
這邊長
相機坐標的Z是朝上面
所以它的Normal Z Up是Force
這個叫做Up
所以你的Normal是跟Up是相反
Normal基本上是朝這邊
所以是Force
那你如果改成True的話就會長到上面
對
這個東見是處在哪個坐標處
那我們是在相機坐標處
所以我會讓這個八向亮
朝裡面
這邊再看到
剛纔有提到那個半徑
可以看到說
可以看到這邊有一個紋路
這個紋路可能是八向亮沿著這個紋路
忠實的沿著這個紋路
它本來朝這邊然後又朝右邊又朝下面
所以我如果把這個半徑把它調大
調大以後它會比較平均一點
這個時候
我不需要一直看知道它有伸出來
八向亮這個顯示可以關掉
這樣子這個點就帶了八向亮
那我們就可以拿來
開始來用這個玻璃Patch的這個工具
所以現在就把這個點把它接過來
接過來
那接過來以後它這邊會有一些參數
有一個參數
那最主要的參數其實是這個地方
這邊有一個Patch Offset
它是一個矩陣
你可以設很多組
那一個Patch Pitch Size
目前是Offset是5然後Pitch Size是10
那是什麼意思
我們把它秀出來看一下
它秀出來是一個Patch 3D
Patch 3D也是不能播上去
它是不能顯示的
但是你可以按右鍵轉成Segment
Segment是可以顯示的
這個是
因為它是兩個
它是兩個矩陣
兩個矩陣
然後我們要先把它融合成一個矩陣來顯示
融合成一個矩陣
這個工具叫Blank
Reactant Await
也叫Segment
這樣就變成一個矩陣
所以它算出來就是說
綠色的這個
綠色的這條框框
這個框框
有點雜訊
我先把它過濾一下
我們還要再加一個叫Remove
過濾雜訊的功能
所以我們這個
再過濾一下雜訊
綠色的是一個
這個是它的外包圍輪廓
外包圍輪廓
這個資料是來自於Border Base
Border Base就是這個綠色的
所以它外包圍輪廓
那紫色的這個叫做Offset
那Offset
等於說綠色跟紫色的這個
弧面這個弧度它是差1mm
然後再來就是
這個點到這個點它不是有一節一節
這個點
它是差10mm
所以它這個設定是這個意思
這個是0然後這個是10
所以可以看一下
所以它往這邊往內縮
所以我們如果改成這個改成10
它會縮得更
那這個調整是什麼意思
假設你現在要做研磨或塗膠
你會有一個
你的手臂你的這個工具頭
你可能會有一個半徑
所以如果你的半徑是5
那你這個縮進去就要是5
那如果你的半徑是10你縮進去就要是10
所以這樣才會切齊這個點
看你的這個工具頭
它的這個半徑是多少
可以去調整
所以我們這邊
不是隻有弄一圈
這個紫色叫一圈第一圈
如果你需要第二圈你就Add
那你這邊第二圈Offset
你說第一圈叫5
第二圈叫6
那這個點跟點的距離點
你這邊有兩圈這邊成對就要兩圈
所以這個10
然後這樣
這個路徑就可以伸出來
那我們來換一個別的東西
我們再換另外一個
不一樣形狀的
也是可以成功的把這個外圓廓
加上這個兩圈的路徑
把它算出來
那如果換這個圓盤
可以把它算出來
所以它可以自己抓到這個外圓廓的位置
然後再把這個Tex把它算出來
那再來就是說
有時候我們中間會有一些空隙
中間會有一些空隙
那你可以把中間這個空隙
把它補滿
補滿
因為你可能在補膠你不一定只補這個邊
你可能中間也要補滿
那你弄很多圈的話
這個手臂的動作會太久
所以這時候我們再加第三圈
第三圈呢
我們就把它改成這個地方
這邊有個叫做最後一圈
要不要使用Zig Zag
所謂的Zig Zag
我們寫一個英文字叫Zig
Zig Zag
公字型的路線
我們把它改成True
它就會把中間這個改成是
Zig Zag的這個路線
這個就可以讓中間把它補滿
那它其實就是
從原本這個繞圈裡面
按照這個機偶機偶這樣把它連過去
連過來連過去連過來
這個原理其實很簡單
那最後呢
我們要把這個路徑
畢竟要用機器手去做
所以你一定要把它反映到這個地方
所以怎麼反映這個地方
那就是用這個Transform
Transform Pass
我們要用這個Transform Pass
Transform Pass在這裡
把它拉進來
那我們只要轉這個Tooling Pass的部分
所以這個先把它砍掉
這個砍掉
砍掉
把這個Offset
把它轉過來
因為這個Base我們不需要
Base是它的外框
那怎麼轉就是這個
校正的這個把它拉過來
一樣就是
Reverse要出
因為我們要從相機坐標機轉到這個地板
轉完了以後再把這個Segment把它秀出來
一樣它是Double Array
所以一樣
Segment可以把它顯示出來
丟上去
那這個Tooling Pass
就會跑到這個
跑到這個地板的坐標機
好那接下來
最後一個動作就是
因為我們機器手臂其實是
你其實是喫這個
位置它不是喫這個Path
我們Path是什麼
我們來看一下
我們Path是什麼資料結構
我們Path其實就是由點跟點的連線
有組成
這個只能用在影像上
機器手臂它也不是喫這個結構
所以我們要幫機器手臂準備好
它所需要的資料
然後機器手臂需要什麼
我們是需要這個Pose
我們需要這個Pose
好那
我們需要把這個
節點投影到
資料上面
我們要用這個Make
Pose
那它要放在
還沒有轉到這個上面
還沒有轉到這個地板上面
因為我們的Normal是長在誰身上
我們需要這個Normal
這個Pose
我需要有這個Path加上它所對應的Pose
才能長出這個
長出這個
這個Pose出來
我們要有路徑還有路徑上的方向
才能長出這個Pose
為什麼叫路徑還有路徑上的方向
我現在有一個路徑
那這個路徑
每個路徑上都有一個節點
但是其實座標不能只有這個
座標是由X軸還有Y軸
還有Z軸
所組成
所以每一個節點上都要有一個XY
所以
你知道這個Z你要給誰
那就是給它的方向
所以連線我們都給X
所以我們可以看到這個地方
那這個Normal要做什麼
Normal就是要讓它產生這個
每個節點上的這個命座標的
命格這個方向
所以我們要把這個Path把它丟進來
還要給它Normal
可是問題是我們要給哪個Normal
我們要給這個節點上的Normal
所以節點上的Normal我還要另外算
這個把它叫出來
節點Segment Point
這個是它的這個線
我們看一下它的節點
這個就是它每個路徑的節點
那節點上都要長出一個Normal
所以我們就需要有一個
我們前面不是已經計算
這個點其實是自帶Normal
所以我們就要從這個點這樣查
查這個點
每一個點它離這個點
最靠近Normal的方向是什麼
這個裡面也是有一個工具
這個叫Find Closest Point in Normal
所以我們就把這個
點把它列過來
然後取樣點就是這個路徑上的這個節點
這個節點把它列出來
這個就是我們要的每個節點
身上的Normal
那我們在用的時候
我們可以叫出來看一下
叫出來看一下就是我們可以把這個
這個Normal的格式叫Negative
Negative是剛纔有提過
Negative是不能行使的
所以我們要從這個
用拔轉的這個線段來行使
所以這個又是拔過拔的
這個是點節點
它顯示多少
10mm
就是節點Normal
節點Normal
這個等一下就可以拿來算這個Close
這個知道就好
這個都可以打掉
我們就可以拿來用這個
我們就要這個Normal
我們有幾個Path就有幾個Normal
這是一個結果
我們就可以獲得這個Make
Pose沿著這個路徑
而且知道這個路徑身上的這個Normal
它就可以變成是一個一個Pose
那最後呢Pose我們要做
坐標轉彎
一樣要把它轉回這個地板的坐標
所以怎麼把Pose轉回地板的坐標
我們就有一個Transform Pose
這個因為它又是拔過拔
所以不能轉
所以我們要把它Flat
Flat什麼Flat Pose
然後把這個腳
上面這個腳這裡
貼到下面
因為是要轉到地板所以要用True
這個其實就可以貼到這個地方
那因為這個Pose也是不能顯示
所以我們就要用Vigilance
那顯示的長度是10mm
我們用Vigilance
把Pose的X軸Y軸E軸把它秀出來
這個就是除了節點以外
那每一個節點上面
都有一個小坐標
那這個小坐標就是要給機器手臂轉
那它的值是多少
值其實就是XYZ-45
那有的機器手臂它其實沒辦法支援
它不能直接喫這個XYZ-45
你必須幫它翻譯成
XYZ-45
所以我們又要用工具
這個工具就是要轉
這個工具是要把這個
為四元素形態的位置把它轉成
平移跟旋轉的值
平移旋轉的值
用這個叫Make
Translation and Location
把它拿進來
然後接起來
那它怎麼Make
這個是什麼
它因為不同的機器手臂
它有它自己的標示
四元素是一個數學上的標準
那個跟品牌無關
因為空間在轉的時候
坐標是沒有影響的
它影響這個旋轉的方式
那機器品牌的不同像巴納德
這個YASTAWA
TENCEL或是悅江
它是用SetXYZ這個旋轉方式
那APPOOP它用的是旋轉坐標
ZYX
那KAMASAKI它用的是旋轉坐標
ZYZ 比如說旋轉Z軸
然後再用相對的位置
再旋轉Y軸
再跑到相對的位置旋轉Z軸
那DURING STOCKING它用的是旋轉坐標
ZYZ
那不同的旋轉坐標的這個標示方式
會造成這個RX RY RZ的數值
各家都不太一樣
明明都是相同的地方
但是各家的線值都不一樣
所以我們就要有這樣的一個工具
假設我現在選SetXYZ
我把這個POSE弄進來
我們就可以分別顯示
平移植跟旋轉植
這個是平移植
左邊是平移植XYZ
那總共有
0到165總共166個圈
旋轉植就是
RX RY RZ
那這個的話是相對於地板的坐標
比如說這個小坐標
小坐標相對於地板的
大坐標RX RY RZ
那這個值就可以用
通訊去把它
傳給機器手柄
這個就是我們這個DURING STOCKING的用法
那這個我們就先
講到這裡
