VP九点标定

CogCalibNPointToNPointTool    N点校正工具

2c1dac64aa0146ad93823e46de3e3683.png

作用:

 将图像坐标世界坐标(机械手坐标)的进行2d转换

(1)未校正点为像素坐标点,(2)原始已校正点是的物理坐标点(机械手坐标)

用这两组点计算最佳的2D转换,并将此2D转换保存工具中,并输出校正后的图像。

0daf1b72b0a94ae6b1ab23fe8c2379ed.png

九点标定


九点标定是机器视觉中一种引导类项目常用的标定方法,用于建立相机和机械手之间的坐标变换关系。

过程:

相机检测到目标在图像中的像素位置后,

通过标定好的坐标将相机的像素坐标变换到机械手的空间坐标系中,

然后根据机械手坐标系计算出各个电机该如何运动,从而控制机械手到达指定位置

案例
模板匹配 加载九张坐标图 用于确定9个像素坐标

89696820c3f7472c8939dcdba35b505b.png67a4d52077f34acb9890bdac481e2617.png

依次获取9个点的坐标

10ecc837d85e46c28af6786ba7eeee8c.png

打开N点标定工具  填入9个像素坐标  

2f0644d0e6cc41e0bea62ffd7464627b.png

 填入机械手对应坐标  (测试阶段 可以填入相应比例的值   以第一个像素坐标为参考 (267.51,170.67 对应  (0,0) 后续根据变化添加等比例值)

0bf6bd712f1542c1ad31d00e069f211e.png

点击计算校正

215027e6675a4e0e8d11982c256eb45d.png

RMS误差越小 证明校正越准确

8492cb640c4f4daeafdfa02891ecc63e.png

注意 :工作距离发生变化 要重新标定

 

工件只发生平移时:

方法:工件只发生平移时 直接把偏移量差值补偿给机器人 然后机器人根据补偿量进行抓取即可.

在拍照后   Mark点会发生位置偏移 

80804e9d469742dca3031ba5b2bb533c.png

计算偏移量补偿方式:  x-x1  , y-y1      偏移量结果发送给机械手做为 坐标补偿   找到移动后的Mark点

 

代码如下:

根据标称值和拍照后的坐标进行 差值计算   然后把差值发送给PLC进行补偿

d6a3d5ba2ac54a18b1d4b5e6f1dd0d8d.png

工件发生平移和旋转时:

方法:工件实际发生的偏移量和旋转时, 不能直接把偏移量差值补偿给机器人,需要结合机器人的旋转中心进行二次补偿后,把偏移量差值补偿发送给机器人,然后机器人根据补偿量进行抓取即可.


计算某个点绕另外一旋转定角度后的坐标,如图:A点(x,y)绕旋转中心点B(rx0,ry0)旋转a度后的
位置为C(X0,Y0),则有如下关系式:f415cb29143844e892001932606f0270.png

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进行补偿

a7f4dff88f8d49aaaa5feff61c0f7c8a.png

扩展:
https://wenku.baidu.com/view/8077e8c59889680203d8ce2f0066f5335b816741.html?_wkts_=1730356854048&bdQuery=%E6%9C%BA%E5%99%A8%E4%BA%BA%E4%B8%8E%E8%A7%86%E8%A7%89%E6%A0%87%E5%AE%9A%E7%90%86%E8%AE%BA%E8%AF%A6%E8%A7%A3

 西门子S7通信协议解析


1.西门子集团专为旗下S7系列PLC设备(可编程逻辑控制器)定制的一种通信协议,

2.支持串口和网口通信,网口通信为主 支持 TCP/IP、UDP/IPD等传输层协议

3.用于与其他设备之间的通信,如PC、变频器、传感器等 

4.实现数据的读取、写入、传输和处理等功能

5. S7通信  可以选择的开源或商业库,包括s7.net、pronodave、libnodave、sharp7

使用s7netplus 完成S7通信
1.安装nuget包(s7netplus)

2f6f30f4f1d14d9fac8dd7262e3705b5.png

2.安装完成后 出现S7.net 安装成功 可以使用

7c852581d3b441298cdd2890fcfce778.png

3.基本使用步骤:

(1) 引用命名控件和初始化PLC对象

69886e09c2694f04b3188a9e765d44c9.png

c71316fb3ffe4aec950a3878006be75c.png

(2)连接plc

c69c2d6380ed4092833bcc978c275f93.png

(3)写数据

eccbe19dc1c04b999d68c883d2727a56.png

(4)读数据

2028b2235f304896af4bd00adf881e29.png

(4)断开连接

f975684879d64aa598968c4dbeec5106.png

案例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对象

dea0028584734bd99b26142df52288de.png

完成通信功能

5c3bf363bd5646968be01c128de39bec.png

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,拍完照,去放料位,有时会不动,可以点击按钮旁边的正方形按钮逐步复位(除了第三步不能复位,后续步骤都可以复位)

 

VP棋盘格图像主要用于计算机视觉领域的图像处理和模式识别任务,它将图像划分为若干个大小相等的小方块,以便对图像进行分析和处理。然而,并不是所有的操作都适用于VP棋盘格图像类型。 首先,VP棋盘格图像类型不适用于一些基于像素点的操作,因为它将图像分割为小方块,而这些操作通常是基于像素级别的操作。例如,改变像素的亮度、对比度或颜色等,这些操作通常需要将每个像素点独立处理,而棋盘格图像类型无法直接提供单个像素点的信息。 其次,一些基于图像区域的操作也不适用于VP棋盘格图像类型。在一些图像处理任务中,需要对图像中的连续区域进行处理,例如图像的平滑和分割等。然而,VP棋盘格图像类型将图像划分为离散的小方块,无法提供连续区域的信息,因此这些操作无法直接应用于VP棋盘格图像类型。 此外,一些基于图像纹理特征的操作也不适用于VP棋盘格图像类型。在一些模式识别任务中,需要提取和分析图像的纹理特征,以进行分类或识别等任务。然而,棋盘格图像类型对图像进行了分割,导致一些纹理特征在小方块之间断裂或丢失,从而影响了这些操作的准确性和效果。 综上所述,VP棋盘格图像类型主要适用于一些整体性的图像处理和模式识别任务,如相机标定和特征点匹配等。而一些基于像素点、图像区域或纹理特征的操作则不适用于VP棋盘格图像类型,需要使用其他图像类型或方法来完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值