最近几个项目接触了定位引导项目,记录一下
一、进行标定
使用找边,找圆工具确定像素点。
1、相机不在手上
1.1、上相机标定
首先是九点标定
可以使用戳点,印圆等简便、快捷的方式在上相机视野中心的纸上留下痕迹,方便使用工具去找线、找圆。获取像素坐标。
将像素点和实际坐标点放到CogCalibNPointToNPointTool对应位置。
输入完九个点后,点击计算校正,即可完成九点标定。
旋转中心标定
这次我们需要用到CogFitCircleTool
先把图片过一下CogCalibNPointToNPointTool,将像素坐标转为世界坐标,再用找线、找圆工具,获取坐标。将坐标输入到CogFitCircleTool中,
最少三个点,多多益善。
输入完点后,点击运行,在结果界面出现中心X和中心Y,即为旋转中心的圆心。
至此,九点标定和旋转中心标定完成。
二、进行运算
2、根据实际产品做模板。
根据产品,找到合适的特征,并以此为计算需要X、Y和R三个数据。
先在做一个抓取的模板位置,记录当前的MarkX、MarkY和MarkR。然后随机放位置,获取当前的X、Y和R。
//Mark点
double point1X = Convert.ToDouble(CogToolBlock1.Outputs["MarkX"].Value);
double point1Y = Convert.ToDouble(CogToolBlock1.Outputs["MarkY"].Value);
double point1R = Convert.ToDouble(CogToolBlock1.Outputs["MarkR"].Value);
//旋转中心
double circleCenterX = cogFitCircleTool1.Result.GetCircle().CenterX;
double circleCenterY = cogFitCircleTool1.Result.GetCircle().CenterY;
//输入的点
double point2X = Convert.ToDouble(CogToolBlock1.Outputs["X"].Value);
double point2Y = Convert.ToDouble(CogToolBlock1.Outputs["Y"].Value);
double point2R = Convert.ToDouble(CogToolBlock1.Outputs["R"].Value);
angle = (point1R - point2R);//正负需要测试确认
double xr = Math.Cos(angle) * (point1X - circleCenterX) - Math.Sin(angle) * (point1Y - circleCenterY) + circleCenterX;//先旋转到同一角度
double yr = Math.Cos(angle) * (point1Y - circleCenterY) + Math.Sin(angle) * (point1X - circleCenterX) + circleCenterY;
cdX = point2X - xr;
cdY = point2Y - yr;
cdX、cdY、angle即为所求的当前模板位的相对差值。
特别注意:angle的正负需要测试确认。