Halcon運算元學習 create pose

2021-09-28 22:31:54 字數 3771 閱讀 7917

建立3d位姿

( : : transx, transy, transz, rotx, roty, rotz, orderoftransform, orderofrotation, viewoftransform : pose)

輸入:輸出:

1.create_pose建立3d姿勢-pose。 姿勢描述了剛性3d變換,即由任意平移和旋轉組成的變換,具有6個引數:transx,transy和transz分別指定沿x,y和z軸的平移,而rotx ,roty和rotz描述旋轉。

2.3d姿態通常以兩種方式使用:首先,描述乙個座標系相對於另一座標係的位置和方向(例如,零件座標系相對於相機座標系的姿態,簡而言之:零件相對姿態;

其次是描述如何在兩個座標系之間轉換座標(例如,將點從零件座標轉換為攝像機座標)。

3.方向表示(旋轉)

1)圍繞任意軸的3d旋轉可以多種方式由3個引數表示。 halcon允許您使用引數orderofrotation在其中三個中進行選擇:如果傳遞值』gba』,則旋轉將通過以下圍繞三個軸的旋轉鏈來描述(有關旋轉矩陣rx,ry,rz的內容,請參見hom_mat3d_rotate):

2)rgba 在文獻中表示為「 yaw-pitch-roll 翻滾-偏航-仰俯」。

請注意,您可以通過兩種方式「讀取」該鏈:如果從右側開始,則始終相對於全域性(即固定或「舊」)座標系進行旋轉。 因此,可以理解為:首先繞著z軸旋轉,然後繞著「舊」 y軸旋轉,最後繞著「舊」 x軸旋轉。 相反,如果您從左到右閱讀,則相對於區域性(即「新」)座標系進行旋轉。 然後,對應於以下內容:首先繞x軸旋轉,繞「新」 y軸旋轉,最後繞「新(等)」 z軸旋轉。

從右到左讀取對應於以下運算元呼叫順序:

hom_mat3d_identity (hommat3dident)

hom_mat3d_rotate (hommat3dident, rotz, 'z', 0, 0, 0, hommat3drotz)

hom_mat3d_rotate (hommat3drotz, roty, 'y', 0, 0, 0, hommat3drotyz)

hom_mat3d_rotate (hommat3drotyz, rotx, 'x', 0, 0, 0, hommat3dxyz)

相反,從左向右讀取對應於以下運算元呼叫順序:

hom_mat3d_identity (hommat3dident)

hom_mat3d_rotate_local (hommat3dident, rotx, 'x', hommat3drotx)

hom_mat3d_rotate_local (hommat3drotx, roty, 'y', hommat3drotxy)

hom_mat3d_rotate_local (hommat3drotxy, rotz, 'z', hommat3dxyz)

3)在orderofrotation中傳遞「 abg」時,旋轉對應於以下鏈:

rabg在文獻中表示為「 roll-pitch-yaw 翻滾-偏航-仰俯」。

4)如果在orderofrotation中傳遞「rodriguez」,則旋轉引數rotx,roty和rotz將被解釋為所謂的rodriguez旋轉向量的x,y和z分量。 向量的方向定義為(任意)旋轉軸。 向量的長度通常定義為正方向的旋轉角度。 此處,使用rodriguez向量的變體,其中向量的長度定義為旋轉角一半的正切值:

請注意,這些3d位姿可能是模稜兩可的,這意味著齊次變換矩陣可以具有多個位姿表示形式。 例如,對於rgba (b=±90)以下位姿對應於相同的齊次變換矩陣:

// 兩種變換形式下,最終變換後的座標位姿一樣的

create_pose(0, 0, 0, 30 , 90, 54, 'rp+t', 'gba', 'point', pose1)

create_pose(0, 0, 0, 17, 90, 67, 'rp+t', 'gba', 'point', pose2)

如果這會導致問題,則可以改用齊次變換矩陣或四元數(axis_angle_to_quat)表示旋轉。

4.對應的齊次變換矩陣

1)您可以使用運算子 pose_to_hom_mat3d 獲得與姿勢相對應的齊次變換矩陣。 在標準定義中,這是以下齊次變換矩陣,可以將其分解為兩個單獨的矩陣,乙個用於平移(h(t)),乙個用於旋轉(h(r)):

2)座標轉換

下面的等式描述了如何使用位姿(pose)或更確切地說,即其相應的齊次變換矩陣2h1 (輸入和輸出點作為齊次向量,另請參見affine_trans_point_3d)將乙個點的從座標系1轉換為座標系2。 請注意,要將點從座標系1轉換為座標系2,請使用描述座標系1相對於座標系2的姿態的轉換矩陣(hommat3dfrom1in2)。

這對應於以下運算元呼叫:

pose_to_hom_mat3d(poseof1in2, hommat3dfrom1in2)

affine_trans_point_3d(hommat3dfrom1in2, p1x, p1y, p1z, p2x, p2y, p2z)

3)非標準位姿定義

到目前為止,我們已經描述了標準姿勢定義。 要建立此類姿勢,請為引數orderoftransform選擇(預設)值「 rp + t」,為viewoftransform選擇「 point」。 通過為這些引數指定其他值,您可以建立非標準位姿型別,我們將在下面簡要描述。 請注意,僅為了向後相容才支援這些表示型別。 我們強烈建議使用標準型別。

如果為orderoftransform選擇』r(p-t)』,則建立的位姿對應於以下變換鏈,即旋轉和平移的順序相反,並且平移取反:

如果為viewoftransform選擇』coordinate_system』,則轉換順序保持不變,但旋轉角度將被取反。 請注意,與其名稱相反,這並不等同於變換座標系

4)返回的資料結構

建立的3d姿勢以pose返回,該姿勢是長度為7的元組。 前三個元素包含平移引數transx,transy和transz,然後是旋轉引數rotx,roty和rotz。 最後乙個元素對使用引數orderoftransform,orderofrotation和viewoftransform選擇的姿勢的表示型別進行編碼。 下表列出了可能的組合。 如前所述,我們建議僅使用orderoftransform ='rp + t』和viewoftransform ='point』的表示型別(**0、2和4)。

您可以使用convert_pose_type將姿勢轉換為其他表示型別,並使用get_pose_type查詢型別。

halcon運算元學習

1.gen contour polygon xld contour row,col 功能 根據乙個多邊形 polygon 以元組形式給出 建立乙個xld輪廓 contour 輸出 contour 輸出建立的xld輪廓 輸入 row 輸入的行陣列 輸入 col 輸入的列陣列 例 gen contour...

halcon學習 measure 運算元

measure pair measure measure rehandle,sigma,threshold,transition,select rowedgefirst,columnedgefirst,amplitudefirst,rowedgesecond,columnedgesecond,amp...

Halcon運算元學習理解 threshold

threshold imagefilled,region,0,90 用來分割影象,運算元的原形是 threshold image region mingray,maxgray 其中 image是輸入影象 region是分割後的結果 mingray和maxgray是輸入的控制引數,分割的最小灰度值與最...