LineOperation 线段处理工具
LineOperation算子用于对 Line 以及 Pose 对象进行一些 3D 几何运算。
type | 功能 |
---|---|
PointToLineDistance | 计算点(以 Pose 形式给出)到直线的距离,并给出垂足和垂线段。 |
LineCrossPoint | 求两条直线交点或者两条异面直线距离最近处的中间点。 |
PoseStepByLine | 过点( 以 Pose 形式给出) 作直线的平行线,该平行线长度由算子参数给出注意,上述直线方向,由给定线段 Line 的 pose1 指向 pose2 。 |
LineProjectionAngle | 求一条线段在 3 个空间基坐标面 (Oxy 、Oxz 、Oyz) 下的投影角度。 |
LineCrossAngle | 求两条线之间的夹角角度。夹角角度起点为 Line1 的 P2 ,角度终点为 Line2 的 P2。 |
PointToLineDistance
将 LineOperation 算子的 类型
属性选择 PointToLineDistance,用于计算点 (以 Pose 形式给出) 到直线的距离,并给出垂足和垂线段。
注意:上述垂足 Pose ,仅有 xyz 数值是有效值,而三个旋转角全部同输入 Pose 保持一致。
算子参数
-
垂直线/vertical_line
:设置垂线段 Line 在 3D 视图中的可视化属性。-
打开线段可视化。
-
关闭线段可视化。
-
设置线段的颜色。取值范围:[-2,360] 。默认值:60 。
-
设置线段的线宽。取值范围:[0,100] 。默认值:1 。
-
-
垂直点/vertical_point
:设置垂足 Pose 在 3D 视图中的可视化属性。-
打开 pose 可视化。
-
关闭 pose 可视化。
-
设置 pose 的尺寸大小。取值范围:[0.001,10] 。默认值:0.1。
-
-
距离/distance
:设置垂线段到垂足的距离曝光属性。 打开后可用于与交互面板中输出工具——“文本框”控件绑定。-
打开 distance 曝光。
-
关闭 distance 曝光。
-
数据信号输入输出
输入:
-
line
:-
数据类型:Line
-
输入内容:线段
-
-
point
:-
数据类型:Pose
-
输入内容:点(仅使用 Pose 的 xyz )
-
输出:
-
vertical_line
:-
数据类型:Line
-
输出内容:以输入点和垂足点为端点的垂线段
-
-
vertical_point
:-
数据类型:Pose
-
输出内容:垂足
-
-
distance
:-
数据类型:String
-
输出内容:点到直线的距离
-
功能演示
使用 LineOperation 算子中 PointToLineDistance 求点到直线的距离。
步骤1:算子准备
添加 Trigger 、Emit(4个) 、LineOperation 算子至算子图。
步骤2:设置算子参数
-
设置 Emit 算子参数:
-
类型 → Pose
-
坐标 → 0.1 0 0 0 0 1
-
坐标 → 可视
-
-
设置 Emit_1 算子参数:
-
类型 → Pose
-
坐标 → -0.1 0.2 0 0 1 0
-
坐标 → 可视
-
-
设置 Emit_2 算子参数:
-
类型 → Pose
-
坐标 → 0.3 0.2 0 0 0 1
-
坐标 → 可视
-
-
设置 Emit_3 算子参数:
-
类型 → Line
-
线段 → 可视
-
-
设置 LineOperation 算子参数:
-
类型 → PointToLineDistance
-
垂直线 → 可视
-
垂直点→ 可视
-
步骤3:连接算子
步骤4:运行
点击 RVS 运行按钮,触发 Trigger 算子。
运行结果
结果显示如下,分别显示 Emit / Emit_1 / Emit_2 生成的 pose ,Emit_3 生成的线段,LineOperation 的 Vertical_line 、vertical_point 。
LineCrossPoint
将 LineOperation 算子的 类型
属性选择 LineCrossPoint ,用于求两条直线交点或者两条异面直线距离最近处的中间点。
算子参数
-
最大距离/max_distance
:距离阈值。当两条直线之间的最短距离小于该阈值时,则算子触发failed信号。 -
中垂线中点/cross_point
:对 cross_point 输出端口的 Pose 进行显示控制,默认为关闭状态,参数介绍如下所示。 -
line1中垂线交点/line1_point
:对 line1_point 输出端口的 Pose 进行显示控制,默认为关闭状态,参数介绍如下所示。 -
line2中垂线交点/line2_point
:对 line2_point 输出端口的 Pose 进行显示控制,默认为关闭状态,参数介绍如下所示。-
打开 pose 可视化。
-
关闭 pose 可视化。
-
设置 pose 的尺寸大小。取值范围:[0.001,10] 。默认值:0.1 。
-
数据信号输入输出
输入:
-
line1
:-
数据类型:Line
-
输入内容:线段1
-
-
line2
:-
数据类型:Line
-
输入内容:线段2
-
输出:
-
cross_point
:-
数据类型:Pose
-
输出内容:两条空间直线的“交点”。异面直线不相交时,则为两条直线相距最近点的中点。
-
-
line1_point
:-
数据类型:Pose
-
输出内容:两条空间直线的“交点”。异面直线不相交时,则为直线line1上的相距最近点。
-
-
line2_point
:-
数据类型:Pose
-
输出内容:两条空间直线的“交点”。异面直线不相交时,则为直线line2上的相距最近点。
注意,上述三个Pose输出仅有 xyz 数值是有效值,而三个旋转角全部是 0。
-
功能演示
使用 LineOperation 算子中 LineCrossPoint 求加载点云中两条直线角点或者两条异面直线距离最近处的中间点。
步骤1:算子准备
添加 Trigger、Emit 、Load 、FindElement (2个) 、LineOperation 、GeometryProbe 、(2个)、WaitAllTriggers 算子至算子图。
步骤2:设置算子参数
-
设置 Emit算子参数:
-
类型 → cube
-
坐标 → 0.199179 0.26519 0.092586 2.61142 -2.82994 3.07943
-
宽度 → 0.02
-
高度 → 0.01
-
深度 → 0.005
-
-
设置 Load 算子参数:
-
类型 → PointCloud
-
文件 → → 选择点云文件名( example_data/pointcloud/cloud.pcd )
-
-
设置 LineOperation 算子参数:
-
类型 → LineCrossPoint
-
最大距离→ 0.003
-
中垂线中点 → 可视 → 0.01
-
-
设置 FindElement 算子参数:
-
类型 → Line
-
最大迭代次数 → 1000
-
距离阈值 → 0.0001
-
线段长度 → 0.1
-
线段 → 可视
-
-
设置 FindElement_1 算子参数:
-
类型 → Line
-
最大迭代次数 → 1000
-
距离阈值 → 0.0001
-
线段长度 → 0.1
-
线段 → 可视
-
-
设置 GeometryProbe 算子参数
-
类型 → Line
-
探测方向 → y-
-
圆锥体顶角度 → 45
-
有效点百分比 → 10
-
步进值 → 5
-
线段点云 → 可视
-
-
设置 GeometryProbe_1 算子参数
-
类型 → Line
-
探测方向 → x-
-
圆锥体顶角度 → 45
-
有效点百分比→ 10
-
步进值 → 5
-
线段点云 → 可视
-
-
设置 WaitAllTriggers 算子参数:输入数量 → 2
步骤3:连接算子
步骤4:运行
点击 RVS 运行按钮,触发 Trigger 算子。
运行结果
结果如下图所示,两条直线为 FindElement 中属性 line 的可视化结果,蓝色点云和绿色点云为 GeometryProbe 算子的属性 line_cloud 可视化结果。pose 为LineOperation 算子的可视化结果。
PoseStepByLine
将 LineOperation 算子的 类型
属性选择 PoseStepByLine ,过点( 以 Pose 形式给出 )作直线的平行线,该平行线长度由算子参数给出。
注意:上述直线方向,由给定线段 Line 的 pose1 指向 pose2 。
算子参数
-
步长距离/step_distance
:延伸长度。 -
方向与参考线段一致/direction_same_with_line
:默认不勾选,此时输出的 pose 的3个旋转角同输入 pose 保持一致。-
True:输出的 pose 方向轴的 x 轴同线段方向保持一致。
-
False:输出的 pose 的3个旋转角同输入 pose 保持一致。
-
-
坐标/pose
:对 pose 输出端口的 Pose 进行显示控制。-
打开 pose 可视化。
-
关闭 pose 可视化。
-
设置 pose 的尺寸大小。取值范围:[0.001,10] 。默认值:0.1 。
-
数据信号输入输出
输入:
-
pose
:-
数据类型:Pose
-
输入内容:pose 坐标
-
-
ref_line
:-
数据类型:Line
-
输入内容:参考线段
-
输出:
-
pose
:-
数据类型:Pose
-
输出内容:延伸点
-
功能演示
使用 LineOperation 算子中 PoseStepByLine 作直线的平行线。
步骤1:算子准备
添加 Trigger 、Emit (4个) 、LineOperation 算子至算子图。
步骤2:设置算子参数
-
设置 Emit 算子参数:
-
算子名称 → Emit_Pose
-
类型 → Pose
-
坐标 → 0.1 0 0 1.5708 0 0
-
坐标 → 可视 → 0.05
-
-
设置 Emit_1 算子参数:
-
算子名称 → Emit_Pose1
-
类型 → Pose
-
坐标 → 0 0 0 0 0 0
-
坐标 → 可视 → 0.05
-
-
设置 Emit_2 算子参数:
-
算子名称 → Emit_Pose2
-
类型 → Pose
-
坐标 → 0 0 0.1 0 0 1
-
坐标 → 可视 → 0.05
-
-
设置 Emit_3 算子参数:
-
算子名称 → Emit_line
-
类型 → Line
-
线段 → 可视
-
-
设置 LineOperation 算子参数:
-
类型 → PoseStepByLine
-
步长距离 → 0.1
-
坐标 → 可视 → 0.05
-
步骤3:连接算子
步骤4:运行
点击 RVS 运行按钮,触发 Trigger 算子。
运行结果
-
Emit 算子的 Pose 或 Line 的可视化,LineOperation 算子的 pose 可视化,结果显示如下。
-
勾选 LineOperation 算子的 direction_same_with_line 参数,重新触发 XML 中的 trigger 算子,运行结果显示如下。(可见下图右上角的结果 pose 的红色 x 轴已经沿着线段方向 )
LineProjectionAngle
将 LineOperation 算子的 类型
属性选择 LineProjectAngle ,求一条线段在3个空间基坐标面 ( Oxy 、Oxz 、Oyz ) 下的投影角度。
算子参数
-
与xy|xz|yz平面夹角/angle_xy|xz|yz
:设置 angle_xy|xz|yz 投影角度在 3D 视图中的可视化属性。-
打开投影角度可视化。
-
关闭投影角度可视化。
-
设置 3D 视图中投影角度的颜色。取值范围:[-2,360] 。默认值:60 。
-
设置投影角度线的线宽。取值范围:[0,100] 。默认值:1 。
-
标注角显示。
-
数据信号输入输出
输入:
-
line
:-
数据类型:Line
-
输入内容:线段
-
输出:
-
angle_xy
:-
数据类型:Angle
-
输出内容:原线段在 Oxy 平面上的投影角度
-
-
angle_xz
:-
数据类型:Angle
-
输出内容:原线段在 Oxz 平面上的投影角度
-
-
angle_yz
:-
数据类型:Angle
-
输出内容:原线段在 Oyz 平面上的投影角度
说明:RVS 中的 Angle 数据在数学形式上是三个点,第一和第三个点表征两条边,中间点是角点;Line 在数学形式上是两个点,第一个点为起点,第二个点为终点;该算子输出的三个 Angle 的角点全部是原始输入线段的起点。
-
功能演示
使用 LineOperation 算子中 LineProjectionAngle 求一条线段在3个空间基坐标面 ( Oxy 、Oxz 、Oyz ) 下的投影角度。
步骤1:算子准备
添加 Trigger 、Emit(3个) 、LineOperation 算子至算子图。
步骤2:设置算子参数
-
设置 Emit 算子参数:
-
类型 → Pose
-
坐标 → 0 0 0 0 0 0
-
-
设置 Emit_1 算子参数:
-
类型 → Pose
-
坐标 → 0.03 0.1 0.05 0 1 0
-
-
设置 Emit_2 算子参数:
-
类型 → Line
-
线段 → 可视
-
-
设置 LineOperation 算子参数:
-
类型 → LineProjectionAngle
-
与XY平面夹角 → 可视
-
与XZ平面夹角 → 可视
-
与YZ平面夹角 → 可视
-
步骤3:连接算子
步骤4:运行
点击 RVS 运行按钮,触发 Trigger 算子。
运行结果
如下图所示,展示了 LineOperation 算子的结果。
-
与XY平面夹角
-
与XZ平面夹角
-
与YZ平面夹角
LineCrossAngle
将 LineOperation 算子的 类型
属性选择 LineCrossAngle ,求两条线之间的夹角角度。夹角角度起点为 Line1 的 P2 ,角度终点为 Line2 的 P2。
算子参数
-
cross_angle
:设置 cross_angle 角度在 3D 视图中的可视化属性。-
打开 cross_angle 角度可视化。
-
关闭 cross_angle 角度可视化。
-
设置 3D 视图中 cross_angle 角度的颜色。取值范围:[-2,360] 。默认值:60 。
-
设置 cross_angle 角度线的线宽。取值范围:[0,100] 。默认值:1 。
-
标注角显示。
-
-
数据信号输入输出
输入:
line1
:
-
数据类型:Line
-
输入内容:线段
line2
:
-
数据类型:Line
-
输入内容:线段
输出:
cross_angle
:
-
数据类型:Angle
-
输出内容:两条线之间的夹角角度
功能演示
使用 LineOperation 算子中 LineCrossAngle 求两条线的夹角角度。
步骤1:算子准备
添加 Trigger 、Emit(2个) 、LineOperation 算子至算子图。
步骤2:设置算子参数
-
设置 Emit 算子参数:
-
类型 → Line
-
P1 → -1 0 0 0 0 0
-
P2 → 1 0 0 0 0 0
-
线段 → 可视
-
-
设置 Emit_1 算子参数:
-
类型 → Line
-
P1 → 0 0 0 0 0 0
-
P2 → 1 1 0 0 0 0
-
线段 → 可视
-
-
设置 LineOperation 算子参数:
-
类型 → LineCrossAngle
-
cross_angle → 可视
-
步骤3:连接算子
步骤4:运行
点击 RVS 运行按钮,触发 Trigger 算子。
运行结果
如下图所示,左图是生Emit 算子生成的两条线段。右图为 LineCrossAngle 计算出的两条线段的夹角。