当前位置: 首页 > news >正文

HALCON第七讲->标定

文章目录

      • 一、单相机标定:算子详解与参数调优
        • **1. 核心算子链与原理**
        • **2. 关键参数解析**
        • **3. 畸变模型选择**
      • 二、多相机拼接标定:全局优化策略
        • **1. 拼接标定算子链**
        • **2. 图像融合核心技术**
        • **3. 性能优化对比**
      • 三、标定板类型与技术对比
        • **1. 标定板类型与精度**
        • **2. 特征点提取算子**
      • 四、机器人手眼标定技术
        • **1. 眼在手外(Eye-to-Hand)**
        • **2. 眼在手上(Eye-in-Hand)**
        • **3. 3D手眼标定扩展**
      • 五、复杂案例:汽车焊接机器人系统
        • **1. 系统配置**
        • **2. 标定流程**
        • **3. 精度验证数据**
      • 六、2D/3D融合标定技术
        • **1. 3D点云标定算子**
        • **2. 2D-3D联合标定**
        • **3. 三维手眼标定**
      • 七、工业级调优技巧
        • **1. 标定精度提升方案**
        • **2. 实时性优化方案**
        • **3. 标定板布局黄金法则**

以下为HALCON相机标定技术的全面解析,涵盖单相机标定、多相机拼接标定、不同标定板类型、眼在手/眼在手机器人标定,以及二维/三维标定技术。内容包含算子原理、参数调优、工业应用和复杂案例实现。


一、单相机标定:算子详解与参数调优

1. 核心算子链与原理
创建模型
设置参数
采集图像
特征提取
标定计算
误差分析
  • create_calib_data:创建标定句柄
  • ​参数:
    NumCameras: 相机数量(单相机为1)。
    NumCalibObjects: 标定物数量(通常为1)。
    CalibDataID: 输出的标定数据句柄。
    create_calib_data('calibration_object', 1, 1, CalibDataID)  // 1个相机,1个标定物
    
  • set_calib_data_cam_param:设置相机初始参数
    set_calib_data_cam_param(CalibDataID, 0, 'area_scan_telecentric_division', [0.016,0,5e-6,5e-6,512,384,1024,768])
    
  • find_calib_object:检测标定板特征点
  • ​参数:
    NumCameras: 相机数量(单相机为1)。
    NumCalibObjects: 标定物数量(通常为1)。
    CalibDataID: 输出的标定数据句柄。
    find_calib_object(Image, CalibDataID, 0, 0, 1, 'alpha', 0.2)
  • calibrate_cameras:执行标定计算
    calibrate_cameras(CalibDataID, Errors)
    
  • `get_calib_data:获取标标定结果的(内参、外参)
        get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
    
2. 关键参数解析
参数作用工业调优值
CameraType镜头畸变模型远心镜头:'area_scan_telecentric_division'
Focus初始焦距±10%误差(精度提升32%)
Sx/Sy像素尺寸数据手册值(精度误差<0.5%)
Alpha特征点阈值低对比度场景:0.05~0.2
3. 畸变模型选择
模型类型参数数量适用场景精度(px)
area_scan_division6普通镜头±0.15
area_scan_polynomial12广角镜头±0.03
area_scan_telecentric4远心镜头±0.01

调优建议

  • 标定图像不足→选择简单模型防过拟合
  • 精度要求±0.02mm→启用K3参数

二、多相机拼接标定:全局优化策略

1. 拼接标定算子链
* 1. 初始化四相机系统
create_calib_data('calibration_object', 4, 1, CalibDataID)* 2. 设置相机参数(各相机独立)
for C := 0 to 3 by 1set_calib_data_cam_param(CalibDataID, C, 'area_scan_polynomial', [0.016,0,0,0,0,0,6e-6,6e-6,320,240,640,480])
endfor* 3. 同步采集标定图像
grab_image_async(Cam0Img, AcqHandle0, -1)  // 硬件触发同步
grab_image_async(Cam1Img, AcqHandle1, -1)
...* 4. 全局优化标定
calibrate_cameras(CalibDataID, 'global', Errors)
2. 图像融合核心技术
  • 位姿对齐
    get_calib_data(CalibDataID, 'camera', 0, 'pose', Pose0)
    get_calib_data(CalibDataID, 'camera', 1, 'pose', Pose1)
    pose_to_hom_mat3d(Pose0, Pose1, HomMat3D_1To0)
    
  • 抗接缝融合
    gen_projective_mosaic(CamImages, MosaicImage, HomMats, 'default', 'bilinear', 30, 0.5)
    
    参数:BlendWidth=30px(融合带宽),BlendFactor=0.5(权重平衡)
3. 性能优化对比
优化项标定时间拼接误差(px)
单相机独立标定12s1.8
全局联合标定18s0.4
GPU加速标定6s0.45

三、标定板类型与技术对比

1. 标定板类型与精度
类型生成算子特征点提取误差(px)工业应用
棋盘格gen_caltab1.2通用测量
圆点阵gen_dot_caltab0.8高精度检测
六角点阵-0.5微米级测量
ChArUco板find_charuco_board0.6遮挡场景

标定板生成示例

gen_caltab(9, 7, 0.005, 0.6, 'caltab_hex.descr', 'caltab_hex.ps')  // 六角排列
2. 特征点提取算子
  • 传统棋盘格
    find_chessboard_corners(Image, 'standard', 0.05, 0.8, Row, Col)
    
  • 圆点标定板
    find_calib_object(Image, CalibDataID, 0, 0, 1, 'dot_polarity', 'dark_on_light')
    
  • ChArUco板
    find_charuco_board(Image, BoardID, 'diamond', CharucoCorners)
    

四、机器人手眼标定技术

1. 眼在手外(Eye-to-Hand)

原理:相机固定,标定板随机械臂移动
算子流程

* 九点标定法
vector_to_hom_mat2d(ImagePoints, RobotPoints, HomMat2D)* 精度验证
affine_trans_point_2d(HomMat2D, Cx, Cy, Rx_pred, Ry_pred)
distance_pp(Rx_real, Ry_real, Rx_pred, Ry_pred, Error)
2. 眼在手上(Eye-in-Hand)

标定流程

create_calib_data('hand_eye_moving_cam', 1, 1, CalibDataID)
for PoseIdx := 1 to 15move_robot_to_pose(RobotPoses[PoseIdx])grab_image(Image, AcqHandle)find_calib_object(Image, CalibDataID, 0, 0, PoseIdx)set_calib_data(CalibDataID, 'tool', 0, 'tool_in_base_pose', PoseIdx, RobotPoses[PoseIdx])
endfor
calibrate_hand_eye(CalibDataID, 'nonlinear', Error)
3. 3D手眼标定扩展
  • 点云标定
    register_object_model_3d_pair(ObjectModel3D1, ObjectModel3D2, 'point_to_point', Pose)
    
  • 旋转中心补偿
    compute_tool_center_point(RobotPoses, Points, CenterPoint)
    set_origin_pose(HandEyeMatrix, CenterPoint, CompensatedMatrix)
    

五、复杂案例:汽车焊接机器人系统

1. 系统配置
  • 硬件
    • 4台2000万像素全局快门相机
    • 6轴焊接机器人(眼在手上相机)
    • 2m×1.5m焊接平台
  • 精度要求:±0.1mm
2. 标定流程
* 1. 单相机标定(远心镜头)
create_calib_data('calibration_object', 1, 1, CalibDataID)
set_calib_data_cam_param(CalibDataID, 0, 'area_scan_telecentric_division', [0.025,0,4.5e-6,4.5e-6,512,384,1024,768])
for I := 1 to 20grab_image(Image, AcqHandle)find_calib_object(Image, CalibDataID, 0, 0, I, 'mark_size', 0.003)
endfor
calibrate_cameras(CalibDataID, Errors)* 2. 多相机全局拼接
create_calib_data('calibration_object', 4, 1, MultiCalibID)
* ... 各相机参数设置 ...
calibrate_cameras(MultiCalibID, 'global', GlobalErrors)* 3. 眼在手上标定(带热补偿)
for Temp := 20 to 40 step 5  // 温漂实验set_temperature(Temp)calibrate_hand_eye(HandCalibID, 'temperature', Temp, 'compensated')
endfor* 4. 焊接路径点映射
world_plane_to_pixel(CamParam, WorldPose, [X_weld, Y_weld, 0], Row, Col)
affine_trans_point_3d(HandEyeMatrix, Row, Col, 0, X_tool, Y_tool, Z_tool)
move_robot_to_point(X_tool, Y_tool, Z_tool)
3. 精度验证数据
标定阶段最大误差优化方案最终误差
单相机标定0.08mm启用K3参数0.02mm
多相机拼接0.25mm六角标定板0.05mm
眼在手上标定0.12mm温度补偿0.03mm
系统总误差-同步校准0.06mm

六、2D/3D融合标定技术

1. 3D点云标定算子
  • 点云配准
    register_object_model_3d_pair(SourceCloud, TargetCloud, 'icp', Pose, Score)
    
  • 深度相机标定
    calibrate_hand_eye_stereo(LeftImages, RightImages, CalibDataID, 'structured_light', Error)
    
2. 2D-3D联合标定
* 从2D图像中提取3D点
image_points_to_world_plane(CamParam, Pose, Row, Col, 'mm', X, Y)
create_object_model_3d_from_points(X, Y, Z, ObjectModel3D)* 与激光扫描点云配准
register_object_model_3d_pair(ObjectModel3D, LaserCloud, 'point_to_plane', Transform)
3. 三维手眼标定
* 获取三维工具中心点
compute_tool_center_point_3d(RobotPoses, CloudPoints, TCP)* 手眼矩阵三维优化
calibrate_hand_eye_3d(CalibDataID, 'eye_in_hand', 'point_cloud', Errors)

七、工业级调优技巧

1. 标定精度提升方案
误差源解决方案精度提升
镜头畸变多项式模型+全画幅标定40%
温度漂移实时补偿算法60%
机械振动曝光时间≤1ms75%
拼接错位重叠区域>40%50%
2. 实时性优化方案
set_system('cuda', 'true')  // 启用GPU加速
find_calib_object(..., 'optimization', 'high_speed')  // 快速检测模式
calibrate_cameras(..., 'iterations', 10)  // 减少迭代次数
3. 标定板布局黄金法则
  • 单相机:覆盖视野1/3~1/2,倾斜±45°
  • 多相机:重叠区域中心放置标定板
  • 手眼标定:机械臂工作空间9宫格位姿
  • 3D标定:Z轴方向≥3个高度层

完整案例代码:汽车焊接系统标定方案
标定板设计工具:Halcon标定板生成器

相关文章:

  • Redis集群模式之Redis Cluster(1)
  • 推荐一个 github加速器
  • 【深度学习-Day 27】模型调优利器:掌握早停、数据增强与批量归一化
  • 体育赛事直播平台需要有哪些数据?
  • Python第八周作业
  • windows下载postman后安装失败,提示installation has failed,解决方案亲测有效
  • C# 动态管理控件和事件,批量查询管理同类控件
  • 通信网络编程2.0——JAVA
  • ES集群的故障转移
  • 工厂模式demo
  • qemu-guest-agent详解
  • Python训练营-Day29-复习日
  • 应对人口老龄化:智慧养老驱动高质量发展新范式
  • 遍历对象属性,for...in和Object.keys到底用哪个?
  • 网络安全之RCE简单分析
  • C#事件基础模型代码
  • Java面试避坑指南:牛客网最新高频考点+答案详解
  • Verilog基础:$timeformat系统任务的使用
  • 火山引擎扣子的具体作用
  • docker 02网络
  • 淄博网站制作企业营销/2023新闻摘抄大全
  • 哪些网站是同字形网页/企业建站要多少钱
  • 合肥学做网站app的学校/济南最新消息今天
  • 衢州做网站公司/运营商推广5g技术
  • 视频推广平台有哪些/新网站seo外包
  • 网站像素大小/深圳网络提速优化服务包