Halcon中手臂抓取过程中遇到的旋转位移问题

Halcon中手臂抓取过程中遇到的旋转位移问题_第1张图片
图1: 模板图像

 Halcon中手臂抓取过程中遇到的旋转位移问题_第2张图片

图2: 待纠正图像

     在机械手抓取的过程中会遇到以下几个问题,一是先位移还是先旋转,二是Mark图像的中心点和实际手臂的抓取点、旋转中心点不一致的问题。

 

已知变量:

1、 图1模板图像矩形的中心点,视为手臂抓取点:RectCenter_Row, RectCenter_Column

2、图1模板图像中Mark的中心点: ModelRow, ModelCol

3、以图1中Mark建立形状匹配模板,在图2中查找模板,得到Mark新的中心点:Row,Column   角度:Angle

 

1.第一种情况:mark点中心点和手臂旋转中心点统一的情况 

1.1先位移,再旋转

hom_mat2d_identity(HomMat2DIdentity)

hom_mat2d_translate(HomMat2DIdentity,Row-ModelRow  ,Column - ModelCol,HomMat2DTranslate)

//位移是以Row, Column为旋转中心点

hom_mat2d_rotate(HomMat2DTranslate,Angle,Row, Column, HomMat2DRotate)

// 移动轮廓,验证效果
affine_trans_contour_xld(Contours,ContoursAffinTrans1, HomMat2DRotate)

配合机械手臂时,只需要告诉手臂中心的差值和角度即可

 

1.2  先旋转再位移

hom_mat2d_identity(HomMat2DIdentity1)

// 这里旋转的中心点是以模板的中心点为准的

hom_mat2d_rotate(HomMat2DIdentity1,Angle,ModelRow,ModelCol,HomMat2DRotate1)

hom_mat2d_translate(HomMat2DRotate1,Row-ModelRow  ,Column - ModelCol,HomMat2DTranslate1) 

affine_trans_contour_xld(Contours,ContoursAffineTrans, HomMat2DTranslate1)

配合机械手臂时,只需要告诉手臂中心的差值和角度即可 

1.3统一的情况下总结

(1)无论是先旋转还是先位移,位移的变量都是不变的,都是新的位置减去旧的位置

(2)如果是先位移再旋转,旋转的中心轴是以位移后的中心点。如果是先旋转再位移,则旋转的中心轴是以位移前的中心点作为旋转中心轴。

 

  1. 第二种情况:mark点中心点和手臂旋转中心点不统一的情况(实际中大多数为这种情况,因为手臂的抓取点任意)

   2.1   先位移再旋转

   这种情况不推荐,位移之后旋转,另外之后还需要加一步位移

  2.2  先旋转再位移

  hom_mat2d_identity(HomMat2DIdentity3)

  hom_mat2d_rotate(HomMat2DIdentity3,Angle,RectCenter_Row,       RectCenter_Column,HomMat2DRotate3)

 

*因为绕着实际的中心轴做了旋转,mark点的位置发生了变化,可以通过旋转变换得到新的位置

 affine_trans_point_2d(HomMat2DRotate3,ModelRow, ModelCol, Qx, Qy)

 affine_trans_contour_xld(Contours,ContoursAffineTrans1, HomMat2DRotate3)

 

hom_mat2d_identity(HomMat2DIdentity4)

//这里的做差是减去新的位置。
hom_mat2d_translate(HomMat2DIdentity4,Row - Qx, Column - Qy, HomMat2DTranslate3)

affine_trans_contour_xld(ContoursAffineTrans1,ContoursAffineTrans2, HomMat2DTranslate3)

实际操作中,告诉手臂旋转角度,以及位移(Row - Qx, Column - Qy

你可能感兴趣的:(机器视觉)