BoxSortGenerator 箱子排序生成器
BoxSortGenerator 算子用于对输入的箱盒目标中心 poselist 进行排序和缺失拓充,并给出排序效果示意。
目前仅支持 8 种标准排序,并且要求箱盒目标的中心 pose 姿态的轴向定义同箱体本身的长宽方向保持平行或垂直。举例来说,如果将一个长方体箱子的对角线方向定义成其 pose 姿态的 X 轴或 Y 轴,则本算子不适用。
算子参数
-
坐标列表
:设置坐标列表在 3D 视图中的可视化属性。-
打开坐标列表可视化。
-
关闭坐标列表可视化。
-
设置坐标列表的尺寸大小。取值范围:[ 0.001,10] 。默认值:0.1 。
-
-
索引列表
:设置索引列表的曝光属性,曝光后,可以与表格
控件进行绑定。-
打开索引列表可视化。
-
关闭索引列表可视化。
-
-
新增索引列表
:设置新增索引列表的曝光属性,曝光后,可以与表格
控件进行绑定。-
打开新增索引列表可视化。
-
关闭新增索引列表可视化。
-
-
模板图
:设置模板图在 2D 视图中的可视化属性。-
打开模板图可视化。
-
关闭模板图可视化。
-
-
效果图
:设置效果图在 2D 视图中的可视化属性。-
打开效果图可视化。
-
关闭效果图可视化。
-
算子面板
右击 BoxSortGenerator 算子,点击菜单栏中算子面板
打开箱子排序生成器面板。
面板中包含左右两张图像显示区、13个参数设置区、以及一个更新按钮。
模板图
以输入端口的 poselist 的平均 pose 的 X 轴为 X 轴,以输入端口的 poselist 的平均 pose 的 Y 轴为 Y 轴,建立标准模板坐标系。
注意:在设置模板参数的时候,一定要先明确需要将最终目标的哪个边作为其中心 pose 姿态的 X 轴,这直接关系着模板参数的行列设置。同样的,在设置好模板参数后,实际调用本算子进行排序计算时,也要确保输入的目标 poselist 的坐标轴的朝向符合设置。
图中,以红色描绘 X 轴的箭头朝向以及目标的轮廓宽度,以绿色描绘 Y 轴的箭头朝向以及目标的轮廓高度。并根据参数来描绘目标的排列方式。图像中的像素同实际尺寸的比例不固定,但是图像两个轴方向上的比例尺默认保持一致,在对窗体进行拉伸时,会破坏两个轴比例尺的一致性。
图中每一个目标都有两组序号:左上角白色小序号,中间位置的蓝色/黄色标准序号。前者涉及运算过程以及拓充关系,后者即为最终的排序序号。
效果图
根据算子输入端口的 poselist 以及参照图像,结合用户在算子面板中输入的所有参数,生成的最终排序拓充效果示意图。
参数介绍
涉及尺寸的参数,单位均为米。
-
行数
:沿着 Y 轴方向的目标数量称为行数。 -
列数
:沿着X轴方向的目标数量称为列数。注意:行数和列数需与实际相符。
-
行间距
:两行之间的目标中心的距离。 -
列间距
:两列之间的目标中心的距离。注意:行间距和列间距应当尽量输入准确,否则在“分类方式”选择不恰当时,会导致排序错误。
-
宽度
:目标沿着 X 轴方向的长。 -
高度
:目标沿着 Y 轴方向的长。注意:宽度和高度仅影响显示效果,不影响计算。
-
标签尺寸
:影响绘图时的线条粗细、中心点半径、字体大小等。 -
彩色图标定文件
:当前使用的图漾相机的出厂彩色镜头标定文件。在启用RVS内的相机资源时,会自动根据资源参数中规定的文件路径产生该文件。 -
转换位姿
:算子输入 poselist 所在的空间坐标系同相机彩色镜头坐标系的转换关系。如果没有对相机镜头的输出点云做空间转换,则直接单击 RVS 相机资源中的相机外参坐标
里面的复制按钮并粘贴到这里即可。 -
分类方式
:该选项内容决定了在实际排序计算的过程中,对目标按照行分类还是列分类,同时直接影响拓充目标是按照紧邻目标的 X 轴还是 Y 轴进行拓充。 举例来说,当该参数选择按X轴分类
时,会对所有输入 pose 按照“ y 数值较为接近”分为同一类,之后在类内进行排序和缺失目标拓充。此时被拓充的目标将会按照同一类内相近目标的 x 轴方向进行位置运算。 通常建议,当行间距大于列间距时,选择按X轴分类
;当行间距小于列间距时,选择按Y轴分类
。也可以“逆向选择”,但是要确保输入行间距参数和列间距参数的准确性,以及物体摆放位置的规范性。注意:该选项不会影响最终的排序结果和显示序号,仅仅涉及底层的运算以及影响拓充目标的计算位置,其影响的是算子底层运算结果的序号,在图中以目标左上角的白色小序号作为标识;当“逆向选择”时如果无法保证拜访目标的稳定性,则可能出现计算错误,则会引起排序结果和显示序号的混乱。
-
拓充方向
:决定按照临近目标的位姿
进行拓充还是按照所有输入目标的平均位姿的方向
进行拓充。 -
排序模式
:含8种。以”X+ Y+”为例,所有的目标,最终先按照目标的 X 轴方向进行排序,再按照 Y 轴方向进行排序。 -
保留拓充目标
:勾选时,最后的输出 poselist 会包含拓充目标,否则不包含。同时,也会影响效果图中是否显示拓充目标。 -
更新
:对参数做了变更后,需要单击更新
按钮,使其生效。该按钮还会自动调用一次算子的执行函数,即算子的输出端口也会进行更新。
数据信号输入输出
输入:
-
坐标列表
:-
数据类型:PoseList
-
输入内容:需要参与排序的目标中心的 poselist,要求这些目标的 pose 姿态保持方向上的一致性。
-
-
图像
:-
数据类型:Image
-
输入内容:相机拍照的原图,目的是形成最终的排序效果图底图。该输入可以为空,为空时不影响实际排序和拓充计算,但会导致无法显示最终效果图。
-
输出:
-
坐标列表
:-
数据类型:PoseList
-
输出内容:对原始 poselist 进行排序拓充后的所有 pose 的排序结果。如果不允许输出拓充目标(该参数的设置在参数面板中),则这里的 poselist 结果中将仅仅包含原始 poselist 中的目标。
-
-
索引列表
:-
数据类型:StringList
-
输出内容:上述的输出 poselist 中,每一个非拓充 pose 对应的输入 poselist 中的索引序号。
-
-
新增索引列表
:-
数据类型:StringList
-
输出内容:上述的输出 poselist 中,每一个拓充 pose 所在的索引序号。
-
-
模板图
:-
数据类型:Image
-
输出内容:根据用户在算子面板中输入的
行数
、列数
、行间距
、列间距
、宽度
、高度
、标签尺寸
、分类方式
、排序模式
9个参数,生成的模板示意图。模板图的生成,不依赖于算子的输入端口。该输出端口对应的模板图同时会在算子面板中的左侧显示。
-
-
效果图
:-
数据类型:Image
-
输出内容:根据算子输入端口的 poselist 以及参照图像,结合用户在算子面板中输入的所有参数,生成的最终排序拓充效果示意图。该输出端口对应的效果图同时会在算子面板中的右侧显示。
-
功能演示
使用 BoxSortGenerator 进行箱子排序。
本案例只涉及 BoxSortGenerator 算子部分的演示,完整的 XML 与数据已上传至 example_data.zip 中的 BoxSortGenerator 文件夹。将文件夹内三项直接复制至 runtime 目录即可。
步骤1:XML 准备
-
打开 RVS,加载 box_sort_offline.xml 。
步骤2:运行
点击 RVS 运行按钮。
运行结果
-
自动触发一次XML。
-
打开 BoxSortGenerator 算子属性面板中
模板图
和效果图
的 2D 视图可视化属性,result_image 为效果图,显示排序结果。templete_image 为模板图,显示用户自定义的模板示意图。 -
点击 iterate 算子,进行数据迭代。3D 视图显示箱子点云与拓充后的所有 pose 。
-
2D 视图显示拓充效果图与模板图。
步骤3:箱子排序生成器面板配置
-
打开
箱子排序生成器面板
,面板下方用于排序参数填写。本案例中参数填写如下图所示。 -
参数填写完成后,直接点击
更新
按钮,即可在面板中查看排序结果。如下图中:
分类方式
修改为按Y轴分类
。点击更新
。 -
分类方式
修改为按X轴分类
。再次点击更新
后,效果图发生变化。