VM算法平台-齿轮测量方案(Group+脚本输出+TCP通讯+圆拟合)
(新手入门篇)对于新手来说,我也是踩了很多坑,因此分享的案例较综合,可参考进行学习,有更优解也请留言互相学习

废话不多说,直接上需求:需测量出齿轮中心到顶点的距离并输出数据(自己加了个圆拟合)。

大致案例项目流程及输入输出:


现在进入主题:如何进行实现。

模块输入输出步骤:(可直接看模块序号即可知道步骤)

1.输入‘图像源’

2.‘快速匹配’:对齿轮顶点部位进行匹配(可调节ROI区域以防检测到其他多余的部分),并调整相关参数以检测到所有齿轮

3.‘位置修正’

4.‘圆查找’:进行位置修正以方便‘圆查找’进行匹配(防止因产品位置变动而找不到圆,此处利用找齿轮边缘的修正信息可能依

旧造成误差,可新建‘快速匹配’只匹配圆,并进行‘位置修正’,再结合‘圆查找’来获取圆更精准的信息)

5.添加‘Group’:进入group循环模块之前设置(扳手图标)好“输入设置”和“循环设置”,输入图像、匹配框、输出圆环的信息,循环结束值为匹配到的个数

6.进入‘Group’模块,添加位置修正:位置补正选按坐标,原点X、原点Y、角度分别链接上输入其中的‘快速匹配’模块的匹配框中心X,匹配框中心Y,角度。(模块设置内执行只会执行一次,运行流程按钮将会进行循环并显示所有修正点,后续一样)

!!!注意:此处一定要在后面的中括号中链接上循环索引(此步骤至关重要)

7.‘顶点检测’:绘制一个矩形框选中一个齿轮顶点部位,并选中位置修正并执行以获取所有的顶点

8.‘点圆测量’:输入获取到的顶点,并将外部输入的圆的信息依次输入并执行,以获取所有点到圆心的距离

9.将获取的顶点信息用点集进行收集,并输出‘Group’模块便于进行‘圆拟合’(不使用点集直接输出的顶点信息不能进行圆拟合)

10.‘图形收集’:将需要显示的信息进行收集,并输出‘Group’模块便于(在流程中)进行显示

11.‘数据集合’:将获取到的所有的圆心到顶点的距离信息进行收集,并输出‘Group’模块便于脚本进行处理

12.离开‘Group’模块,进入group循环模块设置(扳手图标):配置好“输出信息”和“显示设置”,输出获取的顶点的点集、获取的圆心到顶点的数据集合。显示中输出图像收集的点、直线和文本

13.‘圆拟合’:(此处为自行增加的),输入点集的数据进行拟合圆

14.‘脚本’编写:设置输入 float 类型的数据集合和 int 类型的快速匹配的匹配个数,输出为所有距离、最大值、最小值、平均值和中位数。具体代码为图片内所显示(因截图限制,已压缩)

以下为完整代码,脚本内代码如下:

using System;
using System.Text;
using System.Windows.Forms;
using Script.Methods;
public partial class UserScript:ScriptMethods,IProcessMethods
{
//the count of process
//执行次数计数
int processCount ;

/// <summary>
/// Initialize the field's value when compiling
/// 预编译时变量初始化
/// </summary>
public void Init()
{
//You can add other global fields here
//变量初始化,其余变量可在该函数中添加
processCount = 0;

}

/// <summary>
/// Enter the process function when running code once
/// 流程执行一次进入Process函数
/// </summary>
/// <returns></returns>
public bool Process()
{
//You can add your codes here, for realizing your desired function
//每次执行将进入该函数,此处添加所需的逻辑流程处理
int a = in1;
float[] sun = new float[a];

GetFloatArrayValue("in0", ref sun, out a); //输入

//对数据进行数据处理输出
float max = sun[0]; //最大值
float min = sun[0]; //最小值
float sum = 0; //总和(计算平均值)

for (int i = 0; i < a; i++)//输出
{
SetFloatValueByIndex("out0", sun[i], i, a);
sum += sun[i]; //计算总和

if (sun[i] > max)
{
max = sun[i];
}
if (sun[i] < min)
{
min = sun[i];
}
}

float avg = sum / a; //计算平均值
SetFloatValue("average", avg); //设置平均值

// 计算并输出中位数
Array.Sort(sun);
float median;
if (a % 2 == 0)
median = (sun[a / 2 - 1] + sun[a / 2]) / 2;
else
median = sun[a / 2];

SetFloatValue("max", max);
SetFloatValue("min", min);
SetFloatValue("median", median);
return true;
}
}

15.‘格式化’需要输出的脚本信息


16.‘发送数据’给需要获取信息的设置(上述在通信管理中通过TCP客户端连接到了服务器,并当服务器发送Run时运行流程将数据发送出去)

17.可在流程1中配置(扳手图标)好需要输入/输出或显示设置的信息,当流程运行时将直观的看到流程中进行的操作

---end

附件内含有TCP通讯模块和方案原图及项目sol文件



附件:
版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

西门子S7SMART200与VM通讯

下一篇

相机掉线响应配置测试

评论请先登录 登录
全部评论 3

有没有把全部图片跑一边,里面有几张不太行啊?模板匹配感觉是有点问题?

2024-02-21 10:12:30 陕西省
回复

**,这么详细

2023-11-29 10:44:25 广东省
回复

😱大神真厉害

2023-11-27 14:14:00 上海
回复
  • 1
Lv.0
2
关注
11
粉丝
1
创作
27
获赞
相关阅读
  • VM4.4更新亮点
    2024-04-12 浏览 0
  • 第二届启智杯—光伏电池片质检视觉方案设计
    2024-04-15 浏览 0
  • 第二届启智杯-锂电外壳外观检测3D视觉方案设计
    2024-04-15 浏览 0
  • 第二届启智杯-无监督异常检测算法
    2024-04-16 浏览 0
  • 双车联动调试案例-华工中试基地
    2024-04-28 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器