1、Halcon Halcon 1、相机接入且拍摄1.1 步骤(1)连接相机 open_framegrabbe(Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn, AcqHandle) 在算子窗口内输入函数名,填入参数后点击“确定按钮即可将函数加入程序中。 注: Name:
2、 图像采集设备的名称 可通过以下步骤确定:1、在Halcon菜单栏里点击“窗口”,选择“打开算子窗口”。(若算子窗口已打开则直接进入第二步)2、在“输入算子或函数”栏内输入“open_framegrabbe回车后出现下图3、 在“参数栏中的Name后点击 即可自动检测连接的设备(笔记本电脑摄像头检测后为DirectShow) 此参数若随意填写,可能导致程序报错 HorizontaResolution、VerticalResolution:预期的图像采集接口的水平分辨率和垂直分辨率ImageWidth、ImageHeight:预期图像的宽度和高度部分StartRow、StartColumn:显示
3、预期图像的开始坐标Field:预期图像是一半的图像或者是完整图像BitsPerChannel: 每像素比特数和图像通道ColorSpace:获取图像的输出形式(gray、raw、rgb、yuv、default) 说明:此参数设置不同的值可以得到不同的图像效果,如设置“gray”则后续拍摄的图像为灰度图;选择“rbg则会显示彩色图像Generic: 通用参数与设备细节部分的具体意义ExternalTrigger:是否有外部触发器CameraType:使用相机的类型Device: 连接到的设备 说明:此参数用于区分不同的摄像头,因此在连接多摄像头时需要设置不同的值.如程序中需要连接两个摄像头,则需
4、要分别设值为0和1.Port: 连接到的端口LineIn:相机输入的多路转换器AcqHandle: 图像获取设备的Handle 说明:此参数设置与Device类似,在同一程序中若有不同的相机也需要设置不同的值。并且此参数在后续摄像头进行拍摄时需要使用.注:上述没有特别说明的参数,如果没有特定要求,则均可以设置为默认值。(2)进行拍摄 grab_image( Image , AcqHandle ) 从指定图像采集装置抓取图像 注:Image: 采集后的图像将会保存在此变量中 AcqHandle:图像采集设备的Handle,由步骤(1)的函数唯一确定。(3)关闭设备close_all_frameg
5、rabbers() 关闭所有连接的摄像头1.2 后续处理函数 此部分内容主要用于在得到拍摄后的图像后,此图像无法较好地满足图像处理要求的情况下,通过调用以下函数可以对图像进行一些简单的处理.(1)decompose3(MultiChannelImage , Image1, Image2, Image3 ) 将一张三通道图像(如RGB)转换为三张单通道图像 注:如果之前在步骤(1)中设置ColorSpace参数为RGB后,可对拍摄得到的图像进行此转换。(2)trans_from_rgb(ImageRed, ImageGreen, ImageBlue ,ImageResult1, ImageRes
6、ult2 , ImageResult3,ColorSpace) 将一个RGB图像转换为任意格式的图像注:ImageRed、ImageGreen、ImageBlue为decompose3函数中得到的三个单通道图像ColorSpace: 为指定图像的格式该函数运行后生成三幅单通道图像,若要合成一张三通道图像,可由compose3函数实现。2、相机标定2.1标定步骤代码部分可参考Halcon中自带的例程,位于浏览例程=摄像机标定=第一个例程(1)设置相机内部参数初始值1、Division畸变模型cameraParam: Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth
7、, ImageHeight2、Polynomial畸变模型CameraParam:Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight 注:当镜头为远心镜头时,Focus=0;Division畸变模型只适用于精度要求不是很高,标定图片数量较少的情况;Polynomial畸变模型对镜像畸变和切向畸变都校正,精度较高,花费时间长. Focus:镜头的标称焦距 Kappa、K1、K2、K3、P1、P2可全部初始化为0 Sx和Sy是相邻像元的水平和垂直距离 由CCDCMOS确定建议取值 Cx和Cy是光心坐标初始值,可分别取
8、ImageWidth和ImageHeight大小的一半 ImageWidth和ImageHeight 由Halcon中进行处理的图片大小决定例:StartCamPar:=0。016,0,0.0000074,0.0000074,326,247,652,494(2)标定板初始化 在代码中指定标定版描述文件(该类文件位于Halcon安装目录下的calib目录下) 注:在此目录下有若干个不同的描述文件,选择时应根据实际使用的标定版大小进行选择。如:实际使用标定版大小为30mm30mm,则应选择文件名为:“caltab_30mm。descr”的文件。例:CaltabName := caltab_30mm
9、。descr(3)从标定版描述文件中读取标记中心点(中心点在后续步骤中需使用) caltab_points (CaltabName, X, Y, Z) (4)读入图像,确定点在图像中的信息read_image (Image,Filename) 读取事先拍摄好的标定版图像 find_caltab(Image : Caltab : CalTabDescrFile, SizeGauss, MarkThresh, MinDiamMarks : ) 在图像中提取出标定版以便于后续的处理find_marks_and_pose(Image, CalTabRegion : : CalTabDescrFile,
10、 StartCamParam, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks : RCoord, CCoord, StartPose) 将图像中点的数据写入RCoord和CCoord中注:根据图像(拍摄标定版在不同图像区域)的个数对以上步骤进行循环,依次读入不同图像并进行标定。由于有不同图像,因此需要每次获取的RCoord、CCoord和StartPose加入到一个元组中(5)完成标定 camera_calibration( : : NX, NY, NZ, NRow, NCol, StartCam
11、Param, NStartPose, EstimateParams : CameraParam, NFinalPose, Errors) 通过将(4)中获取的数据传入该函数,完成最后的标定。最终可得到相机的标定后的外参内参。3、手眼系统标定 代码部分可参考Halcon中自带的例程,位于浏览例程=手眼系统标定=第二个例程3。1 标定步骤(1)见相机标定步骤(1)(2)见相机标定步骤(2)(3)见相机标定步骤(3)(4)读入图像和机械臂末端位置,循环进行标定 read_image (Image,Filename) 读取事先拍摄好的标定版图像find_caltab(Image : Caltab :
12、CalTabDescrFile, SizeGauss, MarkThresh, MinDiamMarks : ) 在图像中提取出标定版以便于后续的处理find_marks_and_pose(Image,CalTabRegion,CalTabDescrFile, StartCamParam, StartThresh, DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks,RCoord, CCoord, StartPose) 将图像中点的数据写入RCoord和CCoord中read_pose( PoseFile,Pose) 读入当前机
13、器臂末端坐标系相对于机器人基准坐标系的坐标点与三轴旋转角度(6自由度)注:1、此函数采用文件名作为参数,读入的文件中包含有事先输入的图像中机器臂当前的坐标,此坐标可由机器人运动学正解公式得到。2、相机的z轴方向沿镜头向外,x轴方向为垂直z轴方向向图片的正右方,y轴方向以右手螺旋定则确定。3、机器手基准坐标(世界坐标)的选取中x轴方向须与摄像头x轴方向一致,否者结果会产生一定的偏差。4、文件的生成可参考 Halcon自带例程“手眼系统标定”=第一个例程。(5)完成标定hand_eye_calibration( X, Y, Z, Row, Col, NumPoints, RobotPoses, C
14、ameraParam, Method, QualityType , CameraPose, CalibrationPose, Quality) 步骤(4)所获取的点的数据和相机标定后的内部参数作为此函数的参数输入,得到机器人基准坐标系相对于相机坐标系的位姿和标定物在机器人基准坐标系中的位姿.注:最终得到的两个参数建议写入文件,以便于后续使用.可采用write_pose( Pose, PoseFile ) 函数写入进指定文件内。4、图像坐标和机器臂坐标转换代码部分可参考Halcon中自带的例程,位于浏览例程=手眼系统标定=第四个例程4.1 转换步骤(1)读取相机参数和手眼系统标定后得到的两个位姿
15、read_cam_par( CamParFile ,CameraParam) 读取相机标定后内部参数read_pose( PoseFile,Pose) 读取手眼标定后得到的机器人基准坐标系相对于相机坐标的位姿和标定物在机器人基准坐标系中的位姿。(2)定义一个参考坐标系define_reference_coord_system(ImageName,CamParam, CalplateFile, WindowHandle ,PoseCamRef) 输入标准标定板文件以及此文件对应型号的标定板被拍摄的图像,建立一个参考坐标系 注:由于采用单目相机,因此无法直接确定待抓取物体的深度信息,因此引用参考坐标系,并且保证此参考坐标系与待抓取物体处于同一平面,这样就可以通过标准的标定板信息引入所需要的深度信息。(3)为了便于计算,将位姿转换为齐次矩阵pose_to_hom_mat3d( Pose ,HomMat3D) 注:此步骤主要涉及到两个位姿的转化,分别为机器人基准坐标相对于相机坐标的位姿和参考坐标系在相机坐标系中的位姿。(4) 提取出待抓取物体的位姿(像素坐
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1