Halcon 3D 手眼标定

c 复制代码
dev_update_off ()
dev_set_color ('green')
* Open a window if the correct size.
dev_close_window ()
WindowWidth := 512
WindowHeight := 384
* Directories containing images and data files.
ImagesDir := '3d_machine_vision/hand_eye/robot_gripper_gray_'
dev_open_window (0, WindowWidth + 10, WindowWidth, WindowHeight, 'black', ImageWindowHandle)
dev_open_window (0, 0, WindowWidth, WindowHeight, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
set_display_font (ImageWindowHandle, 14, 'mono', 'true', 'false')
Instruction := ['Rotate: Left button','Zoom:   Shift + left button','Move:   Ctrl  + left button']
*1.读取点云模型
read_object_model_3d ('hand_eye/robot_gripper_3d_model.om3', 1, [], [], OM3DModel, Status)
*创建点云模型
create_surface_model (OM3DModel, 0.03, [], [], SurfaceModelID)
Message := 'Surface model to be searched'
*显示点云模型
sample_object_model_3d (OM3DModel, 'fast', 0.0009, [], [], SampledObjectModel3D)
visualize_object_model_3d (WindowHandle, SampledObjectModel3D, [], [], 'color_0', 'gray', Message, [], Instruction, PoseOut)
* The number of files.
NumCalibrationScenes := 15
* 创建手眼标定模型,同时多个角度匹配事实的点云数据
create_calib_data ('hand_eye_stationary_cam', 0, 0, HECCalibDataID)
* 设置优化速度
set_calib_data (HECCalibDataID, 'model', 'general', 'optimization_method', 'nonlinear')

for I := 1 to NumCalibrationScenes by 1
    read_image (ImageRobotGripperGray, ImagesDir + I$'02d')
    * 读取位姿,工具坐标相对于机器人坐标的姿态
    *read_pose ('tool_in_base_pose_' + I$'02d' + '.dat', ToolInBasePose)
     read_pose('C:/Users/Public/Documents/MVTec/HALCON-17.12-Progress/examples/hdevelop/Calibration/Hand-Eye/tool_in_base_pose_'+ I$'02d' + '.dat',ToolInBasePose)
     *物体相对于传感器的位姿
    filename := 'hand_eye/robot_gripper_3d_scene_' + I$'02d'
    *读取模型
    read_object_model_3d (filename, 1, [], [], OM3DScene, Status1)
 
    find_surface_model (SurfaceModelID, OM3DScene, 0.05, 1, 0, 'false', [], [], ObjInCamPose, Score, SurfaceMatchingResultID)
    refine_surface_model_pose (SurfaceModelID, OM3DScene, ObjInCamPose, 0, 'false', [], [], ObjInCamPose, Score, SurfaceMatchingResultID1)
    if (|Score|)
         *如果有得分设置到模型里面
      
        set_calib_data (HECCalibDataID, 'tool', I, 'tool_in_base_pose', ToolInBasePose)
        set_calib_data_observ_pose (HECCalibDataID, 0, 0, I, ObjInCamPose)
    endif
    *仿射运算显示
    pose_to_hom_mat3d (ObjInCamPose, HomMat3D)
    affine_trans_object_model_3d (SampledObjectModel3D, HomMat3D, OM3DModelTrans)
    *显示场景图片
      if (I < 4)
        * Clear both windows.
        dev_clear_window ()
        dev_set_window (ImageWindowHandle)
        dev_display (ImageRobotGripperGray)
        disp_message (ImageWindowHandle, 'Image from pinhole camera', 'window', 12, 12, 'black', 'true')
        dev_set_window (WindowHandle)
        Message := 'Surface model is matched in the 3D scene.'
        Message[1] := 'Points of the current scene are gray.'
        Message[2] := 'Points of the matched model are green.'
        * For better visualization, reduce the point density of the model.
        sample_object_model_3d (OM3DScene, 'fast', 0.0009, [], [], SampledOM3DScene)
        disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
        Message := 'Scene: '
        Message[1] := I + ' of ' + NumCalibrationScenes
        disp_message (WindowHandle, Message, 'window', 80, 12, 'white', 'false')
        * Visualize matching result with user interaction.
        visualize_object_model_3d (WindowHandle, [SampledOM3DScene,OM3DModelTrans], [], [], ['color_0','color_1','disp_background'], ['gray','green','true'], [], [], Instruction, PoseOut)
      endif
   
endfor
clear_object_model_3d ([OM3DScene,OM3DModelTrans,SampledOM3DScene])
* 3 手眼标定
calibrate_hand_eye (HECCalibDataID, HECPoseError)
* 4.获取姿态
* 基础坐标系对于传感器(机械手)的姿态
get_calib_data (HECCalibDataID, 'camera', 0, 'base_in_cam_pose', BaseInSensorPose)
* 物体相对于传感器的姿态
get_calib_data (HECCalibDataID, 'calib_obj', 0, 'obj_in_tool_pose', ObjInToolPose)
相关推荐
nnnnichijou7 小时前
Qt Quick 3D-机械臂模型显示与交互
qt·3d·交互
m0_7431064614 小时前
LOBE-GS:分块&致密化效率提升
人工智能·算法·计算机视觉·3d·几何学
视觉人机器视觉15 小时前
机器视觉Halcon3D中,六大类3D处理算子
人工智能·计算机视觉·3d·视觉检测
Damon小智15 小时前
从零开始XR开发:Three.js实现交互式3D积木搭建器
javascript·3d·xr
-dzk-1 天前
【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
运维·服务器·python·计算机视觉·3d·三维重建·三维
夏婵语冰2 天前
C4D R20新功能实战指南:深度解析域、节点材质与OpenVDB,提升你的3D创作效率
3d·材质·动画制作·三维设计·c4d教程
元让_vincent3 天前
论文Review SLAM R3LIVE | ICRA2022 港大MARS | 可以生成Mesh的激光视觉惯性SLAM
3d·机器人·图形渲染·slam·建图
Demoncode_y4 天前
Vue3 + Three.js 实现 3D 汽车个性化定制及展示
前端·javascript·vue.js·3d·汽车·three.js
lqjun08275 天前
VTK相机正射投影中通过多个2D坐标计算3D坐标
数码相机·计算机视觉·3d
zenithdev16 天前
开源库入门教程 Cesium:3D地球和地图库
其他·3d·arcgis