Halcon.docx
《Halcon.docx》由会员分享,可在线阅读,更多相关《Halcon.docx(18页珍藏版)》请在冰豆网上搜索。
![Halcon.docx](https://file1.bdocx.com/fileroot1/2022-11/15/2d998af9-7a47-43ad-bff3-3964bac97903/2d998af9-7a47-43ad-bff3-3964bac979031.gif)
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:
图像采集设备的名称
可通过以下步骤确定:
1、在Halcon菜单栏里点击“窗口”,选择“打开算子窗口”。
(若算子窗口已打开则直接进入第二步)
2、在“输入算子或函数”栏内输入“open_framegrabbe"回车后出现下图
3、在“参数"栏中的Name后点击
即可自动检测连接的设备(笔记本电脑摄像头检测后为’DirectShow')
此参数若随意填写,可能导致程序报错
HorizontaResolution、VerticalResolution:
预期的图像采集接口的水平分辨率和垂直分辨率
ImageWidth、ImageHeight:
预期图像的宽度和高度部分
StartRow、StartColumn:
显示预期图像的开始坐标
Field:
预期图像是一半的图像或者是完整图像
BitsPerChannel:
每像素比特数和图像通道
ColorSpace:
获取图像的输出形式(gray、raw、rgb、yuv、default)
说明:
此参数设置不同的值可以得到不同的图像效果,如设置“gray”则后续拍摄的图像为灰度图;选择“rbg"则会显示彩色图像
Generic:
通用参数与设备细节部分的具体意义
ExternalTrigger:
是否有外部触发器
CameraType:
使用相机的类型
Device:
连接到的设备
说明:
此参数用于区分不同的摄像头,因此在连接多摄像头时需要设置不同的值.如程序中需要连接两个摄像头,则需要分别设值为‘0’和‘1’.
Port:
连接到的端口
LineIn:
相机输入的多路转换器
AcqHandle:
图像获取设备的Handle
说明:
此参数设置与Device类似,在同一程序中若有不同的相机也需要设置不同的值。
并且此参数在后续摄像头进行拍摄时需要使用.
注:
上述没有特别说明的参数,如果没有特定要求,则均可以设置为默认值。
(2)进行拍摄
grab_image(Image,AcqHandle)从指定图像采集装置抓取图像
注:
Image:
采集后的图像将会保存在此变量中
AcqHandle:
图像采集设备的Handle,由步骤
(1)的函数唯一确定。
(3)关闭设备
close_all_framegrabbers()关闭所有连接的摄像头
1.2后续处理函数
此部分内容主要用于在得到拍摄后的图像后,此图像无法较好地满足图像处理要求的情况下,通过调用以下函数可以对图像进行一些简单的处理.
(1)decompose3(MultiChannelImage,Image1,Image2,Image3)将一张三通道图像(如RGB)转换为三张单通道图像
注:
如果之前在步骤
(1)中设置ColorSpace参数为‘RGB’后,可对拍摄得到的图像进行此转换。
(2)trans_from_rgb(ImageRed,ImageGreen,ImageBlue,ImageResult1,ImageResult2,ImageResult3,ColorSpace)将一个RGB图像转换为任意格式的图像
注:
ImageRed、ImageGreen、ImageBlue为decompose3函数中得到的三个单通道图像
ColorSpace:
为指定图像的格式
该函数运行后生成三幅单通道图像,若要合成一张三通道图像,可由compose3函数实现。
2、相机标定
2.1标定步骤
代码部分可参考Halcon中自带的例程,位于浏览例程=》摄像机标定=》第一个例程
(1)设置相机内部参数初始值
1、Division畸变模型
cameraParam:
[Focus,Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight]
2、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是相邻像元的水平和垂直距离由CCD\CMOS确定建议取值
Cx和Cy是光心坐标初始值,可分别取ImageWidth和ImageHeight大小的一半
ImageWidth和ImageHeight由Halcon中进行处理的图片大小决定
例:
StartCamPar:
=[0。
016,0,0.0000074,0.0000074,326,247,652,494]
(2)标定板初始化
在代码中指定标定版描述文件(该类文件位于Halcon安装目录下的calib目录下)
注:
在此目录下有若干个不同的描述文件,选择时应根据实际使用的标定版大小进行选择。
如:
实际使用标定版大小为30mm*30mm,则应选择文件名为:
“caltab_30mm。
descr”的文件。
例:
CaltabName:
='caltab_30mm。
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,StartCamParam,StartThresh,DeltaThresh,MinThresh,Alpha,MinContLength,MaxDiamMarks:
RCoord,CCoord,StartPose)将图像中点的数据写入RCoord和CCoord中
注:
根据图像(拍摄标定版在不同图像区域)的个数对以上步骤进行循环,依次读入不同图像并进行标定。
由于有不同图像,因此需要每次获取的RCoord、CCoord和StartPose加入到一个元组中
(5)完成标定
camera_calibration(:
:
NX,NY,NZ,NRow,NCol,StartCamParam,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:
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)读入当前机器臂末端坐标系相对于机器人基准坐标系的坐标点与三轴旋转角度(6自由度)
注:
1、此函数采用文件名作为参数,读入的文件中包含有事先输入的图像中机器臂当前的坐标,此坐标可由机器人运动学正解公式得到。
2、相机的z轴方向沿镜头向外,x轴方向为垂直z轴方向向图片的正右方,y轴方向以右手螺旋定则确定。
3、机器手基准坐标(世界坐标)的选取中x轴方向须与摄像头x轴方向一致,否者结果会产生一定的偏差。
4、文件的生成可参考Halcon自带例程“手眼系统标定”==》第一个例程。
(5)完成标定
hand_eye_calibration(X,Y,Z,Row,Col,NumPoints,RobotPoses,CameraParam,Method,QualityType,CameraPose,CalibrationPose,Quality)步骤(4)所获取的点的数据和相机标定后的内部参数作为此函数的参数输入,得到机器人基准坐标系相对于相机坐标系的位姿和标定物在机器人基准坐标系中的位姿.
注:
最终得到的两个参数建议写入文件,以便于后续使用.可采用
write_pose(Pose,PoseFile)函数写入进指定文件内。
4、图像坐标和机器臂坐标转换
代码部分可参考Halcon中自带的例程,位于浏览例程=》手眼系统标定=》第四个例程
4.1转换步骤
(1)读取相机参数和手眼系统标定后得到的两个位姿
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)提取出待抓取物体的位姿(像素坐