尊重作者,支持原创,如需转载,请附上原地址:
https://libaineu2004.blog.csdn.net/article/details/106995624
心得笔记
字面意思,眼代表眼睛,这里指的是我们的工业相机;
手,指的是我们的运动部分,比如机械手或者运动控制系统;
眼在手上,就是相机按照在运动轴上面,跟随运动的某个轴一起运动,这种标定就是图像和机械点一一运动去做标定。
眼在手外,就是相机固定一个位置拍照,机械手或者运动部分不会带动相机,这个时候标定就要一次性拍全视野,然后机械部分再一一针对图像的上点做好对应关系,然后标定。
这两种标定是我们图像和运动部分联合主要的两种标定方法,都可以实现图像转机械运动,就是标定关系不一样而已,结果都是一样的!
眼在手上就是一个点对应一个机械坐标,做九组就好了!
也就是相机一次拍9个点 然后机械手走这九个点得到九个对应的机械坐标进行变换。
眼在外:相机放置一个固定的位置,与机器人基坐标系相对位置不变
眼在手:相机和机器手绑定在一个位置,机器手移动,相机也跟着移动
halcon手眼标定,最少4点就可以,4个像素坐标对应4个机械手坐标就可以算出转换关系
九点标定法的实现流程
STEP 1:准备好一张标定板,里面有3X3的圆。
STEP 2:把标定板水平放置在相机正下方,控制相机拍照得到一张图片,并按顺序(走Z字型)记录图片上9个圆的中心位置。
STEP 3:控制机器人TCP工具末端按顺序(走Z字型)移动到每个圆心,并记录下9组机器人位置坐标数据。
STEP 4: 执行标定,这里使用HALCON标定算子作为演示,利用上面求得的数据。
图像上9个位置
image_x:=[]
image_y:=[]
机器人9个位置
robot_x:=[]
robot_y:=[]
图像与机器人数据结合
vector_to_hom_mat2d (image_x, image_y, robot_x, robot_y, HomMat2D)
矩阵进行保存:write_tuple (HomMat2D, '路径') 。注意:保存的矩阵后缀名是.tup格式的
STEP 5:标定完成后,拍摄一个特征点的,求得像素位置
img_x:=
img_y:=
利用以下算子即可把像素坐标转换成机器人坐标
read_tuple (‘路径’, HomMat2D)
affine_trans_point_2d(HomMat2D,img_x,img_y, Qx, Qy)
到这里标定以及转换过程就完成了。
read_image (Image, 'D:/hellowprld/初学者必用10mm视觉标定板图/9points.jpg') dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image) binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold) connection (Region, ConnectedRegions) *筛选出来九个点 select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 2000) shape_trans (SelectedRegions, RegionTrans, 'outer_circle') *求出九点坐标 area_center (RegionTrans, Area, Row, Column) disp_message (WindowHandle, 'R:'+Row+' C:'+Column, 'Image', Row, Column, 'black', 'true') *把求得的Row和Column赋值 *九点标定行 PxRow:=Row *九点标定列 PxColunm:=Column *九点标定行 *PxRow:=[23.5, 23.5, 23.5, 71.5, 71.5, 71.5, 118.5, 118.5, 118.5] *九点标定列 *PxColunm:=[28.5, 75.5, 122.5, 28.5, 75.5, 122.5, 28.5, 75.5, 122.5] *机器坐标行 Qx:=[100,50,0,100,50,0,100,50,0] *机器坐标列 Qy:=[0,0,0,50,50,50,100,100,100] *拿到机器坐标和像素坐标求出关系矩阵 * 标定行 标定列 机器X 机器Y 得到矩阵 vector_to_hom_mat2d (PxRow, PxColunm, Qx, Qy, HomMat2D) *保存矩阵 write_tuple (HomMat2D, '九点标定.tup') *读取矩阵 read_tuple ('九点标定.tup', HomMat2D) *利用求出来的物体行列坐标得到机器坐标 affine_trans_point_2d (HomMat2D, Row, Column, Qx1, Qy1)·
官方例程
vector_to_hom_mat2d
calibrate_hand_eye_scara_stationary_cam_approx
hand_eye_stationarycam_calibration
pick_and_place_scara_stationary_cam
参考文献
关于“眼在手外“和“眼在手上”标定求教
https://www.51halcon.com/forum.php?mod=viewthread&tid=4231
【3】机器人手眼标定:固定向下相机
https://www.51halcon.com/forum.php?mod=viewthread&tid=4271
“眼在手中”标定之坐标转换
https://www.51halcon.com/forum.php?mod=viewthread&tid=4265
机器人手眼标定算法源码
http://www.ihalcon.com/read-9533.html
机械手手眼标定/9点标定/4点标定/Halcon标定脚本
http://www.ihalcon.com/read-10022.html
vb.net联合halcon以及运动控制卡做的点胶贴合项目
http://www.ihalcon.com/read-14513.html
手眼标定----眼在手外(eye-to-hand) [魁拔之十万火急]
http://www.ihalcon.com/read-13820.html
手眼标定----眼在手上(eye-in-hand) [魁拔之十万火急]
http://www.ihalcon.com/read-14658.html
http://www.ihalcon.com/read-14687.html
九点标定-眼在外(没有标定板的情况) [魁拔之十万火急]
http://www.ihalcon.com/read-14564.html
手眼标定----眼在手上(eye-in-hand) [tystq]
http://www.ihalcon.com/read-14209.html
枫痕机械手相机9点坐标标定-基于C#+EmguCV
https://www.cnblogs.com/thebreeze/p/10316030.html
相机标定助手代码
http://www.ihalcon.com/read-11647.html
Haclon代码框架c#编程haclon代码学习
http://www.ihalcon.com/read-14257.html