diff --git a/App/HoleDetection/HoleDetectionApp/Presenter/Src/HoleDetectionPresenter.cpp b/App/HoleDetection/HoleDetectionApp/Presenter/Src/HoleDetectionPresenter.cpp
index 5483f26..987009a 100644
--- a/App/HoleDetection/HoleDetectionApp/Presenter/Src/HoleDetectionPresenter.cpp
+++ b/App/HoleDetection/HoleDetectionApp/Presenter/Src/HoleDetectionPresenter.cpp
@@ -205,14 +205,15 @@ int HoleDetectionPresenter::InitAlgoParams()
const VrAlgorithmParams& xmlParams = configResult.algorithmParams;
- LOG_INFO("Loaded XML params - Ransac: distanceThreshold=%.2f, maxIterations=%d, minPlanePoints=%d, maxPlanes=%d, growthZThreshold=%.2f, minPlaneRatio=%.2f, maxNormalAngleDeg=%.1f\n",
+ LOG_INFO("Loaded XML params - Ransac: distanceThreshold=%.2f, maxIterations=%d, minPlanePoints=%d, maxPlanes=%d, growthZThreshold=%.2f, minPlaneRatio=%.2f, maxNormalAngleDeg=%.1f, maxDistFromPlane=%.2f\n",
xmlParams.ransacParam.distanceThreshold,
xmlParams.ransacParam.maxIterations,
xmlParams.ransacParam.minPlanePoints,
xmlParams.ransacParam.maxPlanes,
xmlParams.ransacParam.growthZThreshold,
xmlParams.ransacParam.minPlaneRatio,
- xmlParams.ransacParam.maxNormalAngleDeg);
+ xmlParams.ransacParam.maxNormalAngleDeg,
+ xmlParams.ransacParam.maxDistFromPlane);
LOG_INFO("Loaded XML params - Detection: angleThresholdPos=%.1f, angleThresholdNeg=%.1f, angleSearchDistance=%.2f, minPitDepth=%.2f\n",
xmlParams.detectionParam.angleThresholdPos,
diff --git a/App/HoleDetection/HoleDetectionApp/Version.h b/App/HoleDetection/HoleDetectionApp/Version.h
index 0437259..01b6604 100644
--- a/App/HoleDetection/HoleDetectionApp/Version.h
+++ b/App/HoleDetection/HoleDetectionApp/Version.h
@@ -5,7 +5,7 @@
#define HOLEDETECTION_APP_NAME "孔洞检测"
// 版本字符串
-#define HOLEDETECTION_VERSION_STRING "1.1.5"
+#define HOLEDETECTION_VERSION_STRING "1.1.6"
#define HOLEDETECTION_BUILD_STRING "1"
#define HOLEDETECTION_FULL_VERSION_STRING "V" HOLEDETECTION_VERSION_STRING "_" HOLEDETECTION_BUILD_STRING
diff --git a/App/HoleDetection/HoleDetectionApp/Version.md b/App/HoleDetection/HoleDetectionApp/Version.md
index 7a385f0..67a423a 100644
--- a/App/HoleDetection/HoleDetectionApp/Version.md
+++ b/App/HoleDetection/HoleDetectionApp/Version.md
@@ -1,3 +1,7 @@
+## 1.1.6 2026-04-07
+* build_1
+1. 更新算法 1.0.3
+
## 1.1.5 2026-04-05
* build_1
1. 更新算法 1.0.2
diff --git a/App/HoleDetection/HoleDetectionApp/dialogalgoarg.cpp b/App/HoleDetection/HoleDetectionApp/dialogalgoarg.cpp
index bd4b972..8f03d7a 100644
--- a/App/HoleDetection/HoleDetectionApp/dialogalgoarg.cpp
+++ b/App/HoleDetection/HoleDetectionApp/dialogalgoarg.cpp
@@ -301,6 +301,7 @@ void DialogAlgoarg::LoadRansacParamToUI(const VrRansacPlaneSegmentationParam& pa
ui->lineEdit_growthZThreshold->setText(QString::number(param.growthZThreshold));
ui->lineEdit_minPlaneRatio->setText(QString::number(param.minPlaneRatio));
ui->lineEdit_maxNormalAngleDeg->setText(QString::number(param.maxNormalAngleDeg));
+ ui->lineEdit_maxDistFromPlane->setText(QString::number(param.maxDistFromPlane));
}
void DialogAlgoarg::LoadDetectionParamToUI(const VrHoleDetectionParam& param)
@@ -381,6 +382,9 @@ bool DialogAlgoarg::SaveRansacParamFromUI(VrRansacPlaneSegmentationParam& param)
param.maxNormalAngleDeg = ui->lineEdit_maxNormalAngleDeg->text().toDouble(&ok);
if (!ok) return false;
+ param.maxDistFromPlane = ui->lineEdit_maxDistFromPlane->text().toDouble(&ok);
+ if (!ok) return false;
+
return true;
}
diff --git a/App/HoleDetection/HoleDetectionApp/dialogalgoarg.ui b/App/HoleDetection/HoleDetectionApp/dialogalgoarg.ui
index 5b61f24..cece2c1 100644
--- a/App/HoleDetection/HoleDetectionApp/dialogalgoarg.ui
+++ b/App/HoleDetection/HoleDetectionApp/dialogalgoarg.ui
@@ -7,7 +7,7 @@
0
0
920
- 584
+ 613
@@ -84,7 +84,7 @@ QScrollArea { border: none; }
0
0
860
- 412
+ 441
@@ -178,6 +178,16 @@ QScrollArea { border: none; }
-
+ -
+
+
+ 点到平面最大允许距离 (mm):
+
+
+
+ -
+
+
@@ -216,7 +226,7 @@ QScrollArea { border: none; }
0
0
860
- 412
+ 441
@@ -435,7 +445,7 @@ QScrollArea { border: none; }
0
0
860
- 412
+ 441
diff --git a/App/HoleDetection/HoleDetectionConfig/Inc/IVrConfig.h b/App/HoleDetection/HoleDetectionConfig/Inc/IVrConfig.h
index 019a9c6..e6df0ab 100644
--- a/App/HoleDetection/HoleDetectionConfig/Inc/IVrConfig.h
+++ b/App/HoleDetection/HoleDetectionConfig/Inc/IVrConfig.h
@@ -1,121 +1,91 @@
#ifndef IVRCONFIG_H
#define IVRCONFIG_H
-#include
-#include
-#include
-#include
#include
#include
+#include
+#include
+#include
+#include
-// 包含公共配置结构体
#include "VrCommonConfig.h"
#include "VrHandEyeCalibConfig.h"
-/**
- * @brief RANSAC 平面分割参数(映射 RansacPlaneSegmentationParams)
- */
struct VrRansacPlaneSegmentationParam
{
- double distanceThreshold = 0.5; // 点到平面距离阈值(mm)
- int maxIterations = 500; // RANSAC 最大迭代次数
- int minPlanePoints = 100; // 最小平面点数
- int maxPlanes = 5; // 最大提取平面数量
- double growthZThreshold = 1.0; // 区域生长时相邻点 Z 差阈值(mm)
- double minPlaneRatio = 0.1; // 平面最小点数占比
- double maxNormalAngleDeg = 30.0; // 平面法向量与Z轴最大夹角(度),<=0 表示不过滤
+ double distanceThreshold = 0.5;
+ int maxIterations = 500;
+ int minPlanePoints = 100;
+ int maxPlanes = 5;
+ double growthZThreshold = 1.0;
+ double minPlaneRatio = 0.1;
+ double maxNormalAngleDeg = 30.0;
+ double maxDistFromPlane = 1.0;
};
-/**
- * @brief 孔洞检测参数(映射 SHoleDetectionParams)
- */
struct VrHoleDetectionParam
{
- double angleThresholdPos = 50.0; // 正角度阈值(度)
- double angleThresholdNeg = -50.0; // 负角度阈值(度)
- double angleSearchDistance = 2.0; // 前后搜索距离 A(mm)
- double minPitDepth = 1.0; // 最小凹坑深度(mm)
- double minRadius = 2.0; // 最小孔半径(mm)
- double maxRadius = 50.0; // 最大孔半径(mm)
- int expansionSize1 = 5; // 第一环扩展大小
- int expansionSize2 = 10; // 第二环扩展大小
- int minVTransitionPoints = 1; // V 形端点间最小有效过渡点数
- double jumpThresholdResidual = 0.0; // 相邻有效点残差跳变阈值
- double gapJumpThresholdResidual = 0.0; // 跨无效点间隙残差跳变阈值
- int maxGapPointsInLine = 12; // 允许跨越的最大无效点数
- double minFeatureSpan = 2.0; // 特征点对最小弧长跨度(mm)
- int residualSmoothWindow = 5; // 残差平滑窗口
- double slopeAngleThreshold = 3.0; // 坡度补充判断阈值(度)
- double edgeBoundaryFilterDist = 0.0; // 边缘过滤距离(mm)
+ double angleThresholdPos = 50.0;
+ double angleThresholdNeg = -50.0;
+ double angleSearchDistance = 2.0;
+ double minPitDepth = 1.0;
+ double minRadius = 2.0;
+ double maxRadius = 50.0;
+ int expansionSize1 = 5;
+ int expansionSize2 = 10;
+ int minVTransitionPoints = 1;
+ double jumpThresholdResidual = 0.0;
+ double gapJumpThresholdResidual = 0.0;
+ int maxGapPointsInLine = 12;
+ double minFeatureSpan = 2.0;
+ int residualSmoothWindow = 5;
+ double slopeAngleThreshold = 3.0;
+ double edgeBoundaryFilterDist = 0.0;
};
-/**
- * @brief 孔洞过滤参数(映射 SHoleFilterParams)
- */
struct VrHoleFilterParam
{
- double maxEccentricity = 0.99995; // 最大离心率
- double minAngularCoverage = 10.0; // 最小角度覆盖(度)
- double maxRadiusFitRatio = 1.0; // 最大半径拟合比率
- double minQualityScore = 0.0; // 最小质量分数
- double maxPlaneResidual = 10.0; // 最大平面残差(mm)
- double maxAngularGap = 90.0; // 最大角度间隙(度)
- double minInlierRatio = 0.0; // 最小内点比率
- double minHoleDepth = 2.5; // 最小孔深(mm)
+ double maxEccentricity = 0.99995;
+ double minAngularCoverage = 10.0;
+ double maxRadiusFitRatio = 1.0;
+ double minQualityScore = 0.0;
+ double maxPlaneResidual = 10.0;
+ double maxAngularGap = 90.0;
+ double minInlierRatio = 0.0;
+ double minHoleDepth = 2.5;
};
-/**
- * @brief 孔洞排序模式枚举(映射 ESortMode)
- */
enum VrHoleSortMode
{
- HOLE_SORT_NONE = 0, // 不排序
- HOLE_SORT_BY_RADIUS = 1, // 按半径排序(最大优先)
- HOLE_SORT_BY_DEPTH = 2, // 按深度排序(最深优先)
- HOLE_SORT_BY_QUALITY = 3 // 按质量分数排序(最高优先)
+ HOLE_SORT_NONE = 0,
+ HOLE_SORT_BY_RADIUS = 1,
+ HOLE_SORT_BY_DEPTH = 2,
+ HOLE_SORT_BY_QUALITY = 3
};
-/**
- * @brief 姿态输出顺序枚举
- *
- * 定义机械臂姿态数据的输出顺序
- */
enum VrPoseOutputOrder
{
- POSE_ORDER_RPY = 0, // Roll, Pitch, Yaw(默认)
- POSE_ORDER_RYP = 1, // Roll, Yaw, Pitch
- POSE_ORDER_PRY = 2, // Pitch, Roll, Yaw
- POSE_ORDER_PYR = 3, // Pitch, Yaw, Roll
- POSE_ORDER_YRP = 4, // Yaw, Roll, Pitch
- POSE_ORDER_YPR = 5 // Yaw, Pitch, Roll
+ POSE_ORDER_RPY = 0,
+ POSE_ORDER_RYP = 1,
+ POSE_ORDER_PRY = 2,
+ POSE_ORDER_PYR = 3,
+ POSE_ORDER_YRP = 4,
+ POSE_ORDER_YPR = 5
};
-/**
- * @brief 方向向量反向配置枚举
- *
- * 定义机械臂方向向量的反向配置
- * 用于调整相机坐标系到机械臂坐标系的方向向量转换
- */
enum VrDirVectorInvert
{
- DIR_INVERT_NONE = 0, // 不反向
- DIR_INVERT_XY = 1, // X 和 Y 方向反向
- DIR_INVERT_XZ = 2, // X 和 Z 方向反向
- DIR_INVERT_YZ = 3 // Y 和 Z 方向反向(默认,兼容原有行为)
+ DIR_INVERT_NONE = 0,
+ DIR_INVERT_XY = 1,
+ DIR_INVERT_XZ = 2,
+ DIR_INVERT_YZ = 3
};
-/**
- * @brief TCP 协议和坐标输出配置
- *
- * 默认值参考 Doc/porotol.jpg 协议文档:
- * - 汇川 PLC-easy320: 192.168.0.88:502
- * - 配天机械臂: 192.168.0.90:502
- */
struct VrPlcRobotServerConfig
{
- int tcpServerPort = 7800; // TCP 协议服务端口
- int poseOutputOrder = POSE_ORDER_RPY; // 姿态输出顺序,默认 RPY
- int dirVectorInvert = DIR_INVERT_YZ; // 方向向量反向配置,默认 YZ 反向
+ int tcpServerPort = 7800;
+ int poseOutputOrder = POSE_ORDER_RPY;
+ int dirVectorInvert = DIR_INVERT_YZ;
VrPlcRobotServerConfig& operator=(const VrPlcRobotServerConfig& other) {
if (this != &other) {
@@ -135,16 +105,13 @@ struct VrPlcRobotServerConfig
VrPlcRobotServerConfig() = default;
};
-/**
- * @brief 算法参数配置结构
- */
struct VrAlgorithmParams
{
- VrRansacPlaneSegmentationParam ransacParam; // RANSAC 平面分割参数
- VrHoleDetectionParam detectionParam;// 孔洞检测参数
- VrHoleFilterParam filterParam; // 孔洞过滤参数
- int sortMode = HOLE_SORT_NONE; // 排序模式
- VrPlaneCalibParam planeCalibParam; // 平面校准参数
+ VrRansacPlaneSegmentationParam ransacParam;
+ VrHoleDetectionParam detectionParam;
+ VrHoleFilterParam filterParam;
+ int sortMode = HOLE_SORT_NONE;
+ VrPlaneCalibParam planeCalibParam;
VrAlgorithmParams& operator=(const VrAlgorithmParams& other) {
if (this != &other) {
@@ -168,18 +135,15 @@ struct VrAlgorithmParams
VrAlgorithmParams() = default;
};
-/**
- * @brief 配置加载结果
- */
struct ConfigResult
{
- std::vector cameraList;
- std::vector deviceList;
- VrAlgorithmParams algorithmParams; // 算法参数
- std::vector handEyeCalibMatrixList; // 多相机手眼标定矩阵列表
- VrDebugParam debugParam; // 调试参数
- SerialConfig serialConfig; // 串口配置
- VrPlcRobotServerConfig plcRobotServerConfig; // PLC 和机械臂服务端配置
+ std::vector cameraList;
+ std::vector deviceList;
+ VrAlgorithmParams algorithmParams;
+ std::vector handEyeCalibMatrixList;
+ VrDebugParam debugParam;
+ SerialConfig serialConfig;
+ VrPlcRobotServerConfig plcRobotServerConfig;
ConfigResult& operator=(const ConfigResult& other) {
if (this != &other) {
@@ -207,21 +171,15 @@ struct ConfigResult
ConfigResult() = default;
};
-/**
- * @brief 配置加载错误代码
- */
enum LoadConfigErrorCode
{
- LOAD_CONFIG_SUCCESS = 0, // 加载成功
- LOAD_CONFIG_FILE_NOT_FOUND = -1, // 配置文件不存在
- LOAD_CONFIG_PARSE_ERROR = -2, // 配置文件解析错误
- LOAD_CONFIG_INVALID_FORMAT = -3, // 配置文件格式无效
- LOAD_CONFIG_UNKNOWN_ERROR = -99 // 未知错误
+ LOAD_CONFIG_SUCCESS = 0,
+ LOAD_CONFIG_FILE_NOT_FOUND = -1,
+ LOAD_CONFIG_PARSE_ERROR = -2,
+ LOAD_CONFIG_INVALID_FORMAT = -3,
+ LOAD_CONFIG_UNKNOWN_ERROR = -99
};
-/**
- * @brief VrConfig 接口类
- */
class IVrConfig
{
public:
diff --git a/App/HoleDetection/HoleDetectionConfig/Src/AlgoParamConverter.cpp b/App/HoleDetection/HoleDetectionConfig/Src/AlgoParamConverter.cpp
index 8471250..6a263ec 100644
--- a/App/HoleDetection/HoleDetectionConfig/Src/AlgoParamConverter.cpp
+++ b/App/HoleDetection/HoleDetectionConfig/Src/AlgoParamConverter.cpp
@@ -14,6 +14,7 @@ RansacPlaneSegmentationParams ToAlgoParam(const VrRansacPlaneSegmentationParam&
algo.growthZThreshold = static_cast(param.growthZThreshold);
algo.minPlaneRatio = static_cast(param.minPlaneRatio);
algo.maxNormalAngleDeg = static_cast(param.maxNormalAngleDeg);
+ algo.maxDistFromPlane = static_cast(param.maxDistFromPlane);
return algo;
}
@@ -66,7 +67,7 @@ void LogAlgoParams(const std::string& logTag,
clibMatrix[8], clibMatrix[9], clibMatrix[10], clibMatrix[11],
clibMatrix[12], clibMatrix[13], clibMatrix[14], clibMatrix[15]);
- LOG_INFO("%s RansacParams: distanceThreshold=%.2f, maxIterations=%d, minPlanePoints=%d, maxPlanes=%d, growthZThreshold=%.2f, minPlaneRatio=%.2f, maxNormalAngleDeg=%.1f\n",
+ LOG_INFO("%s RansacParams: distanceThreshold=%.2f, maxIterations=%d, minPlanePoints=%d, maxPlanes=%d, growthZThreshold=%.2f, minPlaneRatio=%.2f, maxNormalAngleDeg=%.1f, maxDistFromPlane=%.2f\n",
logTag.c_str(),
ransacParams.distanceThreshold,
ransacParams.maxIterations,
@@ -74,7 +75,8 @@ void LogAlgoParams(const std::string& logTag,
ransacParams.maxPlanes,
ransacParams.growthZThreshold,
ransacParams.minPlaneRatio,
- ransacParams.maxNormalAngleDeg);
+ ransacParams.maxNormalAngleDeg,
+ ransacParams.maxDistFromPlane);
LOG_INFO("%s DetectionParams: angleThresholdPos=%.1f, angleThresholdNeg=%.1f, angleSearchDistance=%.2f, minPitDepth=%.2f\n",
logTag.c_str(),
diff --git a/App/HoleDetection/HoleDetectionConfig/Src/VrConfig.cpp b/App/HoleDetection/HoleDetectionConfig/Src/VrConfig.cpp
index ae3c273..3520477 100644
--- a/App/HoleDetection/HoleDetectionConfig/Src/VrConfig.cpp
+++ b/App/HoleDetection/HoleDetectionConfig/Src/VrConfig.cpp
@@ -78,6 +78,8 @@ int CVrConfig::LoadConfig(const std::string& filePath, ConfigResult& configResul
configResult.algorithmParams.ransacParam.minPlaneRatio = ransacParamElement->DoubleAttribute("minPlaneRatio");
if (ransacParamElement->Attribute("maxNormalAngleDeg"))
configResult.algorithmParams.ransacParam.maxNormalAngleDeg = ransacParamElement->DoubleAttribute("maxNormalAngleDeg");
+ if (ransacParamElement->Attribute("maxDistFromPlane"))
+ configResult.algorithmParams.ransacParam.maxDistFromPlane = ransacParamElement->DoubleAttribute("maxDistFromPlane");
}
XMLElement* detectionParamElement = algoParamsElement->FirstChildElement("DetectionParam");
@@ -212,6 +214,7 @@ bool CVrConfig::SaveConfig(const std::string& filePath, ConfigResult& configResu
ransacParamElement->SetAttribute("growthZThreshold", configResult.algorithmParams.ransacParam.growthZThreshold);
ransacParamElement->SetAttribute("minPlaneRatio", configResult.algorithmParams.ransacParam.minPlaneRatio);
ransacParamElement->SetAttribute("maxNormalAngleDeg", configResult.algorithmParams.ransacParam.maxNormalAngleDeg);
+ ransacParamElement->SetAttribute("maxDistFromPlane", configResult.algorithmParams.ransacParam.maxDistFromPlane);
algoParamsElement->InsertEndChild(ransacParamElement);
// 检测参数 DetectionParam 需要覆盖算法库当前全部检测字段。
diff --git a/App/HoleDetection/HoleDetectionConfig/config/config.xml b/App/HoleDetection/HoleDetectionConfig/config/config.xml
index 977a5f4..c9230a9 100644
--- a/App/HoleDetection/HoleDetectionConfig/config/config.xml
+++ b/App/HoleDetection/HoleDetectionConfig/config/config.xml
@@ -14,7 +14,9 @@
minPlanePoints="100"
maxPlanes="5"
growthZThreshold="1.0"
- minPlaneRatio="0.1"/>
+ minPlaneRatio="0.1"
+ maxNormalAngleDeg="30.0"
+ maxDistFromPlane="1.0"/>
QPointF {
- int px = (int)((pt.x - xMin) / x_scale + x_skip);
- int py = (int)((pt.y - yMin) / y_scale + y_skip);
+ int px = (int)((pt.x - xMin) / x_scale + x_offset);
+ int py = (int)((pt.y - yMin) / y_scale + y_offset);
return QPointF(px, py);
};
diff --git a/App/ScrewPosition/ScrewPositionApp/Version.h b/App/ScrewPosition/ScrewPositionApp/Version.h
index 3fe9e84..656f6af 100644
--- a/App/ScrewPosition/ScrewPositionApp/Version.h
+++ b/App/ScrewPosition/ScrewPositionApp/Version.h
@@ -2,7 +2,7 @@
#define VERSION_H
-#define SCREWPOSITION_VERSION_STRING "1.0.0"
+#define SCREWPOSITION_VERSION_STRING "1.1.0"
#define SCREWPOSITION_BUILD_STRING "1"
#define SCREWPOSITION_FULL_VERSION_STRING "V" SCREWPOSITION_VERSION_STRING "_" SCREWPOSITION_BUILD_STRING
diff --git a/AppAlgo/holeDetection/arm/debug/libHoleDetectionLib.so.1.0.0 b/AppAlgo/holeDetection/arm/debug/libHoleDetectionLib.so.1.0.0
index 97f283d..67d3b25 100644
Binary files a/AppAlgo/holeDetection/arm/debug/libHoleDetectionLib.so.1.0.0 and b/AppAlgo/holeDetection/arm/debug/libHoleDetectionLib.so.1.0.0 differ
diff --git a/AppAlgo/holeDetection/arm/release/libHoleDetectionLib.so.1.0.0 b/AppAlgo/holeDetection/arm/release/libHoleDetectionLib.so.1.0.0
index 6b7c92b..419eb45 100644
Binary files a/AppAlgo/holeDetection/arm/release/libHoleDetectionLib.so.1.0.0 and b/AppAlgo/holeDetection/arm/release/libHoleDetectionLib.so.1.0.0 differ
diff --git a/AppAlgo/holeDetection/include/HoleDetectionParams.h b/AppAlgo/holeDetection/include/HoleDetectionParams.h
index 2ad406a..1e7d536 100644
--- a/AppAlgo/holeDetection/include/HoleDetectionParams.h
+++ b/AppAlgo/holeDetection/include/HoleDetectionParams.h
@@ -16,6 +16,8 @@ struct RansacPlaneSegmentationParams {
float minPlaneRatio; // 平面最小点数占比 (相对最大平面), 建议 0.05-0.2
float maxNormalAngleDeg; // 平面法向量与Z轴最大夹角 (度), 超过则直接丢弃; <=0 表示不过滤
+ float maxDistFromPlane; // 点到平面的最大允许距离;超出则从 pointIndices 中移除;<=0 表示不过滤
+
RansacPlaneSegmentationParams()
: distanceThreshold(0.5f)
, maxIterations(500)
@@ -24,6 +26,7 @@ struct RansacPlaneSegmentationParams {
, growthZThreshold(1.0f)
, minPlaneRatio(0.1f)
, maxNormalAngleDeg(30.0f)
+ , maxDistFromPlane(1.f)
{
}
};
diff --git a/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.dll b/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.dll
index bcb562a..c87125c 100644
Binary files a/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.dll and b/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.dll differ
diff --git a/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.pdb b/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.pdb
index 9343507..382991d 100644
Binary files a/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.pdb and b/AppAlgo/holeDetection/windows/x64/Debug/HoleDetectionLib.pdb differ
diff --git a/AppAlgo/holeDetection/windows/x64/Release/HoleDetectionLib.dll b/AppAlgo/holeDetection/windows/x64/Release/HoleDetectionLib.dll
index 173f809..ac4e36b 100644
Binary files a/AppAlgo/holeDetection/windows/x64/Release/HoleDetectionLib.dll and b/AppAlgo/holeDetection/windows/x64/Release/HoleDetectionLib.dll differ
diff --git a/GrabBagPrj/AppList.md b/GrabBagPrj/AppList.md
index 6f0faaa..b5e0bc5 100644
--- a/GrabBagPrj/AppList.md
+++ b/GrabBagPrj/AppList.md
@@ -6,7 +6,7 @@
|:---:|:--------|:---------|:------------|
| 1 | 自动拆包 | GrabBag | 1.3.6.2 |
| 2 | 皮带撕裂 | BeltTearingServer | 2.0.8.1 |
-| 3 | 孔洞检测 | HoleDetection | 1.1.3.1 |
+| 3 | 孔洞检测 | HoleDetection | 1.1.6.1 |
| 4 | 棒材定位 | RodAndBarPosition | 1.0.2.1 |
| 5 | 车轮拱高测量 | WheelMeasure | 1.0.2.1 |
| 6 | 定子定位 | StatorPosition | 1.0.0.1 |
@@ -15,7 +15,7 @@
| 9 | 颗粒尺寸检测 | ParticleSize | 1.0.0.0 |
| 10 | 双目标记检测 | BinocularMarkServer | 1.0.0.4 |
| 11 | 铁路隧道槽道测量 | TunnelChannel | 1.0.0.3 |
-| 12 | 螺杆定位 | ScrewPosition | 1.0.0.1 |
+| 12 | 螺杆定位 | ScrewPosition | 1.1.0.1 |
| 13 | 包裹拆线位置定位 | BagThreadPosition | 1.0.0.4 |
| 14 | 工件孔定位 | WorkpieceHole | 1.0.3.0 |
| 16 | 坑孔定位 | HolePitPosition | 无 |
diff --git a/GrabBagPrj/pkg_screwposition.sh b/GrabBagPrj/pkg_screwposition.sh
index 9d918fd..075a903 100644
--- a/GrabBagPrj/pkg_screwposition.sh
+++ b/GrabBagPrj/pkg_screwposition.sh
@@ -65,6 +65,12 @@ echo "复制 Qt 运行时环境..."
cp -rfd ${QT_PKG_PATH}/ext ${PKG_PATH}/opt/firefly_qt5.15
cp ${QT_PKG_PATH}/target_qtEnv.sh ${PKG_PATH}/etc/profile.d/
+echo "清理不需要的 Qt WebEngine 库文件..."
+rm -f ${PKG_PATH}/opt/firefly_qt5.15/lib/libQt5WebEngine*
+rm -rf ${PKG_PATH}/opt/firefly_qt5.15/libexec/QtWebEngineProcess
+rm -rf ${PKG_PATH}/opt/firefly_qt5.15/resources/qtwebengine*
+rm -rf ${PKG_PATH}/opt/firefly_qt5.15/translations/qtwebengine*
+
# 复制 Qt 库文件
for libfile in ${QT_LIB_PATH}/*.so*; do
# 获取文件名用于比较
diff --git a/GrabBagPrj/update_releaseVersion.sh b/GrabBagPrj/update_releaseVersion.sh
index a1f19d9..71c9088 100644
--- a/GrabBagPrj/update_releaseVersion.sh
+++ b/GrabBagPrj/update_releaseVersion.sh
@@ -85,7 +85,7 @@ declare -A PROJECT_CHINESE_NAMES=(
)
# 应用列表文件路径
-APP_LIST_FILE="应用列表及说明.md"
+APP_LIST_FILE="AppList.md"
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"