C#运动控制加视觉定位框架,程序用来取放料,控制卡用的是正运动ZMC408CE总线运动控制卡,控制六个电机,XY轴,两个Z轴,两个旋转轴,相机用的是海康,3个海康相机,视觉采取用海康SDK加Halcon动态库开发出来的,支持取料定位,纠偏和放料定位,视觉部分支持产品模板创建和保存,九点标定模板创建和保存,软件框架扩展性比较强,方便学者自己扩展 基础为零的人不要拍,适合有基础的人学习 有配套视频教程有配套视频教程有配套视频教程有配套视频教程有配套视频教程 超级详细讲解教程,带你手把手写代码,从编写思路给你讲起

(基于 thinger.VisionDemo 套件 V1.0)


1. 产品定位

本框架面向“即插即用”型自动化设备,将运动控制(步进/伺服/直线电机)、2D 视觉定位(Halcon 内核)与手眼标定封装为统一 API。

开发者无需关心底层协议与算法细节,仅通过“配置 + 调用”即可完成:

  • 相机管理
  • 模板创建/匹配
  • 九点/旋转中心标定
  • 自动取放料验证

2. 系统架构

层级 模块 职责 关键技术点
表现层 VisionDemo.exe 交互式标定与调试界面 WinForm + 异步 Task
业务层 VisionControlLib.dll 可复用 UI 控件 HeadPanel、NaviButton、ExcuteState
算法层 VisionDAL.dll 视觉/运动/标定算法 Halcon 脚本级封装
驱动层 ZmotionEx.dll 运动卡 API 适配 统一异常、单位转换
硬件层 海康工业相机 采集 + 软/硬触发 多实例并发

3. 核心流程速览

3.1 相机初始化

  1. 枚举网口/USB 设备 → 自动填充下拉框
  2. 一键打开 → 自动加载默认曝光/增益/帧率
  3. 支持运行时热插拔,异常自动重连

3.2 模板创建(以“圆查找”为例)

  1. 采集图像 → 自动灰度化
  2. 交互绘制 ROI → 生成环状卡尺
  3. 调节参数(点数、阈值、平滑)→ 实时预览轮廓
  4. 保存为 *.shm 目录(含模型 ID、卡尺几何、基准角度)

3.3 九点标定(上相机场景)

  1. 设定 9 点网格偏移量 (MoveX, MoveY)
  2. 自动流程:
    回零 → 取料 → 拍照 → 图像坐标 → 物理坐标 → 放料 → 回零
  3. 收集 9 组 (ImageX, ImageY, PhysX, PhysY)
  4. 调用 HomVectorToHomMat2d 生成仿射矩阵
  5. 保存为 *.cal 目录(含 HomMat2D、位置信息、吸嘴编号)

3.4 旋转中心标定(可选)

  1. 任意取 3~5 点旋转数据
  2. 最小二乘拟合圆心 → 得到旋转中心像素坐标
  3. 通过已标定的 HomMat2D 映射为物理坐标
  4. 补偿 9 点数据 → 重新计算 HomMat2D

3.5 自动验证

  1. 随机料位拍照 → 圆查找 → 仿射变换 → 物理坐标
  2. 运动到目标位 → Z 轴下降 → 吸气 → 回归 → 放气
  3. 记录偏移量,输出重复精度报表

4. 控件与 API 设计

4.1 HeadPanel(可拖动面板)

  • 属性链式调用:
    ThemeColor / TitleText / BorderWidth / LinearGradientRate
  • 内置双缓冲,支持 200 Hz 以上 UI 刷新无闪烁

4.2 ExcuteState(三色状态灯)

枚举状态:Done(绿) / Excute(蓝旋转) / Error(红) / None(灰)

线程安全:内部 Invoke 切换 UI 线程

4.3 业务 API 示例(伪代码,屏蔽核心参数)

// 一次性初始化
var hk = new HikHelper();
hk.OpenCamera("MV-CE050-10GC");
hk.SetTriggerMode(TriggerMode.On);

// 模板创建
var model = new ShapeModelHelper();
model.CreateShapeModel(hImage, roi, out modelId);

// 标定
var cal = new CalibrationHelper();
cal.CollectPoint(imagePos, robotPos);   // 循环 9 次
var homMat2D = cal.ComputeHomMat();   // 内部调用 Halcon 算子
cal.Save(homMat2D, "./Pick.cal");

// 生产定位
var (px, py) = model.Find(hImage);
var (rx, ry) = cal.Transform(px, py);   // 像素→物理
zmotion.MoveXY(rx, ry);

5. 自动标定序列(上相机)

步骤 运动动作 视觉动作 状态灯
1 回零 excuteState1
2 运行到取料位 excuteState2
3 Z 下降→吸气→Z 回升 excuteState3
4 运行到 9 点网格 excuteState4
5 Z 下降→放气→Z 回升 excuteState5
6 回拍照位 开光源→触发→关光源→圆查找 excuteState6
7 记录 (ImageX,ImageY,RobotX,RobotY) excuteState7

全部步骤在后台 Task 顺序执行,支持 btn_StopAll 急停;任何一步失败自动回零并红灯提示。


6. 性能指标(实测值)

  • 相机采集 → 显示:≤ 40 ms(1080p)
  • 圆查找(60 卡尺):≤ 15 ms
  • 九点标定全流程(含运动):≤ 90 s
  • 重复定位精度:±0.02 mm(3σ,XY 平台 400 mm×400 mm)

7. 二次开发指南

7.1 新增视觉工具

  1. 继承 VisionBase
  2. 重写 Process(HObject image, ref VisionParams p)
  3. 在 UI 新增参数面板 → 绑定到 PropertyGrid 即可

7.2 接入第三方运动卡

仅实现 IMotion 接口:

C#运动控制加视觉定位框架,程序用来取放料,控制卡用的是正运动ZMC408CE总线运动控制卡,控制六个电机,XY轴,两个Z轴,两个旋转轴,相机用的是海康,3个海康相机,视觉采取用海康SDK加Halcon动态库开发出来的,支持取料定位,纠偏和放料定位,视觉部分支持产品模板创建和保存,九点标定模板创建和保存,软件框架扩展性比较强,方便学者自己扩展 基础为零的人不要拍,适合有基础的人学习 有配套视频教程有配套视频教程有配套视频教程有配套视频教程有配套视频教程 超级详细讲解教程,带你手把手写代码,从编写思路给你讲起

MoveXY/ MoveZ/ Zero/ Stop/ WaitIdle

框架层自动适配标定与验证流程

7.3 多相机扩展

HikHelper 已支持多实例;

App.config 增加 节点,界面自动生成分页


8. 常见问题速查

现象 根因 快速解决
触发无图像 软触发未开启 勾选 chk_SoftTrigger
标定误差大 网格间距过小 保证 MoveX/Y ≥ 15 mm
状态灯不更新 跨线程 控件内部已 Invoke,无需外部处理
Halcon 异常 运行库缺失 安装 Halcon 22.11 Steady runtime

9. 版本演进路线

  • V1.1 支持下相机飞拍(连续运动不停车)
  • V1.2 引入深度学习边缘定位,替代传统卡尺
  • V1.3 发布 .NET 6 跨平台版本(Linux + GTK)

10. 结语

thinger.VisionDemo 通过“高度封装 + 可视化标定”将原本需数周的视觉运动一体化项目压缩至数天;

开发者只需聚焦工艺逻辑,无需深陷算法与协议细节,真正做到“开箱即用、稳定可复制”。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐