register_object_model_3d_pair — Search for a transformation between two 3D object models.
register_object_model_3d_pair searches for a transformation
between two 3D object models having an optimal alignment.
This process is called registration.
The transformation that is returned
Pose can be used to transform
to the reference frame of the second object
Score returns the ratio of the overlapping
parts to the not overlapping parts of the two 3D object models.
If the two objects are not overlapping, no pose is returned.
Method decides if the initial relative
position is calculated by 'matching' or if only
the pose refinement is performed in relation to the then assumed
common global reference frame, which can be selected directly with
The accuracy of the returned pose is limited to around 0.1% of the size of the point clouds due to numerical reasons. The accuracy further depends on the noise of the data points, the number of data points and the shape of the point clouds.
The matching process and the following refinement can be controlled using
the following name-value pairs in
To allow an easy control over the
parameters, three different sets of parameters are available.
Selecting the 'fast'
parameter set allows a shorter calculation time.
'accurate' will give more accurate results.
'robust' additionally improves the quality of the resulting
Score at the cost of calculation time.
Possible values: 'fast', 'accurate', 'robust'
Default value: 'accurate'
This parameter controls the relative sampling rate of the 3D object models that is used to represent the surfaces for the computation. This value is relative to the diameter of the respective object and defines the minimal distance between two sampled points. A higher value will lead to faster and a lower value to more accurate results. This parameter can also be set for each object independently by using 'rel_sampling_distance_obj1' and 'rel_sampling_distance_obj2'.
Possible values: 0.03, 0.05, 0.07
Default value: 0.05
This parameter controls the ratio of sampled points that are considered as key points for the matching process. The number is relative to the sampled points of the model. Reducing this ratio speeds up the process, whereas increasing leads to more robust results. This parameter can be also set for each object independently by using 'key_point_fraction_obj1' and 'key_point_fraction_obj2'.
Possible values: 0.2, 0.3, 0.4
Default value: 0.3
The number of iterative steps used for the pose refinement.
Possible values: 5, 7, 10
Default value: 5
Number of points that are skipped for the pose refinement. The value specifies the number of points that are skipped per selected point. Increasing this value allows faster convergence at the cost of less accurate results. This parameter is only relevant for the smaller of the two objects.
Possible values: 1, 2, 20
Default value: 2
Maximum distance that two faces might have to be considered as potentially overlapping. This value is relative to the diameter of the larger object.
Possible values: 0.05, 0.1, 0.15
Default value: 0.1
Maximum distance that two faces might have to be considered as potentially overlapping, as absolute value.
Invert the normals of the smaller object, if its normals are inverted relative to the other object.
Possible values: 'true', 'false'
Default value: 'false'
This operator supports cancelling timeouts and interrupts.
Handle of the first 3D object model.
Handle of the second 3D object model.
Method for the registration.
Default value: 'matching'
List of values: 'icp', 'matching'
Names of the generic parameters.
Default value: 
List of values: 'default_parameters', 'key_point_fraction', 'key_point_fraction_obj1', 'key_point_fraction_obj2', 'model_invert_normals', 'pose_ref_dist_threshold_abs', 'pose_ref_dist_threshold_rel', 'pose_ref_num_steps', 'pose_ref_sub_sampling', 'rel_sampling_distance', 'rel_sampling_distance_obj1', 'rel_sampling_distance_obj2'
→(real / integer / string)
Values of the generic parameters.
Default value: 
Suggested values: 'fast', 'accurate', 'robust', 0.1, 0.25, 0.5, 1, 'true', 'false'
→(real / integer)
Overlapping of the two 3D object models.
* Generate two boxes gen_box_object_model_3d ([0,0,0,0,0,0,0],3,2,1, ObjectModel3D1) gen_box_object_model_3d ([0,0,0.5,15,0,0,0],3,2,1, ObjectModel3D2) * Match them register_object_model_3d_pair (ObjectModel3D1, ObjectModel3D2, 'matching',\ , , Pose, Score)
register_object_model_3d_pair returns 2 (H_MSG_TRUE) if all parameters
are correct. If necessary, an exception is raised.