//此示例显示如何基于由SCARA手眼校准确定的校准信息,使用SCARA机器人执行拾取和放置应用程序。 在第一步骤中,根据模型图像定义形状模型。 然后,基于该形状模型,在每个图像中搜索对象。 对于一个选定的对象,计算可用于掌握该对象的机器人坐标。 为了使该示例适用于实际应用,必须从相机获取图像(而不是从文件读取),并且必须实施机器人的控制(而不是在本示例中被注释掉的相应行)。
//通常,图像必须在匹配之前校正。 如果摄像机完全正交于测量平面,则此步骤可以仅被省略。 要使用提供的示例图像运行示例程序,RectifyImages必须设置为true。
RectifyImages := true
//---------------------------------------------
try //启动一个程序块,在其中检测和捕获异常
//读取手眼校正的结果
read_pose ('cam_in_base_pose.dat', CamInBasePose)//从文本文件中读取3D姿态(外部相机参数的文件名,三维姿态)
//读取被抓取物体姿态估计所需的数据
read_cam_par ('camera_parameters.dat', CameraParam)//从文本文件中读取相机的内部参数(相机内部参数的文件名,相机内部参数)
read_pose ('measurement_plane_in_cam_pose.dat', MPInCamPose)//从文本文件中读取3D姿态(外部相机参数的文件名,三维姿态)
catch (Exception) //捕获在前面的try块中抛出的异常(返回异常数据的元组)
//校准信息尚未可用,请使用标准校准信息代替。
CamInBasePose := [0.05592166548,0.19497621789,0.48025117245,180.09816119,29.85593363,179.94389014,0]
CameraParam := [0.0165251,-642.277,4.65521e-006,4.65e-006,595.817,521.75,1280,1024]
MPInCamPose := [0.0045679683065,-0.0028695297318,0.4088853425,359.78658429,29.732027579,0.22946472765,0]
endtry //结束处理异常的块
//准备纠正map以消除透视图像失真
if (RectifyImages)
prepare_rectification_map (Map, CameraParam, MPInCamPose, MappingScale, MPInCamPoseMapping) //见下文补充
image_points_to_world_plane (CameraParam, MPInCamPoseMapping, 0, 0, 'm', MapUpperLeftX, MapUpperLeftY)//将图像点转换为世界坐标系的平面z=0(相机参数,在摄像机坐标下的世界坐标系的三维姿态,要转换的点的行坐标,要转换的点的列坐标,规模或维,点在世界坐标系中的X坐标,点在世界坐标系中的Y坐标)
endif
dev_update_off () //将dev_update_pc、dev_update_var和dev_update_window设置为“off”
set_system ('border_shape_models', 'true') //设置HALCON系统参数(要更改的系统参数的名称,系统参数的新值)
//在此,应建立与机器人的连接,并将机器人移动到一个确定的备用姿态,以便拍摄测量平面的无遮挡图像。
//定义被抓取对象的形状模型
//-获取模型生成图像
read_image (Image, '3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_01')
if (RectifyImages)
map_image (Image, Map, ModelImage)//对图像应用一般变换(要映射的图像,包含映射数据的图像,映射图像)
else
copy_image (Image, ModelImage)//复制一个映像并为它分配新内存
endif
*
dev_close_window () //关闭活动图形窗口
dev_open_window_fit_image (ModelImage, 0, 0, 600, 600, WindowHandle)//打开一个新的图形窗口,该窗口保持给定图像的高宽比(图像以适应新窗口的大小,新窗口左上角的行坐标,新窗口左上角的列坐标,限制窗口宽度,限制窗口高度,新图形窗口的窗口句柄)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false') //设置字体独立于操作系统(窗口的窗口句柄 字体将被设置在其中,Windows系统上的字体大小,字体,粗体,斜体)
dev_clear_window () //清除活动图形窗口的内容
dev_display (ModelImage)
dev_set_line_width (2) //定义区域轮廓输出的线宽(轮廓模式下区域输出的线宽)
//创建形状模型
gen_rectangle1 (ModelROI, 400, 500, 1100, 1300) //创建一个平行于坐标轴的矩形(创建矩形,行的左上角点线,列的左上角点线,右下角…,右下…)
gauss_filter (ModelImage, ImageGauss, 5) //光滑使用离散高斯函数(图象被平滑,过滤像,过滤像的大小)
reduce_domain (ImageGauss, ModelROI, ImageReduced) //缩小图像的域(输入图像,新定义的域,图像与简化的定义域