1. 算子原型
find_box_3d( : : ObjectModel3DScene,
SideLen1,
SideLen2,
SideLen3,
MinScore,
GenParam
: GrippingPose,
Score,
ObjectModel3DBox,
BoxInformation)
2. 功能
在输入的3D对象模型中查找指定尺寸范围的箱子,返回中心抓取点、得分,以及相关信息。内部使用
基于表面的匹配
3. 参数
-
ObjectModel3DScene
- 3D对象模型句柄,
必须包含 XYZ-mapping
- 3D对象模型句柄,
-
SideLen1, SideLen2, SideLen3
箱子的边长范围,每个参数均包含两个值,分别代表箱子一个边的最大最小值。如果只有一个面可见或者对一个面的长度不加以限制,
SideLen3
可设置为-1
-
MinScore
最小得分,低于改值的匹配结果将不被返回
-
GenParam
通用参数,使用键值对的方式进行输入。使用
create_dist
进行创建,set_dict_tuple
进行赋值-
‘3d_edges’
允许手动设置3D边缘信息。该参数必须是一个3D对象模型的句柄。边缘信息通常是
edges_object_model_3d
算子的结果,也可以对edges_object_model_3d
的结果进行相关处理后作为参数进行输入(例如,移除不相关部分)。如果改参数为指定,find_box_3d
内部使用类似于edges_object_model_3d
的操作进行边缘提取。 -
‘3d_edge_min_amplitude’
设置3D边缘的最小幅值。如果边缘信息通过
3d_edges
输入,则忽略改参数。否则,该参数类似于edges_object_model_3d
算子中的MinAmplitude
参数默认值为模型最小外包立方体对角线长度的
10%
-
‘max_gap’
如果边缘信息是
find_box_3d
内部计算的,则该参数用于边缘提取。其含义类似于算子edges_object_model_3d
中的max_gap
参数 -
‘remove_outer_edges’
如果边缘信息是
find_box_3d
内部计算的,该参数用于控制是否移除最外围的边缘。该参数在Bin Picking
应用中非常有用,用以移除外框 -
‘max_num_boxes’
限制结果的数量,默认值为0,表示返回所有得分大于
MinScore
的结果 -
‘box_type’
设置查找箱子的类型。
- ‘single_side_visible’ 仅一个面可见的箱子
- ‘full_box_visible’ 仅包含多于一个面可见的箱子
- ‘all’ 所有类型的箱子
-
4. 返回值
-
GrippingPose
抓取点的位姿。被用来计算抓取点的箱面于抓取点姿态的
Z
轴依赖于XYZ-mapping
。如果仅一个箱面可见,抓取姿态的中心为该可见面的中心,Z
轴方向为原理XYZ-mapping
的查看点方向。如果多个箱面可见,抓取点的中心位于最平行于XYZ-mapping
的箱面的中心,Z
轴相反的方向远离XYZ-mapping
的查看点方向。抓取点姿态的X
轴方向平行于XYZ-mapping
的列方向,Y
轴的方向依赖于X
与Z
轴。 -
Score
箱子与边缘的可见程度和查找到的箱子与给定的尺寸的匹配程度共同决定该值的大小
-
ObjectModel3DBox
三角化后的箱子可见区域,一般用于快速可视化
-
BoxInformation
扩展信息,可用
get_dict_param
与get_dict_tuple
通过key
进行获取-
‘results’
该键表示查找到的箱子。根据得分降序排列,索引从
0
开始。对于每个箱子又包含以下键用于获取具体数据。-
‘box_pose’
箱子在输入模型坐标系中的姿态,一般用于可视化箱子
-
‘box_length_x’, ‘box_length_y’, ‘box_length_z’
输入模型坐标系下的箱子边长,
box_length_x
与box_length_y
总是大于零的值。如果仅有一个面可见,box_length_z
为0
-
‘gripping_pose’
返回与
GrippingPose
参数相同的结果 -
‘gripping_length_x’, ‘gripping_length_y’, ‘gripping_length_z’
GrippingPose
坐标系下的箱子边长,box_length_x
与box_length_y
总是大于零的值。如果仅有一个面可见,box_length_z
为0
-
‘score’
返回与
Score
参数相同的结果 -
‘one_side_only’
true
仅一个面可见,false
多于一个面可见
-
-
‘gen_param’
返回
find_box_3d
算法的部分输入参数,键lengths
代表SideLen1
,SideLen2
,SideLen3
;键min_score
表示Min_Score
。其他键与GenParam
类似 。 -
‘sampled_edges’
采样边缘的模型句柄。以
XYZ-mapping
的查看方向作为边缘点的法向量 -
‘sampled_edges_direction’
采样边缘模型句柄。边缘点的法向量为真实的边缘法向量
-
‘sampled_scene’
采样后的模型句柄
-
‘sampled_reference_points’
用作匹配参考点的采样点句柄
-
5. 样例
dev_update_off ()
ImagePath := 'boxes/cardboard_boxes_'
dev_close_window ()
RobotToolSize := 0.03
gen_robot_tool_and_base_object_model_3d (RobotToolSize * 0.05, RobotToolSize, OM3DToolOrigin, OM3DBase)
read_image (ImageXYZ, ImagePath + 'xyz_04')
decompose3 (ImageXYZ, X, Y, Z)
xyz_to_object_model_3d (X, Y, Z, OM3DScene)
Len1 := [0.099,0.11]
Len2 := [0.075,0.085]
Len3 := [0.045,0.065]
create_dict (Params)
set_dict_tuple (Params, 'remove_outer_edges', 'true')
set_dict_tuple (Params, 'max_gap', 150)
find_box_3d (OM3DScene, Len1, Len2, Len3, 0.2, Params, GrippingPose, Score, OM3DBox, BoxInformation)
GripTools := []
Colors := []
for Index := 0 to |Score| - 1 by 1
rigid_trans_object_model_3d (OM3DToolOrigin, GrippingPose[7 * Index:7 * Index + 6], OM3DToolTransformed)
GripTools := [GripTools,OM3DToolTransformed]
endfor
5.1 结果显示
5.2 ObjectModel3DBox
5.3 BoxInformation
5.3.1 sample_scene 与 sample_reference_points
- 原始点云
- 重采样后的点云
- 用于匹配的参考点点云
5.3.2 sample_edges 与 sample_edges_directions
sample_edges
边缘点的法向量远离XYZ-mapping
查看点方向
sample_edges_directions
边缘点法向量向外