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_division | 6 | 普通镜头 | ±0.15 |
area_scan_polynomial | 12 | 广角镜头 | ±0.03 |
area_scan_telecentric | 4 | 远心镜头 | ±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) |
---|---|---|
单相机独立标定 | 12s | 1.8 |
全局联合标定 | 18s | 0.4 |
GPU加速标定 | 6s | 0.45 |
三、标定板类型与技术对比
1. 标定板类型与精度
类型 | 生成算子 | 特征点提取误差(px) | 工业应用 |
---|---|---|---|
棋盘格 | gen_caltab | 1.2 | 通用测量 |
圆点阵 | gen_dot_caltab | 0.8 | 高精度检测 |
六角点阵 | - | 0.5 | 微米级测量 |
ChArUco板 | find_charuco_board | 0.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% |
机械振动 | 曝光时间≤1ms | 75% |
拼接错位 | 重叠区域>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标定板生成器