图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)
配合机械手臂时,只需要告诉手臂中心的差值和角度即可
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)如果是先位移再旋转,旋转的中心轴是以位移后的中心点。如果是先旋转再位移,则旋转的中心轴是以位移前的中心点作为旋转中心轴。
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)
affine_trans_contour_xld(ContoursAffineTrans1,ContoursAffineTrans2, HomMat2DTranslate3)
实际操作中,告诉手臂旋转角度,以及位移(Row - Qx, Column - Qy)