feat: update algorithm integrations and point cloud overlays

This commit is contained in:
2026-06-30 16:46:36 +08:00
parent ddca7e5436
commit 7e2e56a50d
64 changed files with 4356 additions and 2781 deletions

View File

@@ -0,0 +1,537 @@
# 列车测量任务配置文件 - 使用原始点云(未配准)
# 测试所有任务在原始点云上的表现
# 点云文件路径
pointcloud_file: "/home/suzhe/pcc/train_models/train_2_1T.ply"
# ROI提取配置 - 使用优化Grid索引
roi_extraction:
method: "grid" # 使用Grid网格索引
use_optimized: true # 使用优化版(numpy向量化,快75倍)
grid_size: 100.0 # 网格大小100mm
# 性能预期:
# - 索引构建: 223秒 (一次性)
# - ROI提取: 0.19秒/任务 (vs Linear的14秒/任务)
# - 20任务总时间: ~12分钟 (vs Linear的13分钟)
# - 提升: 约7% (1分钟)
# 测量任务列表
tasks:
- name: "任务21_侧门高度"
type: "line_to_plane" # TODO: 改为 line_to_line
enabled: true
description: "测量侧门顶部边缘线到底部边缘线的距离"
#2176.7 - 2176.4
theoretical_dimension: 2176.4
tolerance:
upper: 4
lower: 1
# 源边缘线ROI(侧门顶部边缘)
source_roi:
line_start: [-2460, 3356.43, -1511.26]
line_end: [-1821.05, 3356.43, -1511.26]
# 目标边缘线ROI(侧门底部边缘)
target_roi:
bbox_min: [-2500, 1177, -1621]
bbox_max: [-1500, 1183, -1500]
params:
sample_points: 100
ransac_threshold: 2.0
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
roi_distance_threshold: 0.02 # 精筛选距离阈值(mm)
- name: "任务2_车体长度"
type: "plane_to_plane"
enabled: true
description: "测量车体前后端面的距离"
theoretical_dimension: 26507 # 理论尺寸
tolerance: 10
# visualization_dir: "visualizations_0617"
source_roi:
bbox_min: [-14009, 1500, -900]
bbox_max: [-14005, 1700, 900]
target_roi:
bbox_min: [12497, 1070, -1300]
bbox_max: [12503, 1160, 1300]
params:
sample_points: 100
ransac_threshold: 0.1
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
- name: "任务43_窗口下沿高度"
type: "line_to_plane" # TODO: 改为 line_to_plane
enabled: true
description: "测量窗口下沿边缘线到地面的距离"
theoretical_dimension: 803
tolerance:
upper: 6.5
lower: -4
# 源边缘线ROI(窗口下沿边缘)
source_roi:
line_start: [933.37,1983,-1676.62]
line_end: [2114.6,1983,-1676.62]
# 目标平面ROI(地面)
target_roi:
bbox_min: [-10222, 1179, -302]
bbox_max: [12428, 1181, 302]
params:
sample_points: 100
ransac_threshold: 0.5
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
roi_distance_threshold: 0.02 # 精筛选距离阈值(mm)
- name: "任务44_车顶高度"
type: "plane_to_plane"
enabled: true
description: "测量车顶到地面的距离"
theoretical_dimension: 2800 # 理论尺寸
tolerance:
upper: 7
lower: -1 # 公差 ±3mm
source_roi:
bbox_min: [2000, 3979, -14]
bbox_max: [5000, 3981, 14]
target_roi:
bbox_min: [100, 1177, -1510]
bbox_max: [11000, 1183, -1420]
params:
sample_points: 100
ransac_threshold: 0.1
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
# - name: "任务3_边梁立面6点到z=0平面距离"
# type: "point_to_plane"
# enabled: false
# description: "测量边梁立面6个精确点到z=0平面的距离"
# mode: "exact_points"
# theoretical_dimension: 1445 # 理论尺寸
# tolerance:
# upper: 0
# lower: -2 # 公差 ±3mm
# # 目标点坐标(左右各3个点)
# target_points:
# - [-753.5, 1052.5, -1445]
# - [-753.5, 1052.5, 1445]
# - [3446.5, 1053, -1445]
# - [3446.5, 1053, 1445]
# - [8146.5, 1053, -1445]
# - [8146.5, 1053, 1445]
# # 平面参数 (ax + by + cz + d = 0),z=0即c=1, d=0
# plane:
# a: 0
# b: 0
# c: 1
# d: 0
# # 最近点搜索半径(mm)
# search_radius: 10.0
- name: "任务15_侧墙z最大值点到z=0平面距离"
type: "point_to_plane"
enabled: true
description: "从两个包围盒提取侧墙点云,选取z绝对值最大的10个点,计算到z=0平面的距离"
mode: "bbox_filtered"
theoretical_dimension: 1680 # 理论尺寸
tolerance:
upper: -2
lower: -6 # 公差 ±3mm
# 包围盒列表
bboxes:
- name: "左侧墙"
min: [-1468, 1899, -1680]
max: [12300, 1901, -1677]
- name: "右侧墙"
min: [-1468, 1899, 1677]
max: [12300, 1901, 1680]
# 过滤条件
filter:
type: "max_abs_coordinate"
axis: "z"
top_n: 10
# 平面参数 (z=0)
plane:
a: 0
b: 0
c: 1
d: 0
# - name: "任务4_纵向梁距离"
# type: "point_to_point"
# enabled: true
# description: "测量关于z=0对称的点对之间的距离(纵向梁)"
# theoretical_dimension: 2890 # 理论尺寸
# tolerance:
# upper: 0
# lower: -4 # 公差 ±3mm
# # 点对配置(使用任务3的6个点,配对测量)
# point_pairs:
# - name: "前端点对"
# point1: [-753.5, 1052.5, -1445]
# point2: [-753.5, 1052.5, 1445]
# - name: "中间点对"
# point1: [3446.5, 1053, -1445]
# point2: [3446.5, 1053, 1445]
# - name: "后端点对"
# point1: [8146.5, 1053, -1445]
# point2: [8146.5, 1053, 1445]
# # 最近点搜索半径(mm)
# search_radius: 10.0
- name: "任务1_转向架距离"
type: "point_to_point + hole_center"
enabled: true
description: "测量两对定位孔的x距离,作为转向架间距离"
theoretical_dimension: 17800
tolerance: 2
boxes:
- name: "左前"
min: [-8944,1020,-1507]
max: [-8846,1040,-1401]
- name: "右前"
min: [-8947,1020,1400]
max: [-8847,1040,1507]
- name: "左后"
min: [8850,1020,-1551]
max: [8955,1040,-1450]
- name: "右后"
min: [8850,1020,1450]
max: [8950,1040,1552]
# - name: "任务6_转向架未加工支撑面到参考线距离"
# type: "plane_to_plane + 4_hole_center"
# enabled: false
# description: "四个孔定位参考线平面,转向架支撑面用ROI框定"
# theoretical_dimension: 65
# tolerance:
# upper: 8.5
# lower: -3
# visualization_dir: "visualizations_0617"
# boxes:
# - name: "左上孔"
# min: [11631,1010,155]
# max: [11674,1055,210]
# - name: "右上孔"
# min: [11631,1010,-210]
# max: [11674,1055,-155]
# - name: "左下孔"
# min: [11631,812,155]
# max: [11674,857,205]
# - name: "右下孔"
# min: [11631,812,-205]
# max: [11674,857,-155]
# - name: "左加工面"
# min: [-9189,998,1405]
# max: [-8993,1002,1501]
# - name: "右加工面"
# min: [-9191,998,-1500]
# max: [-8990,1002,-1410]
# params:
# sample_points: 100
# ransac_threshold: 0.1
# ransac_max_iterations: 1000
# min_inlier_ratio: 0.6
- name: "任务7_边梁下平面到参考线的距离"
type: "plane_to_plane + 4_hole_center"
enabled: true
description: "四个孔定位参考平面,边梁下平面用ROI指定"
theoretical_dimension: 85
tolerance:
upper: 8.5
lower: -3
# visualization_dir: "visualizations_0617"
boxes:
- name: "左上孔"
min: [11631,1015,159]
max: [11674,1050,206]
- name: "右上孔"
min: [11631,1015,-201]
max: [11674,1050,-157]
- name: "左下孔"
min: [11631,817,160]
max: [11674,852,200]
- name: "右下孔"
min: [11631,817,-200]
max: [11674,852,-160]
- name: "左平面"
min: [8847,1017,-1629]
max: [8876,1023,-1548]
- name: "右平面"
min: [8862,1017,1593]
max: [8944,1023,1624]
params:
sample_points: 100
ransac_threshold: 0.1
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
- name: "任务18_门口宽度"
type: "plane_to_plane"
enabled: true
description: "乘客门口宽度"
theoretical_dimension: 1070 # 理论尺寸
tolerance:
upper: 3
lower: 0
# 源平面(采样点的来源)
source_roi:
bbox_min: [-2552, 1390, 1402]
bbox_max: [-2551, 3080, 1577]
# 目标平面(测量距离的目标)
target_roi:
bbox_min: [-1482, 1400, 1513]
bbox_max: [-1481, 3120, 1591]
params:
sample_points: 100
ransac_threshold: 0.1
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
check_width_variation: true # 启用宽度差值检查(任务19)
width_variation_tolerance: 2.0 # 差值公差 ±2mm
- name: "任务28_端门口宽度"
type: "plane_to_plane"
description: "后部门口宽度"
theoretical_dimension: 900 # 理论尺寸
tolerance:
upper: 2
lower: 0
# 源平面(采样点的来源)
source_roi:
bbox_min: [12428, 1244, -451]
bbox_max: [12480, 3070, -449]
# 目标平面(测量距离的目标)
target_roi:
bbox_min: [12428, 1278, 449]
bbox_max: [12480, 3090, 451]
params:
sample_points: 100
ransac_threshold: 0.1
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
- name: "任务29_端门口高度"
type: "plane_to_plane"
description: "后部门口高度"
theoretical_dimension: 2050 # 理论尺寸
tolerance:
upper: 5
lower: 0
# 源平面(采样点的来源)
source_roi:
bbox_min: [12424, 3229, -330]
bbox_max: [12486, 3231, 330]
# 目标平面(测量距离的目标)
target_roi:
bbox_min: [12440, 1179, -440]
bbox_max: [12490, 1181, 440]
params:
sample_points: 100
ransac_threshold: 0.05
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
- name: "任务32_司机室登车门门口宽度"
type: "line_to_line" # TODO: 改为 line_to_line
enabled: true
description: "司机室门口宽度(左右两条边缘线之间的距离)"
# 566 - 566.6
theoretical_dimension: 566.6
tolerance:
upper: 3
lower: 0
# 源边缘线ROI(门口左侧边缘)
source_roi:
line_start: [-8177.85,1650.33,-1541.48]
line_end: [-8177.85,2448.88,-1499.63]
# 目标边缘线ROI(门口右侧边缘)
target_roi:
line_start: [-8744.48,1727.71,-1537.42]
line_end: [-8744.48,2421.28,-1501.08]
params:
sample_points: 100
ransac_threshold: 2.0
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
roi_distance_threshold: 0.02 # 精筛选距离阈值(mm)
- name: "任务33_司机室登车门门口高度"
type: "line_to_line" # TODO: 改为 line_to_line
enabled: true
description: "司机室门口高度(上下两条边缘线之间的距离)"
# 1687 - 1687.1
theoretical_dimension: 1687.1
tolerance:
upper: 3
lower: 0
# 源边缘线ROI(门口上边缘)
source_roi:
line_start: [-8630.24,2994.7,-1467.83]
line_end: [-8280.89,2994.7,-1467.83]
# 目标边缘线ROI(门口下边缘)
target_roi:
line_start: [-8625.48,1309.87,-1555.36]
line_end: [-8301.7,1309.87,-1555.36]
params:
sample_points: 100
ransac_threshold: 2.0
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
roi_distance_threshold: 0.02 # 精筛选距离阈值(mm)
# - name: "任务14_侧墙相对纵梁的角度位置"
# type: "point_to_plane"
# description: "包围盒提取窗口上沿,选取z绝对值最大的10个点,计算到z=1445平面的距离"
# mode: "bbox_filtered"
# theoretical_dimension: 179.3 # 理论尺寸
# tolerance:
# upper: 2
# lower: -4 # 公差 ±3mm
# # 包围盒列表
# bboxes:
# - name: "左窗口上沿"
# min: [1136, 2700, 1620]
# max: [1713, 2745, 1630]
# # 过滤条件
# filter:
# type: "max_abs_coordinate"
# axis: "z"
# top_n: 10
# # 平面参数 (z=0)
# plane:
# a: 0
# b: 0
# c: 1
# d: -1445
- name: "任务30_参考线到司机室辅助孔距离"
type: "point_to_plane + 4_hole_center + 1_hole_center"
enabled: true
description: "4孔定参考线平面,1孔定辅助孔位置,点到面"
theoretical_dimension: 308.5
tolerance: 2
boxes:
- name: "左上孔"
min: [11631,1015,159]
max: [11674,1050,206]
- name: "右上孔"
min: [11631,1015,-201]
max: [11674,1050,-157]
- name: "左下孔"
min: [11631,817,160]
max: [11674,852,200]
- name: "右下孔"
min: [11631,817,-200]
max: [11674,852,-160]
- name: "辅助孔"
min: [-13308, 620, -5]
max: [-13296, 630, 5]
- name: "任务16_车体最大宽度"
type: "point_to_point"
enabled: true
description: "从两个包围盒提取侧墙点云,选取z绝对值最大的10个点,他们z距离之差"
mode: "bbox_filtered"
theoretical_dimension: 3360
tolerance:
upper: -4
lower: -10
# 包围盒列表
bboxes:
- name: "左侧墙"
min: [-1468, 1890, -1680]
max: [12300, 1910, -1677]
- name: "右侧墙"
min: [-1468, 1890, 1677]
max: [12300, 1900, 1680]
# 过滤条件
filter:
type: "max_abs_coordinate"
axis: "z"
top_n: 10
- name: "任务47_内端墙门口高"
type: "plane_to_plane"
enabled: true
description: "车体内部神秘横梁高度"
theoretical_dimension: 2200
tolerance:
upper: 2
lower: 0
# 源平面(采样点的来源)
source_roi:
bbox_min: [-98, 3379, -1000]
bbox_max: [-77, 3381, 1000]
# 目标平面(测量距离的目标)
target_roi:
bbox_min: [-1000, 1179, -300]
bbox_max: [1000, 1181, 300]
params:
sample_points: 100
ransac_threshold: 0.1
ransac_max_iterations: 1000
min_inlier_ratio: 0.6
- name: "任务46_车体横断面对角线差值"
type: "point_to_point"
enabled: true
description: "对角线距离作差"
theoretical_dimension: 0 # 理论差值为0
tolerance: 0.1
# visualization_dir: "visualizations"
mode: "exact_points"
# 定义两条对角线的点对
point_pairs:
- name: "对角线1"
point1: [3500, 1180, 1541.42] # 左下角
point2: [3500, 2961.83, -1543.02] # 右上角
- name: "对角线2"
point1: [3500, 1180, -1541.42] # 右下角
point2: [3500, 2961.85, 1543.02] # 左上角
# 查找最近点的搜索半径(mm)
search_radius: 10.0
# 差值比较配置
compare_mode: "difference" # 启用差值比较模式
compare_pairs: [0, 1] # 比较对角线1和对角线2的距离
difference_tolerance: 0.1 # 差值阈值:2mm