Professional Documents
Culture Documents
康耐视相机操作使用说明书
文档密级 □不保密■内部□机密
文件状态: 项目名称
版本号 1.0
■草稿 描述 康耐视相机操作使用说明书
□修改
□定稿 编写人 余国鹰 编写日期 2015/9/10
审核人 审核日期
上海新时达机器人有限公司
目录
一、 康耐视相机具体设置 ........................................................................................................................ 3
二、 相机标定 ............................................................................................................................................ 7
三、 示教器示例程序 .............................................................................................................................. 11
五、 细节说明 .......................................................................................................................................... 17
康耐视相机操作使用说明书
一、 康耐视相机具体设置
1.1 软件安装
双击康耐视相机软件 Cognex_In-Sight_Software_4.8.1,按照步骤一步步安装即可。
1.2 流程编辑
图 1.1
3. 双击相机设备(红色椭圆内设备图标)
,进入相机编辑界面,如下图 1.2 所示。
图 1.2
上海新时达机器人有限公司
4. 在应用程序步骤中,开始、设置工具、配置结果、完成这 4 个步骤形成一个完整的相机操
作流程;
开始 单击“开始”中“已连接”,如下图 1.3 所示,可以进行连接设备、断开设备、刷
新、添加等操作。
图 1.3
单击“开始”中的“设置图像” ,如下图 1.4 所示。
在“采集/加载图像”对话框中,“触发器”按钮是进行拍照,“实况视频”按钮是实时显示相
机中的图像,“从 PC 加载图像”按钮是加载一张存在的图像。
图 1.4
在“编辑采集设置”对话框中,设置一系列相机参数,根据具体需要进行调节
设置工具 单击“设置工具”中“定位部件”按钮,对检测模型进行定位,作为识别的
模型进行对比;单击“设置工具”中“检测部件”按钮,对模型进行编辑操作。
在“定位部件”的设置对话框中,如下图 1.5 所示,合格阀值:每次拍照之后的得分如果
大于阀值,则拍照成功,否则失败;旋转公差:检测部件能够旋转的角度范围,如果在
范围之类则会拍照成功,否则会失败
康耐视相机操作使用说明书
图 1.5
配置结果 单击“配置结果”中“通信”按钮,进行通讯设置操作,如下图 1.6 所示。
新时达机器人视觉通信采用的 TCP/IP 通讯方式,单击“TCP/IP” ,如下图 1.7 所示,在
“TCP/IP 设置”对话框中,“服务器主机名”设为 192.168.39.220(机器人控制器 IP 地址),
“端口”设置与 CodeSys 中相同,本例中设为 9876,
“超时时间”设为 15000, “结束符”
设为字符串(CR13) 。
单击“格式化输出字符串” ,进行输出操作,如下图 1.8 所示。勾选“使用分隔符”,表示
在输出之间用逗号分隔符进行隔开,方便进行数据处理操作;单击“添加”按钮,可以
输出很多数据,这里只需要输出 4 个数据, “失败”、“定位器.X”、 “定位器.Y”、“定位器.
角度” ;
输出数据说明:均为 7 个字节宽度,除图案.失败是整形外,其它数据均为浮点型,小数
点位数为 2 位。
1) 第一位图案.失败:判定符,为 0 表示采集到特征,拍照成功;为 1 则拍照失败。
2) 第二位图案.定位器.X:输出用户坐标系下的 X 方向绝对值。
3) 第三位图案.定位器.Y:输出用户坐标系下的 Y 方向绝对值。
4) 第四位图案.定位器.角度:输出用户坐标系下的相对角度。
图 1.6
上海新时达机器人有限公司
图 1.7
图 1.8
完成 在“完成”中单击“保存作业”,则保存当前作业任务中的所有设置;在“完
成”中单击“运行作业”
,则运行当前作业任务。
注意,以上参数设定必须在脱机模式下才能够设置,在联机状态下参数不能设置,与外
界设备实时通讯必须在联机模式下;物体旋转一定角度拍照失败,看检测部件是否超过相机
视野范围和旋转角度值设置是否合理。
二、 相机标定
要实现将相机采集的数据转换为机器人坐标系下的位姿数据,必须建立相机坐标系与机
器人坐标系的对应转换关系,该过程通过相机标定来实现。
相机也分平面相机和三维相机,前者只支持平面数据采集,后者则可以获取 xyz 空间值。
以三维相机为例,要详细建立相机三维空间的位置与机器人坐标系的对应关系,必须通过严
格的手眼标定来实现。不同相机有手眼标定算法,通过示教多个点来建立手眼转换关系。这
里不详述。
如果只做平面工件抓取,那只需要工件变化的坐标值 x、y 以及绕 z 轴的转动角度 c,问
题就简单的多,只需要进行平面的简单标定即可实现。以康耐视相机为例,格力等客户只需
要实现流水线来料的抓取操作,标定平面坐标系即可,康耐视相机可以提供移动后的工件相
对于移动前的偏移位置量,或者提供工件的绝对移动位置。这里,我们提供这两种工作方式
的实现过程。
2.1 相机校准
相机默认输出的坐标值是相机采集到的像素值,并非实际工件位置尺寸,因此需要将物
理坐标与像素值进行映射标定。设定校准后,可使测量结果像素值转换为实际尺寸并输出,
康耐视提供了校准参数的制作过程。
1.单击“设置图像“,界面右下角出现下图 2.1 所示界面。校准类型中有很多种,根据实
际需要选择,这里选择“网格” ,然后单击“校准”按钮,出现下图 2.2 所示界面。
图 2.1
2.打印校准网格纸张。在图 2.2 中,单击“打印网格”按钮,然后将打印的网格纸张放在
相机视野正中间。
3.在“设置”界面中,“网格类型”为方格图案(带基准) ,其它值均为默认。
,进入姿势设置界面,如图 2.3 所示,原点位置为默认,单击“触发器”
4.单击“姿势”
按钮, 相机会自动拍照,最后单击“校准”,校准工作就结束。
,可以查看校准情况,如图 2.4 所示。
5.单击“结果”
上海新时达机器人有限公司
图 2.2
图 2.3
康耐视相机操作使用说明书
图 2.4
6.建立检测模型。单击“定位部件”,出现如图 2.5 所示界面,单击“位置工具”中“图
案”,然后单击“添加”,单击“OK”,接着单击界面右下角“模型” ,拖动绿色模型矩形框,
使被检测模型处于绿色矩形框中,最后单击界面右下角“训练”,此时检测模型已经建立。
图 2.5
7.查看模型建立是否成功。在界面右侧选择板中,可以查看建立图案的情况,绿色圆点表
示模型建立成功,同时会输出检测模型的位置、角度、得分,如图 2.6 所示。
图 2.6
通过以上7步即可完成相机的校准过程。
2.2 绝对坐标实现
绝对坐标的实现必须借助机器人的用户坐标系,即机器人在用户坐标系下走绝对位置运
动。具体实现由以下几个步骤组成。
首先,用step机器人三点法示教出一个固定用户坐标系。用户坐标系的原点根据实际情
况而定,一般选择流水线上一个固定位置参考点,该参考点要方便相机进行坐标转化标定。
关于用户坐标系的标定,可参见新时达机器人操作使用说明书;
其次,进行相机坐标与实际位置坐标的标定转换。在完成第一步中的固定用户坐标系标
定后,在该坐标系下选取工件上的三点,计算出这三点在用户坐标系的X、Y值(该步骤可通
过机器人协助示教获得在用户坐标系下的位姿值)。在图像输入的“校准”模块中,按照2.1
中的步骤完成相机坐标与实际位置坐标的校准参数制作转换;
最后,机器人实现绝对位置运动。在完成第二步后,工件每偏移一点,相机均可计算出
其在用户坐标系下新的位置值X、Y和绕Z轴的theta角度值。这样,只需要在示教器程序中设
上海新时达机器人有限公司
置抓取运动点参考的坐标系为用户坐标系即可,即RefSys语句下走绝对cpe点。该cpe点是
codesys里直接读取的相机返回值。
2.3 相对坐标实现
相对坐标的实现就比较简单,只需要将相机坐标转换为实际位置坐标即可。在工件上选
取三个特征点,用带尖机器人示教出这三点在机器人基坐标系下的坐标值(主要是X和Y)。
按照2.1中的校准流程制作出校准参数。这样,工件偏移后,相机可以直接计算出其新的坐标
X、Y和theta。
需要注意的是,使用相对坐标运动时,相机输出数据必须是相对量,即测量坐标与基准
坐标之差,而不是绝对测量坐标。具体信息见后续章节。
康耐视相机操作使用说明书
三、 示教器示例程序
3.1 绝对坐标实现范例
Tool(tool0);//若带工具,则先加载好
PTP(ap0); //走到一个安全位置点
Lin(cp3);//走到标准抓取位置(工件处于标准位置时机器人的抓取位姿,提前示教好)
RefSys(ref1);//切到用户坐标系下
WaitTime(uint3);
BOOLEXTSet(boolbasepos,TRUE);//端口号为2,发送信号到codesys,读取当前位置作为标准
抓取位置
WaitTime(uint4);
BOOLEXTSet(boolbasepos,FALSE);//关闭该端口
/////以上为获得标准抓取位置需要的步骤
RefSys(WORLD);
PTP(ap0);
LP:int0;
BOOLEXTSet(boolphoto,TRUE); //发送相机拍照命令,端口号0
WaitTime(uint0); //等待PLC处理时间,建议在300ms以上
bool0:=BOOLEXTRead(boolenableget); //读取抓取标志位,为TRUE则能抓取
BOOLEXTSet(boolphoto,FALSE); //关闭该端口,保证下次为高电平触发
IF(bool0=0)THEN //为true则可抓取,否则重新发送拍照命令
WaitTime(uint1);
GOTO(int0);
END_IF
RefSys(ref1); //切到用户坐标系下
Lin(rcpe0); //走到codesys里输出的绝对位置(外部点形式,端口号0)
BOOLEXTSet(boolfinishget,TRUE); //发送抓取完成标志
WaitTime(uint2);
BOOLEXTSet(boolfinishget,FALSE); //关闭抓取完成标志
PTP(ap1);
GOTO(int1); //回到循环开始,等待下一个工件
3.2 相对坐标实现范例
Tool(tool0);//若带工具,则先加载好
PTP(ap0); //走到一个安全位置点
Lin(cp3);//走到标准抓取位置(工件处于标准位置时机器人的抓取位姿,提前示教好)
WaitTime(uint3);
BOOLEXTSet(boolbasepos,TRUE);//端口号为2,读取当前位置作为标准抓取位置
WaitTime(uint4);
上海新时达机器人有限公司
BOOLEXTSet(boolbasepos,FALSE);//关闭该端口
/////以上为获得标准抓取位置需要的步骤
PTP(ap0);//回到安全点
LP:int0;
BOOLEXTSet(boolphoto,TRUE); //发送相机拍照命令,端口号0
WaitTime(uint0); //等待PLC处理时间,建议在300ms以上
bool0:=BOOLEXTRead(boolenableget); //读取抓取标志位,为TRUE则能抓取
BOOLEXTSet(boolphoto,FALSE); //关闭该端口,保证下次为高电平触发
IF(bool0=0)THEN //为true则可抓取,否则重新发送拍照命令
WaitTime(uint1);
GOTO(int0);
END_IF
Lin(rcpe1); //走到codesys里输出的绝对位置(外部点形式,该位置是机器人当前位置加上
相对偏移,端口号1)
BOOLEXTSet(boolfinishget,TRUE); //发送抓取完成标志
WaitTime(uint2);
BOOLEXTSet(boolfinishget,FALSE); //关闭抓取完成标志
PTP(ap1);
GOTO(int1); //回到循环开始,等待下一个工件
康耐视相机操作使用说明书
四、 Codesys 逻辑开发
END_IF
IF recv.xError THEN//接收数据报错
上海新时达机器人有限公司
step:=3;
END_IF
///////////////////////以 ASCII 码的形式从 senddata 数组传给相机,给相机发送“M 回车(CR)
”命令可以采集一张
图片
2:
size2 := SIZEOF(senddata);//数组长度
senddata[0]:=16#4D;//M 的 ASCII 码,16 进制表示,是单次测量的指令。
senddata[1]:=16#0D;//回车(CR)的 ASCII 码,16 进制表示(欧姆龙相机用 MCR 来发送数据)
psend := ADR(senddata);//指令地址
send(xExecute:=TRUE,hConnection:=connect.hConnection,szSize:=size2,pData:=psend,udiTimeOut:=1000000);
IF(send.xDone = TRUE) THEN//发送成功
send(xExecute:=FALSE);//函数复位
step := 1;
END_IF
IF(send.xError = TRUE) THEN//发送报错
send(xExecute:=FALSE);
step := 3;
END_IF
5:
//数据处理程序………………………..
3: //复位后返回
connect(xEnable:=FALSE);
server(xEnable:=FALSE);
recv(xEnable:=FALSE,hConnection:=connect.hConnection,szSize:=size,pData:=precv);
step := 99;
99:
step:=0;
END_CASE
注意,多数 socket 函数都是上升沿执行,所以在调用后,应在合适的地方将其关闭(给
下降沿),这样下一周期执行时才会继续生效。否则可能造成函数执行无效,程序死循环卡死
在某一步、或者报错处理。
4.2 外部点数据处理
FB_Cartpos2Homomatrix_1(SR_RefSys_0 := Tpos);
basecamera_homomatrix := FB_Cartpos2Homomatrix_1.Ref_Homomatrix;
(* change to xyzabc*)
上海新时达机器人有限公司
//绝对坐标输出,端口号 0
EXTPos.x:=server.Pos_x; // x 和 y 值用相机输出数据
EXTPos.y:=server.Pos_y;
EXTPos.z:=BasePos.z; // z、a、b 用标准抓取位置值
EXTPos.a:=BasePos.a;
EXTPos.b:=BasePos.b;
EXTPos.c:= SR_RefSys_0.c; //theta 用转换过的角度
SetCartPos(Enable:=TRUE,PortNumber:=0,RobotCartPos:=EXTPos);
//相对坐标输出,端口号 1
EXTPos_1.x:=BasePos.x + server.Pos_x;
EXTPos_1.y:=BasePos.y + server.Pos_y;
EXTPos_1.z:=BasePos.z;
EXTPos_1.a:=BasePos.a;
EXTPos_1.b:=BasePos.b;
EXTPos_1.c:=SR_RefSys_0.c;
EXTPos_1.mode := 0;
SetCartPos(Enable:=TRUE,PortNumber:=1,RobotCartPos:=EXTPos_1);
//发送允许抓取命令
EnableGet := TRUE;
END_IF
IF FinishGet THEN
EnableGet := FALSE;
END_IF
//输出到示教器的数据,告诉示教器可以抓取
SetHMIBOOL(Enable := TRUE,PortNumber := 0, Data := EnableGet);
注意:
1) EnableGet 变量要设置为 GVL 全局变量,否则示教器会出现数据收发延迟、造成
逻辑错乱的情况。
2) 每次在更换了检测模型时,一定要注意保存和运行作业任务,然后将软件进入联
机模式,这样相机和机器人收发数据才会成功。
3) 在建立用户坐标系时,要使用带原点的三点法示教,原点为校准方格的原点,X
轴和 Y 轴方向均要同校准方格方向相同。
4) 机器人程序每次在 LP 语句之间循环,机器人不运动,检查检测部件是否超出相
机的视野范围和一些 Bool 语句是否给它下降沿信号了。
康耐视相机操作使用说明书
五、 细节说明