CogCalibNPointToNPointTool N点校正工具
作用:
将图像坐标与世界坐标(机械手坐标)的进行2d转换
(1)未校正点为像素坐标点,(2)原始已校正点是的物理坐标点(机械手坐标)
用这两组点计算最佳的2D转换,并将此2D转换保存工具中,并输出校正后的图像。
九点标定
九点标定是机器视觉中一种引导类项目常用的标定方法,用于建立相机和机械手之间的坐标变换关系。
过程:
相机检测到目标在图像中的像素位置后,
通过标定好的坐标将相机的像素坐标变换到机械手的空间坐标系中,
然后根据机械手坐标系计算出各个电机该如何运动,从而控制机械手到达指定位置
案例
模板匹配 加载九张坐标图 用于确定9个像素坐标
依次获取9个点的坐标
打开N点标定工具 填入9个像素坐标
填入机械手对应坐标 (测试阶段 可以填入相应比例的值 以第一个像素坐标为参考 (267.51,170.67 对应 (0,0) 后续根据变化添加等比例值)
点击计算校正
RMS误差越小 证明校正越准确
注意 :工作距离发生变化 要重新标定
工件只发生平移时:
方法:工件只发生平移时 直接把偏移量差值补偿给机器人 然后机器人根据补偿量进行抓取即可.
在拍照后 Mark点会发生位置偏移
计算偏移量补偿方式: x-x1 , y-y1 偏移量结果发送给机械手做为 坐标补偿 找到移动后的Mark点
代码如下:
根据标称值和拍照后的坐标进行 差值计算 然后把差值发送给PLC进行补偿
工件发生平移和旋转时:
方法:工件实际发生的偏移量和旋转时, 不能直接把偏移量差值补偿给机器人,需要结合机器人的旋转中心进行二次补偿后,把偏移量差值补偿发送给机器人,然后机器人根据补偿量进行抓取即可.
计算某个点绕另外一旋转定角度后的坐标,如图:A点(x,y)绕旋转中心点B(rx0,ry0)旋转a度后的
位置为C(X0,Y0),则有如下关系式:
A点旋转后的位置公式:
X0=cos(a)*(x-rx0)-sin(a)*(y-ry0)+rx0
Y0=cos(a)*(y-ry0)+sin(a)*(x-rx0)+ry0
计算偏移量补偿方式:
x-Y0 , y-Y0 然后把偏移量结果发送给机械手做为 坐标补偿 找到旋转后的Mark点
如何获得旋转中心坐标
方式:
机器人抓取工件分别旋转三个角度摆放到相机视野内,相机可以得到三个坐标值,通过三个坐标值拟合圆获得圆心坐标即为旋转中心
代码如下:
根据标称值和拍照后的坐标进行 差值计算 然后把差值发送给PLC进行补偿
西门子S7通信协议解析
1.西门子集团专为旗下S7系列PLC设备(可编程逻辑控制器)定制的一种通信协议,
2.支持串口和网口通信,网口通信为主 支持 TCP/IP、UDP/IPD等传输层协议
3.用于与其他设备之间的通信,如PC、变频器、传感器等
4.实现数据的读取、写入、传输和处理等功能
5. S7通信 可以选择的开源或商业库,包括s7.net、pronodave、libnodave、sharp7
使用s7netplus 完成S7通信
1.安装nuget包(s7netplus)
2.安装完成后 出现S7.net 安装成功 可以使用
3.基本使用步骤:
(1) 引用命名控件和初始化PLC对象
(2)连接plc
(3)写数据
(4)读数据
(4)断开连接
案例1:
封装PLC功能
public class SiemensPLC
{
public Plc plc = null;
CpuType plcType;
string ip;
short rack;
short slot;
// CpuType: PLC的cpu型号。实验室plc型号是1200/1212C。
// IP: PLC的IP地址。
// rack: 机台号的位置,PLC的知识点。 每个PLC设备或机架提供了一个唯一的标识。识别和管理各个设备
// slot: 插槽号的位置,PLC的知识点 代表一个特定的位置,用于插入相应的模块
// (如I/O模块、通信模块、电源模块等)。通过插槽号,可以快速地识别每个模块在PLC中的位置。
public SiemensPLC(CpuType type, string ip, short rack, short slot)
{
this.plcType = type;
this.ip = ip;
this.rack = rack;
this.slot = slot;
try
{
// 初始化PLC对象
plc = new Plc(plcType, ip, rack, slot);
}
catch (Exception ex)
{
}
}
/// <summary>
/// 连接Plc
/// </summary>
public string ConnectPlc()
{
string res = string.Empty;
try
{
plc.Open();//连接plc
res = "ConnectOK";
}
catch (Exception ex)
{
res = $"ConnectFail {ex.Message}";
}
return res;
}
/// <summary>
/// 判断PLC是否已连接
/// </summary>
/// <returns></returns>
public bool PlcIsConn()
{
return plc != null && plc.IsConnected;
}
/// <summary>
/// 向PLC写入数据
/// </summary>
/// <param name="add">地址</param>
/// <param name="value">数据</param>
public void Write(string add, object value)
{
plc.Write(add, value);
}
/// <summary>
/// 读取某个地址的内容
/// </summary>
/// <param name="add">地址</param>
/// <returns></returns>
public object Read(string add)
{
return plc.Read(add);
}
/// <summary>
/// 断开连接
/// </summary>
public void DisconnectPlc()
{
plc.Close();
}
//初始PLC对象
完成通信功能
visonPro 简单机械臂引导流程:
实操 抓取物体-拍照-放置
1,先配置程序拍照,pma1,确定中心位置
2,查看定位坐标,查看控制器上当前位置
3,根据控制器上首次的位置,计算相同位移量的9点坐标(位移量5mm合适)
4,依次填入9点坐标,运行程序,记录pma1的剩余8个点的坐标
5,pma1的9个坐标代表未标定位置 单位像素,控制器上的9个坐标代表已标定的位置 单位mm,填入NPoint工具中,运行,误差需<3
6,先恢复到拍照位,记录pma2的中心点。旋转任意度(如15度),再次记录pma2中心点。再旋转不同度数(如-15度),第三次记录pma2中心点。三点确定一个圆。这个圆的圆心就是旋转中心。
7,把得到的圆心坐标,更新到ini配置文件最后两个参数中。insp工具显示的基准xy和角,更新到ini文件的beseXYA,保存。再覆盖保存vpp,退出
8,操控控制器,移动到放料位,保存xyzr四个坐标到控制器上的放料位
9,操机移动到拍照位,运行软件vpp,调整每一个工具,4条边求一个中心点位。
10,把得到的基准坐标填入insp工具的输入对应框里。并更新ini配置文件
11,基本数据调节完成。重启控制器,复位
12,开始运行控制器,确定好取料位,并更新到控制器。
13,一步一步点击,第一次拍照,角度或者xy位置偏差,程序设置的有补偿,第二次拍照就是补偿后的图片。
14,拍完照,去放料位,有时会不动,可以点击按钮旁边的正方形按钮逐步复位(除了第三步不能复位,后续步骤都可以复位)