feat: 算法升级、整车配准集成与性能分析文档

算法更新: delivery v1.2.1、平整度v1.5、测距v2.2、整车配准v1.3
适配器: vehicle-registration 新增、各算法 manifest 和 adapter 更新
后端: taskCadFiles/source 字段迁移、derivedPointClouds 注册、取消任务联动
前端: ElapsedTime 时长显示、两步算法流程、canRun 逻辑修复
文档: 新增5份算法性能分析报告
This commit is contained in:
2026-06-25 08:22:20 +00:00
parent cec0766e67
commit 29f1d45d66
266 changed files with 1311475 additions and 2846 deletions

View File

@@ -0,0 +1,64 @@
from __future__ import annotations
import argparse
from translate_align_pointcloud_to_cad import translate_align_by_front_tail
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="Standalone train point-cloud translation alignment tool"
)
subparsers = parser.add_subparsers(dest="command", required=True)
translate_align = subparsers.add_parser(
"translate-align",
help="Align a whole point cloud to a standard STEP CAD by front/tail centroids",
)
translate_align.add_argument("--cad", "-c", default="datasets/CAD/M02.stp", help="Reference STEP CAD file")
translate_align.add_argument(
"--pointcloud",
"-p",
default="datasets/shift_test_output/",
help="Input PLY point cloud or a directory containing shifted_whole_pointcloud.ply",
)
translate_align.add_argument("--output-dir", "-o", default="results", help="Output directory")
translate_align.add_argument("--axis", choices=["x", "y", "z"], default="x", help="Train length axis")
translate_align.add_argument("--crop-ratio", type=float, default=0.01, help="Front/tail crop ratio")
translate_align.add_argument("--mesh-deflection", type=float, default=0.1, help="CAD meshing deflection")
translate_align.add_argument("--cad-sample-points", type=int, default=30000, help="Points sampled from CAD mesh")
translate_align.add_argument("--local-sample-points", type=int, default=1000, help="Points sampled from each end")
translate_align.add_argument("--scale-pointcloud", type=float, default=1.0, help="Scale factor applied to point cloud")
translate_align.add_argument("--no-visualize", action="store_true", help="Disable Open3D windows")
return parser
def main() -> None:
parser = build_parser()
args = parser.parse_args()
if args.command == "translate-align":
result = translate_align_by_front_tail(
cad_path=args.cad,
pointcloud_path=args.pointcloud,
output_dir=args.output_dir,
axis=args.axis,
crop_ratio=args.crop_ratio,
mesh_deflection=args.mesh_deflection,
cad_sample_points=args.cad_sample_points,
local_sample_points=args.local_sample_points,
scale_pointcloud=args.scale_pointcloud,
visualize=not args.no_visualize,
)
print("\n========== Result ==========")
print("translation:", result["translation"])
print("front-tail translation difference:", result["front_tail_translation_difference"])
print("aligned path:", result["aligned_path"])
print("matrix path:", result["matrix_path"])
else:
parser.error(f"Unsupported command: {args.command}")
if __name__ == "__main__":
main()