1. 项目概述:工业视觉与机器人协同的焊缝跟踪系统
在汽车制造、压力容器焊接等工业场景中,传统的人工示教焊接路径方式效率低下且精度难以保证。我们开发的这套系统通过Halcon机器视觉与ABB机器人协同作业,实现了焊缝自动识别、三维坐标解算和轨迹规划的全流程自动化。系统采用C# WinForms构建操作界面,通过TCP/IP协议与机器人控制器实时通信,实际测试中可将焊接路径规划效率提升3-5倍,典型应用场景下焊缝识别精度达到±0.2mm。
关键创新点:首次将Halcon的亚像素边缘检测算法与ABB机器人RAPID程序深度集成,通过手眼标定实现视觉坐标系到机器人坐标系的精确转换。
2. 系统架构设计解析
2.1 模块化设计思路
系统采用经典的三层架构设计:
- 表示层:C# WinForms界面,包含图像显示区(Halcon智能窗口)、控制面板和状态监控栏
- 业务逻辑层:核心算法模块,包括图像处理、坐标变换、轨迹规划三个子模块
- 设备通信层:处理与ABB控制器的TCP通信及工业相机采集
csharp复制// 系统初始化流程示例
public void SystemInit()
{
CameraInit(); // 相机驱动加载
RobotConnect(); // 机器人连接
LoadCalibData();// 标定参数读取
}
2.2 通信协议设计
与ABB控制器的通信采用自定义轻量级协议:
- 指令格式:[消息类型][数据长度][数据内容][校验和]
- 关键消息类型:
- 0x01:关节坐标请求
- 0x02:笛卡尔坐标发送
- 0x03:运动指令执行
- 0x04:异常状态反馈
3. 核心模块实现细节
3.1 工业相机标定实战
采用9×9棋盘格标定板完成相机内参标定,关键步骤:
- 多角度采集20组标定板图像(覆盖整个视野)
- 使用Halcon的find_calib_object算子检测角点
- 通过calibrate_cameras计算内参矩阵和畸变系数
halcon复制* Halcon标定代码片段
find_calib_object (Image, CalibDataID, 0, 0, [], [])
get_calib_data (CalibDataID, 'camera', 0, 'params', CameraParams)
注意事项:标定时环境光照需与实际工作条件一致,标定板要充满视野的2/3以上,否则会影响标定精度。
3.2 Halcon图像处理流水线
焊缝识别算法流程:
- 图像增强:使用emphasize算子增强对比度
- 阈值分割:动态阈值分割焊缝区域
- 边缘提取:edges_sub_pix获取亚像素级边缘
- 几何拟合:fit_line_contour_xld拟合直线焊缝
halcon复制* 焊缝边缘检测示例
edges_sub_pix (Image, Edges, 'canny', 1.5, 20, 40)
select_shape_xld (Edges, SelectedEdges, 'contlength', 'and', 50, 99999)
3.3 C#与Halcon联合编程技巧
3.3.1 内存管理要点
- Halcon对象需显式释放:使用using语句或手动调用Dispose()
- 图像传输优化:使用HOperatorSet.GenImage1实现C# Bitmap到HImage的转换
csharp复制// C#调用Halcon算子示例
using (HObject image = new HObject())
{
HOperatorSet.ReadImage(out image, "test.jpg");
HTuple width, height;
HOperatorSet.GetImageSize(image, out width, out height);
}
3.3.2 多线程处理方案
- UI线程:只负责界面更新
- 采集线程:独立处理相机图像采集
- 处理线程:执行耗时的图像处理算法
踩坑记录:Halcon算子在不同线程调用时需要保持HDevEngine上下文一致,否则会引发异常。
4. ABB机器人通信实现
4.1 RAPID程序模块设计
机器人端需部署的通信服务程序:
rapid复制MODULE MainModule
VAR socketdev client_socket;
PROC main()
SocketCreate client_socket;
SocketConnect client_socket, "192.168.1.100", 6000;
WHILE TRUE DO
ReceiveData;
ProcessCommand;
ENDWHILE
ENDPROC
ENDMODULE
4.2 通信状态机设计
- 连接阶段:TCP三次握手
- 认证阶段:密码验证(可选)
- 数据交换阶段:指令-响应模式
- 异常处理:心跳包检测(30秒超时)
5. 手眼标定关键技术
5.1 眼在手外(Eye-to-Hand)标定
- 机器人末端固定标定板
- 在不同位姿采集10组以上图像
- 使用hand_eye_calibration求解变换矩阵
标定精度验证方法:
- 重投影误差应<0.3像素
- 实际物理位置误差应<1mm
5.2 坐标变换公式
$$ P_{base} = T_{base}^{tool} \cdot T_{tool}^{cam} \cdot P_{image} $$
其中:
- $T_{base}^{tool}$:机器人正向运动学解算结果
- $T_{tool}^{cam}$:手眼标定得到的固定变换
- $P_{image}$:图像坐标系中的二维点(转换为齐次坐标)
6. 系统调试与优化
6.1 性能瓶颈分析
- 图像采集延迟:优化为异步采集模式
- 算法耗时:使用Halcon的并行处理指令(set_system('parallelize_operators', 'true'))
- 通信延迟:采用二进制协议替代字符串协议
6.2 典型问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 图像采集卡顿 | 驱动模式错误 | 切换为GigE Vision协议 |
| 机器人运动抖动 | 轨迹点密度不足 | 增加采样点至50组以上 |
| 焊缝识别偏差 | 光照条件变化 | 增加环形光源补偿 |
7. 项目进阶方向
- 深度学习集成:用Halcon的DLT工具包训练焊缝分类模型
- 多机器人协同:扩展通信协议支持多控制器连接
- 工艺参数优化:建立焊接参数数据库,实现智能推荐
实际部署中发现,在镀锌钢板焊接场景中,需要特别处理反光问题。我们的解决方案是在Halcon预处理链中加入polar_trans_image_ext算子进行偏振变换,有效提升了识别率。