271 lines
13 KiB
Markdown
271 lines
13 KiB
Markdown
# 工业零件几何测量工具使用指南
|
||
> 支持测量种类:平整度、平面度、轮廓测量、曲率分析、点云去噪、平面拟合、点云配准评估
|
||
> 支持测量任务编号:11、13、17、20、25、26、27、31、34、35、36、37、38、39、40、41、42、45
|
||
|
||
## 一、环境配置
|
||
### 基础环境要求
|
||
- Python 3.10.8
|
||
- CUDA 11.8(建议,无CUDA时自动降级为CPU计算)
|
||
- PyTorch 2.2
|
||
|
||
### 依赖安装
|
||
```bash
|
||
conda install -f requirements.txt
|
||
```
|
||
> 注:需确保环境中已安装OCC Core(STEP/STL处理)、trimesh、open3d、numpy、scipy等依赖
|
||
|
||
---
|
||
|
||
## 二、CAD转轻量化Mesh(CAD2Mesh.py)
|
||
### 功能说明
|
||
将STEP格式的CAD模型转换为轻量化STL网格文件,通过调整网格精度控制文件体积(精度值越大,文件越小,精度越低),纯后台处理无界面显示,转换效率高。
|
||
|
||
### 输入输出
|
||
- **输入**:STEP格式CAD文件(路径示例:`High_Speed_Data/CAD/11.step`)
|
||
- **输出**:STL格式轻量化网格文件(路径示例:`High_Speed_Data/Mesh/11.stl`)
|
||
|
||
### 命令行参数说明
|
||
| 参数 | 简写 | 类型 | 默认值 | 说明 |
|
||
|--------------|------|--------|---------------------------------|----------------------------------------|
|
||
| --precision | -p | float | 1.0 | 网格精度(单位:mm),值越大文件体积越小 |
|
||
| --input | -i | string | High_Speed_Data/CAD/11.step | 输入STEP文件路径 |
|
||
| --output | -o | string | High_Speed_Data/Mesh/11.stl | 输出STL文件路径 |
|
||
|
||
### 运行示例
|
||
```bash
|
||
# 完整参数形式
|
||
python CAD2Mesh.py --precision 1 --input "High_Speed_Data/CAD/11.step" --output "High_Speed_Data/Mesh/11.stl"
|
||
|
||
# 简写参数形式
|
||
python CAD2Mesh.py -p 1 -i "High_Speed_Data/CAD/11.step" -o "High_Speed_Data/Mesh/11.stl"
|
||
```
|
||
|
||
### 运行日志说明
|
||
程序会输出三步处理日志及耗时:
|
||
1. STEP文件读取阶段
|
||
2. 网格离散化(轻量化)阶段
|
||
3. STL文件保存阶段
|
||
转换完成后会提示总耗时及STL文件打开工具建议(FreeCAD/MeshLab/3D Viewer)。
|
||
|
||
---
|
||
|
||
## 三、轮廓-平整度测量(Contour_Flatness.py)
|
||
### 功能说明
|
||
高精度计算点云到 CAD STEP 模型三角化表面的最近距离,输出平均距离(mean_dist)、最大距离(max_dist)和最小距离(min_dist),用于评估零件的平整度、平面度、轮廓偏差等几何精度指标;支持 CUDA 加速(自动检测),采用 torch.float64 高精度计算。
|
||
|
||
脚本现在支持两种模式:
|
||
- 默认批量模式:按任务编号从 `High_Speed_Data/CAD/` 和点云目录中读取多组数据,并输出 Excel 汇总。
|
||
- 单任务模式:添加 `--single` 后,使用 `--CAD` 和 `--pointcloud` 计算一组文件,可选 `--visualize` 显示热力图。
|
||
|
||
### 输入输出
|
||
- **输入**:
|
||
- CAD STEP 文件:路径示例 `High_Speed_Data/CAD/11.step`
|
||
- 点云 PLY 文件:批量模式默认读取 `High_Speed_Data/Noise_PointCloud/{id}_noisy.ply`,也可用 `--pointcloud_kind clean` 读取 `High_Speed_Data/PointCloud/{id}.ply`
|
||
- **输出**:
|
||
- 平均距离(mean_dist):点云中所有点到 CAD 三角面的平均最近距离(单位:mm)
|
||
- 最大距离(max_dist):点云中所有点到 CAD 三角面的最大最近距离(单位:mm)
|
||
- 最小距离(min_dist):点云中所有点到 CAD 三角面的最小最近距离(单位:mm)
|
||
- 批量模式会生成 Excel 汇总文件,默认 `平整度.xlsx`
|
||
|
||
### 命令行参数说明
|
||
| 参数 | 简写 | 类型 | 默认值 | 说明 |
|
||
|------|------|------|--------|------|
|
||
| --CAD | -c | string | High_Speed_Data/CAD/11.step | 单任务模式 CAD STEP 文件路径,仅 `--single` 时使用 |
|
||
| --pointcloud | -p | string | High_Speed_Data/Noise_PointCloud/11_noisy.ply | 单任务模式点云路径,仅 `--single` 时使用 |
|
||
| --tasks | - | string | 11,13,17,20,25,26,27,31,34,35,36,37,38,39,40,41,42,45 | 批量任务编号,多个编号用英文逗号分隔 |
|
||
| --data_root | - | string | High_Speed_Data | 批量任务数据根目录 |
|
||
| --pointcloud_kind | - | string | noise | 批量模式点云来源:`noise` 读取 Noise_PointCloud,`clean` 读取 PointCloud |
|
||
| --excel_output | - | string | 平整度.xlsx | 批量结果 Excel 输出路径 |
|
||
| --single | - | flag | false | 启用单任务模式 |
|
||
| --visualize | - | flag | false | 单任务模式下显示距离热力图 |
|
||
| --mesh_deflection | - | float | 0.1 | CAD 三角化精度,越小越精细但越慢 |
|
||
| --point_chunk_size | - | int | 2048 | 点云分块大小,显存/内存不足时可调小 |
|
||
| --triangle_chunk_size | - | int | 4096 | 三角面分块大小,显存/内存不足时可调小 |
|
||
|
||
### 运行示例
|
||
```bash
|
||
# 默认批量模式,使用 DEFAULT_TASK_IDS 并输出 平整度.xlsx
|
||
python Contour_Flatness.py
|
||
|
||
# 指定批量任务、点云来源和 Excel 输出
|
||
python Contour_Flatness.py --tasks "11,31,40" --data_root "High_Speed_Data" --pointcloud_kind noise --excel_output "vis/flatness.xlsx"
|
||
|
||
# 单任务模式
|
||
python Contour_Flatness.py --single --CAD "High_Speed_Data/CAD/11.step" --pointcloud "High_Speed_Data/Noise_PointCloud/11_noisy.ply"
|
||
|
||
# 单任务模式并显示热力图
|
||
python Contour_Flatness.py --single -c "High_Speed_Data/CAD/11.step" -p "High_Speed_Data/PointCloud/11.ply" --visualize
|
||
```
|
||
|
||
### 计算说明
|
||
1. CAD 读取:通过 pythonocc-core 读取 STEP,并使用 `mesh_deflection` 三角化。
|
||
2. 点云读取:优先使用 open3d(若安装),否则使用 trimesh 兼容读取。
|
||
3. 距离计算:点云和 CAD 三角面都分块处理,避免内存/显存溢出,支持大规模点云计算。
|
||
4. 批量结果:每个任务会记录成功/失败状态,成功任务会把 `points_np` 和 `distances_np` 缓存在 `task_distance_data` 中,便于后续可视化。
|
||
5. 精度保障:采用 torch.float64 高精度计算,支持 GPU/CPU 自动切换。
|
||
|
||
---
|
||
|
||
## 四、点云曲率估计(curvature_estimation.py)
|
||
### 功能说明
|
||
基于Open3D对工业零件点云进行曲率计算,通过邻域协方差矩阵分解获取曲率值,支持曲率彩色可视化,用于识别零件边缘、棱角、曲面等特征区域,为表面缺陷检测提供依据。
|
||
|
||
### 输入输出
|
||
- **输入**:PLY格式点云文件(路径示例:`High_Speed_Data/PointCloud/11.ply`)
|
||
- **输出**:曲率统计值、彩色可视化点云、可保存带曲率信息的PLY文件
|
||
|
||
### 命令行参数说明
|
||
| 参数 | 简写 | 类型 | 默认值 | 说明 |
|
||
|--------------|------|--------|---------------------------------|----------------------------------------|
|
||
| --ply_path | — | string | ./High_Speed_Data/PointCloud/11.ply | 输入点云路径 |
|
||
| --radius | — | float | 2.0 | 邻域搜索半径 |
|
||
| --max_nn | — | int | 30 | 最大邻域点数 |
|
||
| --color_scale| — | float | 3.0 | 曲率颜色缩放因子 |
|
||
| --save | — | string | None | 保存着色点云路径(可选)|
|
||
|
||
### 运行示例
|
||
```bash
|
||
# 基础运行
|
||
python curvature_estimation.py --ply_path "High_Speed_Data/PointCloud/11.ply"
|
||
|
||
# 保存结果
|
||
python curvature_estimation.py --ply_path "High_Speed_Data/PointCloud/11.ply" --save "High_Speed_Data/Result/11_curvature.ply"
|
||
```
|
||
|
||
### 计算说明
|
||
1. 自动估计法线并构建KD-Tree加速邻域搜索
|
||
2. 邻域点不足3个时自动标记为高曲率
|
||
3. 颜色映射:红色=高曲率,绿色=低曲率
|
||
|
||
---
|
||
|
||
## 五、点云去噪处理(denoise.py)
|
||
### 功能说明
|
||
集成SOR、ROR、PF、VGF、BF五种去噪与滤波算法,自动添加高斯噪声并对比效果,通过Chamfer Distance量化评估去噪质量,用于扫描点云预处理,提升测量精度。
|
||
|
||
### 输入输出
|
||
- **输入**:PLY格式干净点云(路径示例:`High_Speed_Data/PointCloud/11.ply`)
|
||
- **输出**:各算法去噪指标、保留率、移除点数、CD距离、可视化对比
|
||
|
||
### 命令行参数说明
|
||
| 参数 | 简写 | 类型 | 默认值 | 说明 |
|
||
|--------------|------|--------|---------------------------------|----------------------------------------|
|
||
| --ply_path | -p | string | ./High_Speed_Data/PointCloud/11.ply | 输入点云路径 |
|
||
| --noise_std | -n | float | 4.0 | 高斯噪声标准差 |
|
||
| --voxel_size | -v | float | 0.05 | 体素滤波大小 |
|
||
| --no_visualize | — | bool | False | 关闭可视化窗口 |
|
||
|
||
### 运行示例
|
||
```bash
|
||
# 基础去噪对比
|
||
python denoise.py -p "High_Speed_Data/PointCloud/11.ply" --noise_std 2.0
|
||
|
||
# 无可视化运行
|
||
python denoise.py -p "High_Speed_Data/PointCloud/11.ply" --no_visualize
|
||
```
|
||
|
||
### 计算说明
|
||
1. 自动给点云加噪,模拟真实扫描噪声
|
||
2. 依次运行SOR/ROR/PF/VGF/BF算法
|
||
3. 输出保留率、移除点数、Chamfer Distance评估结果
|
||
|
||
---
|
||
|
||
## 六、平面拟合估计(plane_estimation.py)
|
||
### 功能说明
|
||
基于Open3D内置RANSAC算法自动拟合点云中平面结构,输出平面方程、内点占比、法线误差、拟合RMSE,用于提取零件基准平面。
|
||
|
||
### 输入输出
|
||
- **输入**:可自定义生成带噪平面点云
|
||
- **输出**:平面方程、误差统计、拟合可视化
|
||
|
||
### 命令行参数说明
|
||
| 参数 | 简写 | 类型 | 默认值 | 说明 |
|
||
|----------------|------|--------|--------|--------------------------|
|
||
| --threshold_mm | -t | float | 0.5 | 平面距离阈值(mm)|
|
||
| --max_iterations | -i | int | 2000 | RANSAC迭代次数 |
|
||
|
||
### 运行示例
|
||
```bash
|
||
# 默认运行
|
||
python plane_estimation.py
|
||
|
||
# 自定义参数
|
||
python plane_estimation.py --threshold_mm 0.3 --max_iterations 1500
|
||
```
|
||
|
||
### 计算说明
|
||
1. 支持生成带噪声标准平面用于测试
|
||
2. 输出平面法向量与理想Z轴夹角误差、偏移误差、拟合RMSE
|
||
|
||
---
|
||
|
||
## 七、点云配准与适应度评估(point-fitness.py)
|
||
### 功能说明
|
||
对点云执行旋转/平移变换,通过RANSAC+ICP完成高精度配准,输出配准适应度Fitness、RMSE,并计算配准后点云到参考网格的距离,用于评估配准精度与零件偏差。
|
||
|
||
### 输入输出
|
||
- **输入**:待配准PLY点云、参考STL网格
|
||
- **输出**:变换矩阵、配准分数、误差、点云到网格距离统计、配准可视化
|
||
|
||
### 命令行参数说明
|
||
| 参数 | 简写 | 类型 | 默认值 | 说明 |
|
||
|--------------|------|--------|---------------------------------------------|--------------------|
|
||
| --ply_path | -p | string | ./High_Speed_Data/Noise_PointCloud/11_noisy.ply | 点云路径 |
|
||
| --mesh_path | -m | string | ./High_Speed_Data/Mesh/11.stl | 网格路径 |
|
||
| --voxel_size | -v | float | 10 | 配准下采样大小 |
|
||
| --no_visualize | — | bool | False | 关闭可视化 |
|
||
|
||
### 运行示例
|
||
```bash
|
||
# 完整配准+距离计算
|
||
python point-fitness.py -p "High_Speed_Data/Noise_PointCloud/11_noisy.ply" -m "High_Speed_Data/Mesh/11.stl" -v 5
|
||
|
||
# 无可视化
|
||
python point-fitness.py -p "High_Speed_Data/Noise_PointCloud/11_noisy.ply" -m "High_Speed_Data/Mesh/11.stl" --no_visualize
|
||
```
|
||
|
||
### 计算说明
|
||
1. 支持指定XYZ三轴旋转与随机平移
|
||
2. RANSAC粗配准 → ICP精配准
|
||
3. 输出Fitness(越高越好)、RMSE(越低越好)
|
||
|
||
---
|
||
|
||
## 八、完整工作流程示例(任务11全流程)
|
||
1. CAD转轻量化网格
|
||
```bash
|
||
python CAD2Mesh.py -p 0.5 -i "High_Speed_Data/CAD/11.step" -o "High_Speed_Data/Mesh/11.stl"
|
||
```
|
||
2. 点云去噪预处理
|
||
```bash
|
||
python denoise.py -p "High_Speed_Data/PointCloud/11.ply" --noise_std 2.0
|
||
```
|
||
3. 平面基准拟合
|
||
```bash
|
||
python plane_estimation.py
|
||
```
|
||
4. 曲率特征分析
|
||
```bash
|
||
python curvature_estimation.py --ply_path "High_Speed_Data/PointCloud/11.ply"
|
||
```
|
||
5. 轮廓-平整度测量
|
||
```bash
|
||
python Contour_Flatness.py --tasks "11,31,40" --data_root "High_Speed_Data" --excel_output "vis/flatness.xlsx"
|
||
```
|
||
6. 点云配准评估
|
||
```bash
|
||
python point-fitness.py -p "High_Speed_Data/Noise_PointCloud/11_noisy.ply" -m "High_Speed_Data/Mesh/11.stl"
|
||
```
|
||
|
||
---
|
||
|
||
## 九、常见问题
|
||
1. STEP文件读取失败:检查路径、文件完整性、OCC Core安装
|
||
2. 点云读取报错:安装open3d(`pip install open3d`)
|
||
3. CUDA Out of Memory:减小分块大小或降低点云密度
|
||
4. 去噪效果差:调小SOR标准差、增大ROR半径
|
||
5. 平面拟合失败:提高RANSAC迭代次数、降低距离阈值
|
||
6. 配准Fitness低:减小voxel_size,降低旋转/平移幅度
|
||
7. 可视化无窗口:服务器环境加`--no_visualize`参数
|