当前位置: 首页 > 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标定板生成器

http://www.xdnf.cn/news/1003213.html

相关文章:

  • 西电【计算机与网络安全实验】课程期末复习遗留情报
  • git添加全局忽略.DS_Store文件
  • MySQL 和 PostgreSQL,到底选择哪个?
  • 英语作文模板
  • 第八节 工程化与高级特性-模块与命名空间的选择
  • 道可云人工智能每日资讯|雄安人工智能产业园正式开园
  • 循环的嵌套
  • Chroma 向量数据库学习笔记
  • DAY49
  • Vue.js 从入门到实战:用户管理分页表格项目详解
  • 新书速览|CUDA并行编程与性能优化
  • Java大厂面试真题:谢飞机的技术挑战
  • 快速排序:分治思想的经典实践
  • 数据结构 - Java 队列
  • react中hook和高阶组件的选型
  • Windows安装docker及使用
  • nginx学习
  • 【Qt】如何使用QtInstallerFramework打包Qt程序
  • OpenCV CUDA模块图像变形------对图像进行上采样操作函数pyrUp()
  • 134. Gas Station
  • 画图使用说明书
  • 使用adb 抓取perfetto-trace的注意事项
  • [Blender] 高质量材质推荐第四弹:25-30号精选纹理资源详解
  • iOS App上线前的安全防线:项目后期如何用Ipa Guard与其他工具完成高效混淆部署
  • 安全-Linux基线核查项点
  • Web APIS Day06
  • 面向对象 设计模式简述(1.创建型模式)
  • 脱离 Kubernetes,基于原生 Spring Cloud + 云 API 的轻量级自管理微服务平台架构设计
  • pikachu靶场通关笔记27 SQL注入10-宽字节注入
  • 网络安全攻防领域证书