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)
相关推荐
HahaGiver6664 小时前
Unity Shader Graph 3D 实例 - 基础的模型贴图渲染
3d·unity·游戏程序·贴图·游戏美术
HahaGiver6664 小时前
Unity Shader Graph 3D 实例 - 一个简单的3D打印效果
3d·unity·游戏引擎
小一亿6 小时前
【3ds Max动画】烟花:超级喷射粒子,荧光粒子效果
学习·3d·图形渲染·3dsmax·动画
zstar-_6 小时前
3D高斯泼溅的后处理方式
3d
酷柚易汛智推官9 小时前
UE5.7:3D 内容生产的新范式
3d·ue5·酷柚易汛
二川bro1 天前
第33节:程序化生成与无限地形算法
前端·算法·3d·threejs
点PY1 天前
FCAF3D: Fully Convolutional Anchor-Free 3D Object Detection论文精读
人工智能·目标检测·3d
da_vinci_x1 天前
Substance 3D 材质流:AI 快速生成与程序化精修
人工智能·游戏·3d·材质·设计师·技术美术·游戏美术
博图光电2 天前
3D TOF 视觉相机:以毫秒级三维感知,开启智能交互新时代
数码相机·3d
GISer_Jing2 天前
OSG多视口与多通道渲染核心技术解析
c++·3d·新浪微博