Halcon手眼标定-1

       因为有人问到这方面的问题,那么就在这里谈一下,作为一个开篇。下一章想笼统整体的聊一下自己对视觉的一些经验。
       手眼标定中,一般是指相机搭载在机械手臂上,并且以六轴机器人为主,想要达到的目的是,搭载相机的机械手在移动中,可以通过相机来获取检测目标的位置。
       整个实现的基本逻辑是这样的:首先由机械臂提供基本位置,然后由相机定位提供准确位置,也就是最终的位置由两部分组成,第一部分机械臂位置是可以实时的通过与机械臂的控制器交互进行获取的,这个具体的操作以及接口,机器人厂家是可以提供的,第二部分则是图像中的准确位置,这一部分是需要图像坐标与机器人坐标建立联系,也就是常说的手眼标定,标定即是标定该部分。下面来详细说一下该部分:
       具体的标定是,通过选定一个标定点,移动机器人,会获得机器人两次的坐标变换,那么在图像中也会获得两次的变化,准确的说是,机器人的位移变化与图像的像素变化是存在矩阵关系的,我们标定的也是标定这个。所以,手眼标定,本质上是建立机器人的移动量与图像的移动关系,图像我们则取原点为基础点,那么移动量就变成了实际的坐标值。下面是具体的halcon代码,需要注意的事,这里认为机器人在移动过程中只有移动量,没有旋转,也就是相机前面与机械臂平行,底部与地面平行,话不多说,直接上代码:

 *机器人开始参考点的坐标
ref_pos:=[-2.576,381.149,224.404]
robot_x:=[-10.427,-32.830,-19.948,-4.683,-26.218]
robot_y:=[312.182,320.876,323.668,326.091,334.989]
image_x:=[662.904,2389.383,1573.035,583.063,2294.077]
image_y:=[406.118,427.244,951.266,1512.772,1564.933]
*计算x和y变化量 机器人
delt_robot_x:=robot_x-ref_pos[0]
delt_robot_y:=robot_y-ref_pos[1]
*机器人变化值与图像xy建立关系
vector_to_hom_mat2d (image_x,image_y,delt_robot_x,delt_robot_y, HomMat2D)
*标定完成后,第一个特征点
img_x:=2402.432
img_y:=1304.998
*获取机器人的当前位置
cur_pos:=[215.588,268.285,326.067]
*输入任意一个图像位置,转换成机械手移动量
affine_trans_point_2d (HomMat2D, img_x, img_y, delt_x, delt_y)
*将移动量加到当前机器人坐标上
final_Posx:=cur_pos[0]+delt_x
final_Posy:=cur_pos[1]+delt_y

愿我绵薄之力,有所帮助,如有问题,欢迎交流指正。

你可能感兴趣的:(halcon,手眼标定,halcon教程,其他)