接触有一项目,相机在下面,被定位物体在上面,对产品要进行旋转和平移校正,机械手吸取产品时的位置不定,属于盲吸,这时机械手的吸盘和被定位物体的中心不一定在同一个位置,此时要对产品进行旋转和平移校正。取产品的一个角点进行定位。
要注意此时,机械手的吸盘中心在相机拍照位的位置是固定的,也即被定位物体在相机视野里的旋转中心是确定的,即吸盘的位置,也就是要先要标定出吸盘的坐标(相机坐标系或机器人坐标系),然后在图像里即可知道其旋转中心的坐标(吸盘在相机坐标系或机器人坐标系,统一到一个坐标系即可)。
然后利用
hom_mat2d_identity (HomMat2DIdentity)
*其中207 139为假定的旋转中心即吸盘的在相机坐标系的位置(也可以统一到机器人坐标系下) -Angle2为要旋转回去的角度标准位置 207,139为假定的旋转中心
*吸盘在拍照位的位置即为旋转中心,可利用九点标定确定该点在相机坐标系的位置
hom_mat2d_rotate (HomMat2DIdentity, -Angle2, 207, 139, HomMat2DRotate)
*测试旋转图像看一下效果
affine_trans_image (GrayImage2, ImageAffineTrans1, HomMat2DRotate, 'constant', 'false')
*假定捕捉到的定位的角点241,111 经过旋转矩阵之后的位置Qx,Qy。根据该位置再标准位置进行XY平移补偿
affine_trans_point_2d (HomMat2DRotate, 241, 111, Qx, Qy)
*也可以使用vector_angle_to_rigid()函数进行相应的上面运算
*其中207, 139为假定的旋转中心,Angle2为当前角点处的角度,后面的Angle1为要旋转到的标准产品的角度
vector_angle_to_rigid (207, 139, Angle2, 207, 139, Angle1, HomMat2D1)
*假定捕捉到的定位的角点241,111 经过旋转矩阵之后的位置Qx,Qy。根据该位置再标准位置进行XY平移补偿
affine_trans_point_2d (HomMat2D1, 241, 111, Qx, Qy)
进行求得旋转之后角点的位置,再进行平移补偿位置即可
测试代码下载地址https://download.csdn.net/download/yue1453544229/11190995
以上内容需要求解旋转中心,旋转中心的求法如下:
方法1:可将物体旋转两次,求得某点旋转的三个点位,根据三个点位求解其外接圆,求得的圆心即是旋转中心在相机坐标系的位置。
方法2:可能受视野限制,只能旋转一个角度的情况,已知某点的旋转前后的坐标,旋转的角度,求旋转中心。其求解公式如下图
该方法的计算方法是使用旋转矩阵进行求解的,根据旋转矩阵求解方程组
这个图的Px,Py为待求的旋转中心
这个图的Px,Py,Qx,Qy为已知的旋转前后的点坐标值。