機器視覺小教室 Aurora Vision Studio 大家一起玩 3D【15】Eye To Hand 手眼校正原理教學 feat. MechMind 梅卡曼德 3D結構光相機

弘翔精密科技股份有限公司
1粉絲
2024年10月14日 #AuroraVisionStudio #梅卡曼德
#AuroraVisionStudio
#梅卡曼德
機器視覺小教室 大家一起玩3D 線上教學網頁
https://www.urvision-tw.com/article_detail/26.htm
好,我們這個是要介紹這個
Eye to Hand的這個校正的這個原理
那什麼叫Eye to Hand
大家可以看到這個影片
左邊有個影片
有一個手機器手臂
好,這邊有一個機器手臂
然後你這邊放了一個東西
然後你的相機呢
其實是架在手臂的外面
好,相機拍到這個東西
那就是你希望取得這個手臂
跟這個相機的這個機座的這個相對關係
那這個相對關係
我們叫吐這個字
Eye是眼睛的意思
然後吐,吐誰?
吐這個Hand,Hand就是手
所以這個名詞是這樣來的
以手到眼睛的這個
或是眼睛到手這個相對關係
好,那這個校正跳舞會有什麼效果
可以看,比如說
好,現在閃這個結構
那做一個計算
那手臂它就可以
假設看你是要做什麼動作
你是要做抓取
還是做這個
這個塗膠還是要做其他的一些行為
手臂
你把這個座標轉換到手臂的座標系列以後
就是手臂纔有辦法對視覺
所輸出的這個資料
進行後續的這個處理動作
好,那我們
要怎麼用這個Orabi去做這個事情
第一個當然就是先取向
我們就可以複習一下
就是說怎麼去取到這個3D結構法的東西
好,那第一個動作就是
我們要我們先載入這個取向工具
好,取向工具是這個
好,把它讀進來
好,讀進來呢
我們要
指定它的IP
好,在初始化的時候
那它的IP是192.168.1.4
好,那接下來就是要取得它的圖像
好,取得它的圖像
那把這個camera把它連接在一起
好,它的圖像呢有
2D的
灰階圖是彩色圖以及電影
好,那我們就
就可以看到取向一張它就會拍攝
好,那
這個左邊這個是2D的圖像
右邊這個是3D的圖像
那3D的這個圖像呢
它原始的座標是
這個0000在這邊
好,所以相機的種子在這邊
X然後Y
Z朝起來
所以它看到了這個代車
所以代車路離越遠
那這個Z值就會越大
離越近Z值就越小
但是我們手臂不是在這個方向
所以我們要怎麼去做這個轉換
好,所以我們就還要再
援引其他的工具
這個是3D工具
視線已經寫好了
好,這3D工具裡面呢
我們要使用的時候我們就要拿這個
這個校正板
這邊有一個這個校正板
我們把它放在這個地方
好,那
我們
我們要先調好這個適合拍校正板的這個參數
所以我們要打開這個原廠的Viewer
那原廠的Viewer裡面
裡面有一個參數表叫
這個菜單
CATABRACE這個
所以我們把它取向一下
好,所以先確保說這個
拍攝校正板這個點零是非常清楚的
並且這個
裡面這些mark點
然後連這個十字也都是看得非常清楚
那我們就可以調好這邊參數調好
就可以把它保存在這個CATABRACE
這個參數表
那你在拍其他東西的時候
你會有自己的參數
所以我們拍這個校正板的話
是用的是這個CATABRACE的這個參數
好,關起來
好,那
怎麼去在程式裡面去調用這個CATABRACE
我們就要把這個
USER SET
SET USER SET BY NAME
把這個拉進來
拉進來以後把相機點上去
然後NAME
你剛才記得說這個參數表叫CATABRACE
C-A-L-I-D
好,這樣子
他在拍的時候就會用
剛才調好的這個參數表
我們看一下
記不記得剛纔有的名字叫DEFAULT
好,我們這個可以拉進來看一下
可以看到它裡面有多少的參數
好,總共有DEFAULT CATABRACE
還有什麼CHARGING PORT
OK PIN
METAL WELL DIN
還有什麼巴拉巴拉一堆
所以我們現在用的是這個CATABRACE這個參數
好,所以我們如果用的是DEFAULT這個參數
這個不需要了
我們就輸入DEFAULT
好,所以看到這個
原點是過曝的
那我們沒有看到這個死值
所以我們就要用CATABRACE剛才調好的
然後再重新拍攝一次
這樣子的話這個曝光才會是正確的
好,正確了以後我們就可以
使用這邊的影像處理工具
影像處理工具
我們要先去偵測這個原點
原色的這個那個白色圓的這個點點
那這個工具叫做DETECT CIRCLE GRID
BDD或是CGB
這個是原廠相機原廠校正版的這個名字
所以只要是BDD或是CGB這個型號
那它都可以去辨識
好,那它需要輸入這個2D影像
好,輸入2D影像
你這邊要輸入說
它大概
這個圓球圓球的這個Pixel的這個直徑
大概這個圓球的這個半徑
所以大概是25左右
所以我們把它改成20
不用很準大概就好
好,然後這個因為它自己會縮寶
所以0.5到1.5都是可以適應的
好,所以我們把這個偵測結果
拉上去這個Grid是這個圓形
然後X軸還有Y軸
以及圓點X點Y點
好,拉上去
好,那我們來看一下它的這個結果
結果是一個True Boss
好,拍一張
可以看到結果是True
那結果是True的原因就是
因為它有抓到全部的圓點
然後這個白色的這個球球
好,那左邊左下角這個是O
這個是O
然後右邊這個叫做X
然後這個是Y
好,目前是先把2D先抓出來
好,把2D抓出來
好,那下一步呢
下一步的話就是要計算3D的位置
計算3D位置這個叫做
Calculate circle with 4 poles
好,要把3D的位置算出來
因為我們需要知道
我們想要知道是
這個是相機的周標式
X Y Z
然後這個是
X Y
然後Z
我們要知道是
它到它的這個關係
所以首先
你要先把這個東西算出來以後
我們才能知道它的關係
好,所以我們就利用這個工具
這個工具呢
需要輸入這個點
它點在這邊
所以把它拉過來
以及需要知道這個
2D的這個圓球點
把它拉過來
好,它的原理為什麼要知道這個圓球點
因為它需要透過2D加3D的這個演算法
2D加3D的這個演算法
好,我知道這個圓球點
其實就可以Map到這個上面
每個都可以Map過來
好,全部Map過來以後
利用這個圓球點
找到這個
這個平面在哪裡
其實目的是要知道這個平面在哪裡
好,那接下來呢
這邊還需要輸入O
O的2D點
X的2D點
Y的2D點
好,那我們就要執行看看
好,執行呢
那把結果叫出來
結果叫出來
結果怎麼看呢
我們去看這個
Plan
我們看一下Plan對不對
這個Plan必須
吸附在這個校正板上
好,Plan是正確的
那我們把3D的O
X
Y
好,這樣子的話
我們的結果就出來
我們結果是一個Pose
Pose
Pose是什麼結構
Pose是一個
這個是位置
那後面是一個四元素
這是一個四元素
四元素就是Rotarian
然後這個叫做Translation
那四元素代表就是旋轉
旋轉
好,所以
一個座標
空間座標轉到另外一個座標
就是包含了平移跟旋轉
這兩個不同的分量
好,那我們就可以把這個
用Save Object
這個東西
然後輸入Pose
這個行頂
好,把這個Pose把它存下來
Pose
然後AVData
好,把這個存下來
好,執行一下
好,那我們把這個資料夾打開
就可以看到這個
Pose AVData在這個資料夾
好,這個就是整個校正的過程
好,那
怎麼樣去使用這個校正
我們來開另外一隻程式
我們把這程式另存新檔
這個叫做
剛纔是Program
我們把它叫Program2
好,另存新檔
那其他都不變
就不要動
取向也不要變
好,這個把它刪掉
因為現在是Program2
我沒有要叫其他的
好,那
這個UserSet
我們就不需要再用
校正
我們用Default
好,重新取向
好,那它現在
怎麼把這個
轉到別的座標系
轉到這個新的座標系
我們就Load
Object
好,把它拖進來
那拖到這個移球來
好,PoseQueue
然後它記得剛才任務
叫Pose.AVData
剛才這個檔叫
Pose.
AVData
所以我們這個地方的檔就是
相對路徑一點
Pose.AVData
好,把它秀出來看
好,拍一下
好,這個就是剛才這個校正的位置
好,那我們就要把它轉換吧
好,轉換
轉換的話
我們就用這個
Transform
Home你的3D Grid
因為我們這個點的格式叫
Home你的3D Grid
所以把它拉過來
好,再把這個位置拉過來
好,再分割一下視窗
好,把結果丟在這個地方
丟在這個地方
好,那這個地方左下角有一個Inverse
Inverse預設值是False
好,我們等一下再看
先執行一下
可以看到
這個感覺好像怪怪的
好,我們把它改成True
好,這樣就對了
好,那為什麼要Inverse
因為剛才這個座標轉換
就是
我們是從這個座標系轉到這個座標系
它相對
那我其實我想要做這個動作
就是我們要把這塊東西
貼到這個
XYZ的這個座標繫上
所以我要反過來
好,我要反過來
好,反過來
把它反過來
把這個點雲把它
回過頭
回到這個XYZ座標系
好,那
回過來了以後呢
可以看到0在這裡
好,這個圖我用大一點
對,0
0
所以這邊是X
可以看到紅色的X
好,Y是這個方向
所以Y在這裡
所以Z是朝上
好,那這樣子的話就可以把這個
這個
3D的這個座標系
轉到地板上
好,轉到地板上
那下一步要做什麼
下一步其實就是
我們叫機器手臂一般會去找
就是
可以看一下這個
因為我現在目前這個地方沒有機器手臂
那這個地方
機器手臂的話就是
它會有一個三點調整版
好,那
你現在用這個
這個TCP然後去
點這個點
然後再點這個點
你就可以把你的機器手臂
好,這個東西我現在放在這裡不要動
你視覺叫完以後就不要動
用機器手臂就點這三個點
好,點這三個點
點完以後會有什麼效果
也就是說
你點完了以後
你的機器手臂你可以沿著這個座標系
你的機器手臂
可以剛好沿著這個座標系
去移動
當你去輸入這個
沿著這個座標走的時候
它其實就是
當你切換到這個座標系以後
它可以沿著這個座標系去做這個移動的動作
那我們就可以把機器手臂的座標系跟
視覺叫好這個地板的座標系把它重合在一起
好,那接下來
在應用的時候
你只要把這個座標軸還做好
我把數值拋給機器手臂
那
這樣子的話
你的機器手臂就不需要再做其他的轉換
好,那這個
我們再
拿別的東西來它會呈現什麼效果
比如說
我把這個
校正板把它拿走
那假設是校正板做完
有你的機器手臂也叫完
那我們就可以換成其他的東西
比如說換其他的東西
好,那
你的相機拍到的時候其實是
原本是長這樣
以自己為中心
那
你把它轉到地板上
就會變成這個樣子
那
看你的演算法是要在
相機的座標系做好以後
再把資料轉到地板上
還是
一開始
把資料
點名直接轉到地板上去做後續的計算
那這個就是後續在做應用的時候這個考慮
好,那這個就是
i2cam的這個手眼校正
當然
目前
看到這次程式其實只叫眼的
因為
手的部分的話用
手臂內建的功能就得處理掉
那這個方法
目前是
用起來最簡單的這個i2cam手眼校正
當然i2cam手眼校正的方法
就只有這一種
那這個
目前先介紹到這裡
