半导体加工平台的视觉定位方案

相机固定在加工平台上,无机械臂,只有XYZ三轴运动系统 ,这是一个典型的龙门平台视觉定位 场景。与机械手方案的核心区别是:视觉系统直接测量工件相对于平台坐标系的位置,而不是通过手眼标定。


一、系统架构分析

物理布局

  • 相机安装:固定于加工平台(龙门架)上,随XY轴移动(或固定在某处)

  • 运动系统:X轴、Y轴、Z轴(可能是音圈电机或伺服+滚珠丝杠)

  • 任务目标:定位夹具上某个Mark点的初始位置,驱动平台移动到目标加工位置

关键特点

  • 无机械臂 → 无需手眼标定中的末端执行器坐标系

  • 相机与平台刚性连接 → 相机坐标系与平台坐标系有固定的偏移关系

  • 平面运动 → Mark点在同一平面(忽略高度变化)


二、坐标系定义

cpp 复制代码
坐标系定义:
├── 平台坐标系 (R):以平台原点(如左下限位)为基准,单位 mm
├── 相机坐标系 (C):以相机光心为原点,单位 mm
└── 像素坐标系 (P):图像左上角为原点,单位 pixel

核心关系 :相机固定在平台上,因此相机坐标系与平台坐标系之间的相对位姿是固定的

设平台当前位置为 (Xr,Yr)(Xr​,Yr​)(平台坐标系下),则相机光心在平台坐标系中的位置为:

XcameraYcamera\]=\[XrYr\]+\[ΔXoffsetΔYoffset\]\[Xcamera​Ycamera​​\]=\[Xr​Yr​​\]+\[ΔXoffset​ΔYoffset​​

其中 (ΔXoffset,ΔYoffset)(ΔXoffset​,ΔYoffset​) 是相机安装位置相对于平台坐标系的固定偏移。

三、标定流程(核心)

步骤1:相机内参标定(张正友法)

  • 目的:获得畸变参数和焦距,将像素坐标转换为归一化坐标

  • 方法:棋盘格拍摄15-20张照片,使用OpenCV calibrateCamera

  • 输出:内参矩阵 KK,畸变系数 (k1,k2,p1,p2)(k1​,k2​,p1​,p2​)

步骤2:像素当量标定(Pixel to mm)

由于相机光轴垂直于工件平面,可以直接建立线性映射

方法一:两点法

  1. 平台移动到位置 P1=(X1,Y1)P1​=(X1​,Y1​),拍摄Mark点,记录像素坐标 (u1,v1)(u1​,v1​)

  2. 平台移动到位置 P2=(X2,Y2)P2​=(X2​,Y2​),拍摄同一Mark点,记录像素坐标 (u2,v2)(u2​,v2​)

  3. 计算像素当量:

    Sx=∣X2−X1∣∣u2−u1∣,Sy=∣Y2−Y1∣∣v2−v1∣Sx=∣u2−u1∣∣X2−X1∣,Sy=∣v2−v1∣∣Y2−Y1∣

    单位为 mm/pixel

方法二:多点拟合(推荐)

  • 移动平台到9个不同位置,记录 (Xi,Yi)(Xi​,Yi​) 和对应的 (ui,vi)(ui​,vi​)

  • 建立仿射变换模型:

    XY\]=\[abcd\]\[uv\]+\[txty\]\[XY\]=\[acbd\]\[uv\]+\[txty

  • 使用最小二乘法求解6个参数

  • 此方法可补偿相机安装旋转(如果相机有微小偏角)

步骤3:相机安装偏移标定

目的:确定相机光心与平台坐标系原点的固定偏移 (ΔXoffset,ΔYoffset)(ΔXoffset​,ΔYoffset​)

方法

  1. 在平台上固定一个标准Mark点(如玻璃基板上的十字)

  2. 移动平台,使Mark点正好位于相机视野中心(通过图像处理找到中心并微调)

  3. 记录此时平台的坐标 (Xcenter,Ycenter)(Xcenter​,Ycenter​)

  4. 相机光心在平台坐标系中的位置即为 (Xcenter,Ycenter)(Xcenter​,Ycenter​)

  5. 偏移量计算(如果平台原点在左下角):

    ΔXoffset=Xcenter,ΔYoffset=YcenterΔXoffset=Xcenter,ΔYoffset=Ycenter


四、在线定位流程

初始化阶段

  1. 平台移动到拍照位置 (Xphoto,Yphoto)(Xphoto​,Yphoto​)

  2. 此时相机视野覆盖夹具上的Mark点

实时定位(每次夹具到位后)

text

复制代码
1. 触发相机拍照
2. 图像预处理(滤波、二值化)
3. 匹配算法定位Mark点,获得像素坐标 (u, v)
4. 亚像素优化,得到 (u_sub, v_sub)
5. 畸变校正:
   └─ 使用张正友标定的畸变系数校正 (u_sub, v_sub) → (u_corrected, v_corrected)
6. 像素坐标 → 相机坐标系(单位mm):
   └─ X_cam = (u_corrected - u_center) × S_x
   └─ Y_cam = (v_corrected - v_center) × S_y
   (其中 (u_center, v_center) 是图像中心像素坐标)
7. 相机坐标 → 平台坐标系:
   └─ X_mark = X_photo + X_cam + ΔX_offset
   └─ Y_mark = Y_photo + Y_cam + ΔY_offset
8. 计算目标偏移:
   └─ ΔX_target = X_target_desired - X_mark
   └─ ΔY_target = Y_target_desired - Y_mark
9. 发送给运动控制器:平台移动 (ΔX_target, ΔY_target)

五、关键优化点

1. 相机安装方向标定

如果相机安装有微小旋转(非90°垂直),需要标定旋转角 θθ。

方法

  • 移动平台X轴固定距离 DD,测量Mark点在图像中的像素位移 (Δu,Δv)(Δu,Δv)

  • 计算旋转角:

    θ=arctan⁡(ΔvΔu)θ=arctan(ΔuΔv)

  • 在坐标转换时加入旋转补偿:

    XcamYcam\]=\[cos⁡θsin⁡θ−sin⁡θcos⁡θ\]\[Sx⋅(u−ucenter)Sy⋅(v−vcenter)\]\[XcamYcam\]=\[cosθ−sinθsinθcosθ\]\[Sx⋅(u−ucenter)Sy⋅(v−vcenter)

2. Z轴高度变化的影响

如果Z轴有升降(如调焦或加工头升降),且Mark点在不同平面:

解决方案

  • 使用远心镜头(对高度变化不敏感)

  • 或建立高度补偿模型

    • 在不同Z高度拍摄标准Mark点,记录像素坐标变化

    • 建立 (u,v)=f(Z)(u,v)=f(Z) 查找表

    • 在线时根据当前Z高度查表补偿

3. 多Mark点定位(提高精度)

对于高精度要求(如±1μm),使用多个Mark点求平均:

  • 夹具上设计3-4个Mark点

  • 依次定位每个Mark点,得到 (Xi,Yi)(Xi​,Yi​)

  • 计算夹具整体位姿:

    Xcenter=1n∑Xi,Ycenter=1n∑YiXcenter=n1∑Xi,Ycenter=n1∑Yiθrotation=arctan⁡(Y2−Y1X2−X1)θrotation=arctan(X2−X1Y2−Y1)

  • 同时输出旋转角用于校正(若加工头可旋转)


六、精度分析与误差控制

误差源 典型值 控制方法
相机标定误差 ±0.5 pixel 多点拟合 + 亚像素
像素当量标定 ±0.1% 大范围移动(>100mm)
畸变校正残差 ±0.1 pixel 高质量镜头 + 高阶畸变模型
平台重复定位精度 ±1 μm 光栅尺闭环
温度漂移 ±2 μm/°C 恒温环境 + 定期标定
总系统精度 ±2-5 μm 上述综合

七、工程实现示例(伪代码)

python

复制代码
import cv2
import numpy as np

class PlatformVisionSystem:
    def __init__(self):
        # 加载标定参数
        self.camera_matrix = np.load('camera_matrix.npy')
        self.dist_coeffs = np.load('dist_coeffs.npy')
        self.pixel_to_mm = 0.005  # 5 μm/pixel(示例)
        self.cam_offset = (150.0, 100.0)  # 相机安装偏移(mm)
        self.image_center = (640, 512)  # 图像中心
        
    def locate_mark(self, image, current_platform_pos):
        # 1. 畸变校正
        undistorted = cv2.undistort(image, self.camera_matrix, self.dist_coeffs)
        
        # 2. 匹配Mark点(模板匹配或轮廓检测)
        u, v = self.find_mark_center(undistorted)  # 亚像素精度
        
        # 3. 计算相机坐标系下的偏移
        dx_pixel = u - self.image_center[0]
        dy_pixel = v - self.image_center[1]
        x_cam = dx_pixel * self.pixel_to_mm
        y_cam = dy_pixel * self.pixel_to_mm
        
        # 4. 转换到平台坐标系
        x_mark = current_platform_pos[0] + x_cam + self.cam_offset[0]
        y_mark = current_platform_pos[1] + y_cam + self.cam_offset[1]
        
        return (x_mark, y_mark)
    
    def calculate_move(self, mark_pos, target_pos):
        delta_x = target_pos[0] - mark_pos[0]
        delta_y = target_pos[1] - mark_pos[1]
        return (delta_x, delta_y)

八、与传统机械手方案的区别总结

项目 机械手方案 龙门平台方案(你的场景)
坐标系关系 手眼标定 AX=XBAX=XB 固定偏移 + 像素当量
标定复杂度 高(需解旋转矩阵) 低(线性映射即可)
旋转角输出 需要(多自由度) 通常不需要(若只有XY)
Z轴影响 可忽略(末端固定) 需补偿(若升降)
精度 ±0.02-0.1mm ±0.002-0.005mm(可达更高)
相关推荐
格林威2 小时前
GigE Vision 多相机同步终极检查清单(可直接用于项目部署)
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·工业相机
Utopia^6 小时前
Flutter 框架跨平台鸿蒙开发 - 闪回相机
数码相机·flutter·华为·harmonyos
宇卿.7 小时前
机器视觉硬件【相机篇】
数码相机·计算机视觉
格林威1 天前
SSD 写入速度测试命令(Linux)(基于工业相机高速存储)
linux·运维·开发语言·人工智能·数码相机·计算机视觉·工业相机
格林威2 天前
工业相机异常处理实战:断连重连、丢帧检测、超时恢复状态机
开发语言·人工智能·数码相机·计算机视觉·视觉检测·机器视觉·工业相机
_李小白3 天前
【OSG学习笔记】Day 31: 渲染到纹理(RTT)
笔记·数码相机·学习
双翌视觉4 天前
基于机器视觉实现开口卡簧自动化装配
运维·数码相机·自动化
ZHANG13HAO4 天前
大尺寸柔性基板(20×40cm)线阵相机检测系统落地指南
数码相机
格林威4 天前
ZeroMQ 在视觉系统中的应用
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测