更新Prj下的打包库路径,Test Tools的依赖库路径

This commit is contained in:
YangOne 2026-07-13 18:50:49 +08:00
parent ad2d39270f
commit b6b81d4184
19 changed files with 476 additions and 477 deletions

View File

@ -1,92 +1,92 @@
# 依赖库说明
本包为**自带闭包**交付。`lib/` 目录内包含 `libstereo_bolt.so` 运行所需的全部动态库,
**无需在目标板上安装 OpenCV 或任何第三方包**。
---
## 一、包含哪些库(lib/ 目录,共 9 个)
| 库 | 说明 |
|---|---|
| `libstereo_bolt.so` | 本算法库(主体) |
| `librknnrt.so` | RKNN NPU 推理运行时(Rockchip 2.3.2) |
| `libopencv_core.so.4.5` | OpenCV 4.5.0 — 基础矩阵/图像容器 |
| `libopencv_imgproc.so.4.5` | OpenCV 4.5.0 — 图像处理 |
| `libopencv_calib3d.so.4.5` | OpenCV 4.5.0 — 立体标定、rectify、三角测量 |
| `libopencv_imgcodecs.so.4.5` | OpenCV 4.5.0 — 图像文件读写 |
| `libopencv_dnn.so.4.5` | OpenCV 4.5.0 — DNN 模块 |
| `libopencv_features2d.so.4.5` | OpenCV 4.5.0 — 特征点(calib3d 依赖) |
| `libopencv_flann.so.4.5` | OpenCV 4.5.0 — FLANN 索引(features2d 依赖) |
> OpenCV 从源码编译(非 apt 包),**SONAME 为标准的 `libopencv_*.so.4.5`**
> (不带 Debian/Ubuntu 的 `d` 后缀),与自行源码编译 OpenCV 4.5.x 的环境兼容。
>
> 图像编解码(libjpeg/libpng/libtiff/libwebp/openjpeg)、protobuf、zlib
> 均已**静态链入** OpenCV,不再作为独立 `.so` 出现。
---
## 二、不在包内(由目标板系统提供)
以下是 Linux 系统 ABI 层,**必须与目标板 glibc 版本严格对齐,绝不能替换**:
| 库 | 要求 |
|---|---|
# 依赖库说明
本包为**自带闭包**交付。`lib/` 目录内包含 `libstereo_bolt.so` 运行所需的全部动态库,
**无需在目标板上安装 OpenCV 或任何第三方包**。
---
## 一、包含哪些库(lib/ 目录,共 9 个)
| 库 | 说明 |
|---|---|
| `libstereo_bolt.so` | 本算法库(主体) |
| `librknnrt.so` | RKNN NPU 推理运行时(Rockchip 2.3.2) |
| `libopencv_core.so.4.5` | OpenCV 4.5.0 — 基础矩阵/图像容器 |
| `libopencv_imgproc.so.4.5` | OpenCV 4.5.0 — 图像处理 |
| `libopencv_calib3d.so.4.5` | OpenCV 4.5.0 — 立体标定、rectify、三角测量 |
| `libopencv_imgcodecs.so.4.5` | OpenCV 4.5.0 — 图像文件读写 |
| `libopencv_dnn.so.4.5` | OpenCV 4.5.0 — DNN 模块 |
| `libopencv_features2d.so.4.5` | OpenCV 4.5.0 — 特征点(calib3d 依赖) |
| `libopencv_flann.so.4.5` | OpenCV 4.5.0 — FLANN 索引(features2d 依赖) |
> OpenCV 从源码编译(非 apt 包),**SONAME 为标准的 `libopencv_*.so.4.5`**
> (不带 Debian/Ubuntu 的 `d` 后缀),与自行源码编译 OpenCV 4.5.x 的环境兼容。
>
> 图像编解码(libjpeg/libpng/libtiff/libwebp/openjpeg)、protobuf、zlib
> 均已**静态链入** OpenCV,不再作为独立 `.so` 出现。
---
## 二、不在包内(由目标板系统提供)
以下是 Linux 系统 ABI 层,**必须与目标板 glibc 版本严格对齐,绝不能替换**:
| 库 | 要求 |
|---|---|
| `libc.so.6` | glibc ≥ 2.35(Ubuntu 22.04 = 2.35,满足) |
| `libpthread.so.0` | 同上(已并入 glibc 2.34+) |
| `libm.so.6` | 同上 |
| `libdl.so.2` | 同上 |
| `libstdc++.so.6` | GCC 11+(Ubuntu 22.04 自带) |
| `libgcc_s.so.1` | 同上 |
| `ld-linux-aarch64.so.1` | 动态链接器,系统自带 |
---
## 三、为什么这么设计
**问题:** 如果目标板通过 apt 安装 OpenCV,Debian/Ubuntu 会给 SONAME 加私有后缀
(如 `libopencv_core.so.4.5d` 而非标准的 `…4.5`),导致与自行编译的 OpenCV 不兼容;
另外 apt 安装需要联网,新板子部署不可控。
**解法:** 从 OpenCV 4.5.0 官方源码编译,只构建算法实际需要的 7 个模块
(core/imgproc/calib3d/imgcodecs/dnn/features2d/flann),图像编解码等第三方库
全部静态链入。最终 `lib/` 只有 9 个 `.so`(含本库 + librknnrt),约 **22 MB**,
依赖关系极简,无需联网、无需 apt。
---
## 四、运行时加载方式
```bash
# 解包后,设一次环境变量
export LD_LIBRARY_PATH="$(pwd)/lib:$LD_LIBRARY_PATH"
# 验证:应当没有任何 "not found" 输出
ldd lib/libstereo_bolt.so | grep "not found"
```
---
## 五、SONAME 兼容性说明
| 编译来源 | SONAME | 与本包兼容? |
|---|---|---|
| **本包(源码编译 4.5.0)** | `libopencv_core.so.4.5` | ✅ |
| **自行源码编译 4.5.x** | `libopencv_core.so.4.5` | ✅ |
| **Ubuntu apt `libopencv-dev`** | `libopencv_core.so.4.5d` | ❌ SONAME 不匹配 |
本包的 `libstereo_bolt.so` 链接的 NEEDED 是标准 `libopencv_*.so.4.5`(无 `d`),
与任何从源码编译的 OpenCV 4.5.x 兼容。如果目标板上碰巧装了 apt 的 OpenCV(带 `d`),
只要 `LD_LIBRARY_PATH` 优先指向 `lib/`,就会用本包内的库,不会冲突。
---
## 六、编译调用程序时注意
**生产路径**:你自己的代码只用 `include/stereo_bolt/c_api.h`,不引用任何 OpenCV 头,
相机 buffer 直接传给 `sb_process_bolt_module_buffers`,**完全不需要 OpenCV 头文件**。
**编译 `example/` 示例**(可选,仅用于集成验证):当前示例是纯 C,
只读 headerless Mono8 raw 文件并调用 C ABI,不引用 OpenCV 头文件。
运行时仍用本包 `lib/` 里的库。
| `libpthread.so.0` | 同上(已并入 glibc 2.34+) |
| `libm.so.6` | 同上 |
| `libdl.so.2` | 同上 |
| `libstdc++.so.6` | GCC 11+(Ubuntu 22.04 自带) |
| `libgcc_s.so.1` | 同上 |
| `ld-linux-aarch64.so.1` | 动态链接器,系统自带 |
---
## 三、为什么这么设计
**问题:** 如果目标板通过 apt 安装 OpenCV,Debian/Ubuntu 会给 SONAME 加私有后缀
(如 `libopencv_core.so.4.5d` 而非标准的 `…4.5`),导致与自行编译的 OpenCV 不兼容;
另外 apt 安装需要联网,新板子部署不可控。
**解法:** 从 OpenCV 4.5.0 官方源码编译,只构建算法实际需要的 7 个模块
(core/imgproc/calib3d/imgcodecs/dnn/features2d/flann),图像编解码等第三方库
全部静态链入。最终 `lib/` 只有 9 个 `.so`(含本库 + librknnrt),约 **22 MB**,
依赖关系极简,无需联网、无需 apt。
---
## 四、运行时加载方式
```bash
# 解包后,设一次环境变量
export LD_LIBRARY_PATH="$(pwd)/lib:$LD_LIBRARY_PATH"
# 验证:应当没有任何 "not found" 输出
ldd lib/libstereo_bolt.so | grep "not found"
```
---
## 五、SONAME 兼容性说明
| 编译来源 | SONAME | 与本包兼容? |
|---|---|---|
| **本包(源码编译 4.5.0)** | `libopencv_core.so.4.5` | ✅ |
| **自行源码编译 4.5.x** | `libopencv_core.so.4.5` | ✅ |
| **Ubuntu apt `libopencv-dev`** | `libopencv_core.so.4.5d` | ❌ SONAME 不匹配 |
本包的 `libstereo_bolt.so` 链接的 NEEDED 是标准 `libopencv_*.so.4.5`(无 `d`),
与任何从源码编译的 OpenCV 4.5.x 兼容。如果目标板上碰巧装了 apt 的 OpenCV(带 `d`),
只要 `LD_LIBRARY_PATH` 优先指向 `lib/`,就会用本包内的库,不会冲突。
---
## 六、编译调用程序时注意
**生产路径**:你自己的代码只用 `include/stereo_bolt/c_api.h`,不引用任何 OpenCV 头,
相机 buffer 直接传给 `sb_process_bolt_module_buffers`,**完全不需要 OpenCV 头文件**。
**编译 `example/` 示例**(可选,仅用于集成验证):当前示例是纯 C,
只读 headerless Mono8 raw 文件并调用 C ABI,不引用 OpenCV 头文件。
运行时仍用本包 `lib/` 里的库。

View File

@ -1,9 +1,9 @@
"frame","eye","file","bytes","sha256"
"19","left","left_19.bmp","36864054","b5b68722ef7cefb79d75f698838bfe869f8f1bc611290a34237bd0ec51616afc"
"19","right","right_19.bmp","36864054","827d6a49caad6b718531a33e09a9fa12e8415b0351ca5c9e31ef0f58d2682d3b"
"20","left","left_20.bmp","36864054","1dcbb91a2571d7893d2c5cf3545b7d3ecb8e4dda164ea6d62788baddbb012b22"
"20","right","right_20.bmp","36864054","019276576ff18d925d204aa7a1b149194a66b6e45a0382561087941fb18e772c"
"28","left","left_28.bmp","36864054","4967fbdd4f93574516ec41c220f05f6f70ff707c12f070da5b76f7b9faa55919"
"28","right","right_28.bmp","36864054","28676009b052c88bf4555f9073df019dac1ad2e240d591e74b51596dd91038b3"
"43","left","left_43.bmp","36864054","17906c08074254fe3682a58dcb0983847034a2aad6d4feb7c7485503e205430d"
"43","right","right_43.bmp","36864054","d833e99a5cc468e860ce553ba0e8e2c4441d93a0584ad44190dbdbc3abf6f2a7"
"frame","eye","file","bytes","sha256"
"19","left","left_19.bmp","36864054","b5b68722ef7cefb79d75f698838bfe869f8f1bc611290a34237bd0ec51616afc"
"19","right","right_19.bmp","36864054","827d6a49caad6b718531a33e09a9fa12e8415b0351ca5c9e31ef0f58d2682d3b"
"20","left","left_20.bmp","36864054","1dcbb91a2571d7893d2c5cf3545b7d3ecb8e4dda164ea6d62788baddbb012b22"
"20","right","right_20.bmp","36864054","019276576ff18d925d204aa7a1b149194a66b6e45a0382561087941fb18e772c"
"28","left","left_28.bmp","36864054","4967fbdd4f93574516ec41c220f05f6f70ff707c12f070da5b76f7b9faa55919"
"28","right","right_28.bmp","36864054","28676009b052c88bf4555f9073df019dac1ad2e240d591e74b51596dd91038b3"
"43","left","left_43.bmp","36864054","17906c08074254fe3682a58dcb0983847034a2aad6d4feb7c7485503e205430d"
"43","right","right_43.bmp","36864054","d833e99a5cc468e860ce553ba0e8e2c4441d93a0584ad44190dbdbc3abf6f2a7"

1 frame eye file bytes sha256
2 19 left left_19.bmp 36864054 b5b68722ef7cefb79d75f698838bfe869f8f1bc611290a34237bd0ec51616afc
3 19 right right_19.bmp 36864054 827d6a49caad6b718531a33e09a9fa12e8415b0351ca5c9e31ef0f58d2682d3b
4 20 left left_20.bmp 36864054 1dcbb91a2571d7893d2c5cf3545b7d3ecb8e4dda164ea6d62788baddbb012b22
5 20 right right_20.bmp 36864054 019276576ff18d925d204aa7a1b149194a66b6e45a0382561087941fb18e772c
6 28 left left_28.bmp 36864054 4967fbdd4f93574516ec41c220f05f6f70ff707c12f070da5b76f7b9faa55919
7 28 right right_28.bmp 36864054 28676009b052c88bf4555f9073df019dac1ad2e240d591e74b51596dd91038b3
8 43 left left_43.bmp 36864054 17906c08074254fe3682a58dcb0983847034a2aad6d4feb7c7485503e205430d
9 43 right right_43.bmp 36864054 d833e99a5cc468e860ce553ba0e8e2c4441d93a0584ad44190dbdbc3abf6f2a7

View File

@ -4,31 +4,31 @@ TEMPLATE = lib
CONFIG += staticlib
CONFIG += c++17
# Windows平台UTF-8编码支持
# Windows骞冲彴UTF-8缂栫爜鏀寔
win32-msvc {
QMAKE_CXXFLAGS += /utf-8
}
# Unix平台特定配置
# Unix骞冲彴鐗瑰畾閰嶇疆
unix:!macx {
# 位置无关代码(用于静态库)
# 浣嶇疆鏃犲叧浠g爜锛堢敤浜庨潤鎬佸簱锛?
QMAKE_CXXFLAGS += -fPIC
}
# 包含路径
# 鍖呭惈璺緞
INCLUDEPATH += $$PWD/Inc
INCLUDEPATH += $$PWD/../AppConfig/Inc # PathManager, ConfigMonitor, BaseConfigManager
INCLUDEPATH += $$PWD/../../Utils/CloudUtils/Inc # LaserDataLoader
INCLUDEPATH += $$PWD/../../Utils/VrCommon/Inc
INCLUDEPATH += $$PWD/../../Utils/VrUtils/Inc
INCLUDEPATH += $$PWD/../../Device/VrEyeDevice/Inc
INCLUDEPATH += $$PWD/../../SDK/Device/VzNLSDK/Inc
INCLUDEPATH += $$PWD/../../Device/SDK/VzNLSDK/Inc
INCLUDEPATH += $$PWD/../../Module/ShareMem/Inc # ConfigMonitor
INCLUDEPATH += $$PWD/../../Module/ModbusTCPServer/Inc # ModbusTCP服务器接口
INCLUDEPATH += $$PWD/../../Module/AuthModule/Inc # 授权模块
INCLUDEPATH += $$PWD/../../VrNets/TCPServer/Inc # TCP服务器接口
INCLUDEPATH += $$PWD/../../VrNets/ModbusTCPServer/Inc # ModbusTCP鏈嶅姟鍣ㄦ帴鍙?
INCLUDEPATH += $$PWD/../../Module/AuthModule/Inc # 鎺堟潈妯″潡
INCLUDEPATH += $$PWD/../../VrNets/TCPServer/Inc # TCP鏈嶅姟鍣ㄦ帴鍙?
# 头文件
# 澶存枃浠?
HEADERS += \
Inc/SingleInstanceManager.h \
Inc/IVisionApplicationStatus.h \
@ -38,38 +38,38 @@ HEADERS += \
Inc/TCPServerProtocol.h \
Inc/DebugDataSaver.h
# 源文件
# 婧愭枃浠?
SOURCES += \
Src/SingleInstanceManager.cpp \
Src/BasePresenter.cpp \
Src/TCPServerProtocol.cpp \
Src/DebugDataSaver.cpp
# Windows平台库链接
# Windows骞冲彴搴撻摼鎺?
win32:CONFIG(release, debug|release): {
LIBS += -L$$PWD/../../Module/ModbusTCPServer/release -lModbusTCPServer
LIBS += -L$$PWD/../../VrNets/release -lModbusTCPServer
LIBS += -L$$PWD/../../Module/ShareMem/release -lShareMem
LIBS += -L$$PWD/../../VrNets/release -lVrModbus
LIBS += -L$$PWD/../../VrNets/release -lVrTCPServer
LIBS += -L$$PWD/../../VrNets/release -lVrTcpServer
LIBS += -L$$PWD/../../Device/VrEyeDevice/release -lVrEyeDevice
LIBS += -L$$PWD/../../Utils/VrUtils/release -lVrUtils
}
else:win32:CONFIG(debug, debug|release): {
LIBS += -L$$PWD/../../Module/ModbusTCPServer/debug -lModbusTCPServer
LIBS += -L$$PWD/../../VrNets/debug -lModbusTCPServer
LIBS += -L$$PWD/../../Module/ShareMem/debug -lShareMem
LIBS += -L$$PWD/../../VrNets/debug -lVrModbus
LIBS += -L$$PWD/../../VrNets/debug -lVrTCPServer
LIBS += -L$$PWD/../../VrNets/debug -lVrTcpServer
LIBS += -L$$PWD/../../Device/VrEyeDevice/debug -lVrEyeDevice
LIBS += -L$$PWD/../../Utils/VrUtils/debug -lVrUtils
}else:unix:!macx {
LIBS += -L../../Module/ModbusTCPServer -lModbusTCPServer
LIBS += -L../../VrNets -lModbusTCPServer
LIBS += -L../../Module/ShareMem -lShareMem
LIBS += -L../../VrNets -lVrModbus
LIBS += -L../../VrNets -lVrTCPServer
LIBS += -L../../VrNets -lVrTcpServer
LIBS += -L../../Device/VrEyeDevice -lVrEyeDevice
LIBS += -L../../Utils/VrUtils -lVrUtils
# 添加系统库依赖
# 娣诲姞绯荤粺搴撲緷璧?
LIBS += -lpthread
}

View File

@ -19,7 +19,7 @@ public:
explicit SingleTargetResultWidget(QWidget* parent = nullptr);
void setTitle(const QString& title);
void setStatus(const QString& text, bool warning);
void setStatus(const QString& text, bool warning = false);
void setFields(const QList<QPair<QString, QString>>& fields);
void setEmptyText(const QString& text);

View File

@ -26,7 +26,7 @@ SingleTargetResultWidget::SingleTargetResultWidget(QWidget* parent)
: QWidget(parent)
{
setObjectName(QStringLiteral("singleTargetResultWidget"));
setMinimumSize(360, 168);
setMinimumSize(360, 360);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
m_titleLabel = MakeTextLabel(QStringLiteral("singleTargetTitle"), this);
@ -45,8 +45,10 @@ SingleTargetResultWidget::SingleTargetResultWidget(QWidget* parent)
m_fieldLayout = new QGridLayout();
m_fieldLayout->setContentsMargins(0, 0, 0, 0);
m_fieldLayout->setHorizontalSpacing(12);
m_fieldLayout->setVerticalSpacing(6);
m_fieldLayout->setHorizontalSpacing(16);
m_fieldLayout->setVerticalSpacing(10);
m_fieldLayout->setColumnStretch(0, 0);
m_fieldLayout->setColumnStretch(1, 1);
auto* mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(14, 12, 14, 12);
@ -63,32 +65,32 @@ SingleTargetResultWidget::SingleTargetResultWidget(QWidget* parent)
"}"
"#singleTargetTitle {"
" color: rgb(245, 247, 250);"
" font-size: 18px;"
" font-size: 22px;"
" font-weight: 600;"
"}"
"#singleTargetStatus {"
" color: rgb(255, 255, 255);"
" font-size: 14px;"
" font-size: 18px;"
" font-weight: 600;"
" padding: 3px 10px;"
" padding: 4px 12px;"
" border-radius: 4px;"
"}"
"#singleTargetEmpty {"
" color: rgb(172, 181, 194);"
" font-size: 16px;"
" font-size: 22px;"
"}"
"#singleTargetFieldName {"
" color: rgb(153, 164, 178);"
" font-size: 14px;"
" font-size: 18px;"
"}"
"#singleTargetFieldValue {"
" color: rgb(239, 242, 246);"
" font-size: 15px;"
" font-size: 20px;"
" font-weight: 500;"
"}");
setTitle(QStringLiteral("目标结果"));
setStatus(QStringLiteral("正常"), false);
setStatus(QStringLiteral("未知"), false);
}
void SingleTargetResultWidget::setTitle(const QString& title)
@ -98,10 +100,9 @@ void SingleTargetResultWidget::setTitle(const QString& title)
void SingleTargetResultWidget::setStatus(const QString& text, bool warning)
{
Q_UNUSED(warning);
m_statusLabel->setText(text.trimmed().isEmpty() ? QStringLiteral("未知") : text.trimmed());
m_statusLabel->setStyleSheet(warning
? QStringLiteral("background-color: rgb(190, 71, 61);")
: QStringLiteral("background-color: rgb(45, 137, 92);"));
m_statusLabel->setStyleSheet(QStringLiteral("background-color: rgb(73, 84, 99);"));
}
void SingleTargetResultWidget::setFields(const QList<QPair<QString, QString>>& fields)
@ -109,10 +110,8 @@ void SingleTargetResultWidget::setFields(const QList<QPair<QString, QString>>& f
clearFieldRows();
m_emptyLabel->setVisible(fields.isEmpty());
const int columns = 2;
for (int i = 0; i < fields.size(); ++i) {
const int row = i / columns;
const int column = (i % columns) * 2;
const int row = i;
QLabel* name = MakeTextLabel(QStringLiteral("singleTargetFieldName"), this);
name->setText(fields[i].first);
@ -120,8 +119,8 @@ void SingleTargetResultWidget::setFields(const QList<QPair<QString, QString>>& f
value->setText(fields[i].second);
value->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
m_fieldLayout->addWidget(name, row, column);
m_fieldLayout->addWidget(value, row, column + 1);
m_fieldLayout->addWidget(name, row, 0);
m_fieldLayout->addWidget(value, row, 1);
m_fieldWidgets.push_back(name);
m_fieldWidgets.push_back(value);
}

View File

@ -17,7 +17,7 @@ INCLUDEPATH += $$PWD/Inc
INCLUDEPATH += $$PWD/../../Utils/VrUtils/Inc
INCLUDEPATH += $$PWD/../../Utils/VrCommon/Inc
INCLUDEPATH += $$PWD/../../Device/VrEyeDevice/Inc
INCLUDEPATH += $$PWD/../../SDK/Device/VzNLSDK/Inc
INCLUDEPATH += $$PWD/../../Device/SDK/VzNLSDK/Inc
INCLUDEPATH += $$PWD/../AppCommon/Inc
INCLUDEPATH += $$PWD/../AppConfig/Inc
INCLUDEPATH += $$PWD/../../Utils/CloudUtils/Inc

View File

@ -1,28 +1,28 @@
# 应用列表及说明
## 软件对应关系表
| 序号 | 项目名称 | App名称 | 版本 |
|:---:|:--------|:---------|:------------|
| 1 | 自动拆包 | GrabBag | 1.3.6.2 |
| 2 | 皮带撕裂 | BeltTearingServer | 2.0.8.1 |
| 3 | 孔洞检测 | HoleDetection | 1.1.6.2 |
| 4 | 棒材定位 | RodAndBarPosition | 1.1.4.4 |
| 5 | 车轮拱高测量 | WheelMeasure | 1.2.2.2 |
| 6 | 定子定位 | StatorPosition | 1.0.0.1 |
| 7 | 焊接 | LapWeld | 1.0.0.1 |
| 8 | 工件定位 | Workpiece | 1.0.3.0 |
| 9 | 颗粒尺寸检测 | ParticleSize | 1.0.0.0 |
| 10 | 双目标记检测 | BinocularMarkServer | 1.0.0.4 |
| 11 | 铁路隧道槽道测量 | TunnelChannel | 1.0.0.3 |
| 12 | 螺杆定位 | ScrewPosition | 1.2.4.1 |
| 13 | 包裹拆线位置定位 | BagThreadPosition | 1.0.0.4 |
| 14 | 工件孔定位 | WorkpieceHole | 1.1.6.1 |
| 15 | 轮胎孔定位 | TireHolePose | 1.0.2.1 |
| 16 | 坑孔定位 | HolePitPosition | 无 |
| 17 | 钢筋焊缝定位 | RodWeldSeam | 1.0.0.1 |
| 18 | 无人机螺杆检测服务端 | DroneScrewServer | 1.0.0.6 |
| 19 | 无人机螺杆检测控制端 | DroneScrewCtrlApp | 1.0.0.6 |
| 20 | 砂轮盘孔定位 | DiscHolePose | 1.0.0.1 |
| 21 | 玖瑞工件定位 | JiuruiWorkpiecePose | 1.0.0.1 |
# 应用列表及说明
## 软件对应关系表
| 序号 | 项目名称 | App名称 | 版本 |
|:---:|:--------|:---------|:------------|
| 1 | 自动拆包 | GrabBag | 1.3.6.2 |
| 2 | 皮带撕裂 | BeltTearingServer | 2.0.8.1 |
| 3 | 孔洞检测 | HoleDetection | 1.1.6.2 |
| 4 | 棒材定位 | RodAndBarPosition | 1.1.4.4 |
| 5 | 车轮拱高测量 | WheelMeasure | 1.2.2.2 |
| 6 | 定子定位 | StatorPosition | 1.0.0.1 |
| 7 | 焊接 | LapWeld | 1.0.0.1 |
| 8 | 工件定位 | Workpiece | 1.0.3.0 |
| 9 | 颗粒尺寸检测 | ParticleSize | 1.0.0.0 |
| 10 | 双目标记检测 | BinocularMarkServer | 1.0.0.4 |
| 11 | 铁路隧道槽道测量 | TunnelChannel | 1.0.0.3 |
| 12 | 螺杆定位 | ScrewPosition | 1.2.4.1 |
| 13 | 包裹拆线位置定位 | BagThreadPosition | 1.0.0.4 |
| 14 | 工件孔定位 | WorkpieceHole | 1.1.6.1 |
| 15 | 轮胎孔定位 | TireHolePose | 1.0.2.1 |
| 16 | 坑孔定位 | HolePitPosition | 无 |
| 17 | 钢筋焊缝定位 | RodWeldSeam | 1.0.0.1 |
| 18 | 无人机螺杆检测服务端 | DroneScrewServer | 1.0.0.6 |
| 19 | 无人机螺杆检测控制端 | DroneScrewCtrlApp | 1.0.0.6 |
| 20 | 砂轮盘孔定位 | DiscHolePose | 1.0.0.1 |
| 21 | 玖瑞工件定位 | JiuruiWorkpiecePose | 1.0.0.1 |

View File

@ -1,46 +1,46 @@
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "手眼标定工具"
#define MyAppVersion "1.0.0"
#define MyAppPublisher ""
#define MyAppURL ""
#define MyAppExeName "CalibView.exe"
#define MyProgramPath ".\buildwin\CalibView"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{F8A7B6C5-D4E3-4F2A-9B1C-0D8E7F6A5B4C}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}_V{#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyAppName}V{#MyAppVersion}
OutputDir=..\Publish
Compression=lzma
SolidCompression=yes
[Languages]
Name: "default"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "{#MyProgramPath}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runascurrentuser
[Code]
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "手眼标定工具"
#define MyAppVersion "1.0.0"
#define MyAppPublisher ""
#define MyAppURL ""
#define MyAppExeName "CalibView.exe"
#define MyProgramPath ".\buildwin\CalibView"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{F8A7B6C5-D4E3-4F2A-9B1C-0D8E7F6A5B4C}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}_V{#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyAppName}V{#MyAppVersion}
OutputDir=..\Publish
Compression=lzma
SolidCompression=yes
[Languages]
Name: "default"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "{#MyProgramPath}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runascurrentuser
[Code]

View File

@ -1,48 +1,48 @@
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "点云查看器"
#define MyAppVersion "1.2.0"
#define MyAppPublisher ""
#define MyAppURL ""
#define MyAppExeName "CloudView.exe"
#define MyProgramPath ".\buildwin\CloudView"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}_V{#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyAppName}V{#MyAppVersion}
OutputDir=..\Publish
Compression=lzma
SolidCompression=yes
[Languages]
Name: "default"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
; Source: "D:\CoalDetect\Profile.ini"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
Source: "{#MyProgramPath}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runascurrentuser
[Code]
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "点云查看器"
#define MyAppVersion "1.2.0"
#define MyAppPublisher ""
#define MyAppURL ""
#define MyAppExeName "CloudView.exe"
#define MyProgramPath ".\buildwin\CloudView"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}_V{#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyAppName}V{#MyAppVersion}
OutputDir=..\Publish
Compression=lzma
SolidCompression=yes
[Languages]
Name: "default"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
; Source: "D:\CoalDetect\Profile.ini"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
Source: "{#MyProgramPath}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runascurrentuser
[Code]

View File

@ -1,47 +1,47 @@
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "演示应用"
#define MyAppVersion "1.0.0"
#define MyAppPublisher ""
#define MyAppURL ""
#define MyAppExeName "ControlApp.exe"
#define MyProgramPath ".\buildwin\ControlApp"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{A8F3C2D1-9E4B-4A7C-B5D6-1F8E9A2B3C4D}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}_V{#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyAppName}V{#MyAppVersion}
OutputDir=..\Publish
Compression=lzma
SolidCompression=yes
[Languages]
Name: "default"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "{#MyProgramPath}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runascurrentuser
[Code]
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "演示应用"
#define MyAppVersion "1.0.0"
#define MyAppPublisher ""
#define MyAppURL ""
#define MyAppExeName "ControlApp.exe"
#define MyProgramPath ".\buildwin\ControlApp"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{A8F3C2D1-9E4B-4A7C-B5D6-1F8E9A2B3C4D}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}_V{#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyAppName}V{#MyAppVersion}
OutputDir=..\Publish
Compression=lzma
SolidCompression=yes
[Languages]
Name: "default"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "{#MyProgramPath}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runascurrentuser
[Code]

View File

@ -1,44 +1,44 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33516.290
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ThreadPool", "..\Module\ThreadPool\ThreadPool.vcxproj", "{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestThreadPool", "..\Test\TestThreadPool\TestThreadPool.vcxproj", "{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}"
ProjectSection(ProjectDependencies) = postProject
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7} = {881F41B5-0FB2-4890-AB1F-F5F2013A22F7}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x64.ActiveCfg = Debug|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x64.Build.0 = Debug|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x86.ActiveCfg = Debug|Win32
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x86.Build.0 = Debug|Win32
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x64.ActiveCfg = Release|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x64.Build.0 = Release|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x86.ActiveCfg = Release|Win32
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x86.Build.0 = Release|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x64.ActiveCfg = Debug|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x64.Build.0 = Debug|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x86.ActiveCfg = Debug|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x86.Build.0 = Debug|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x64.ActiveCfg = Release|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x64.Build.0 = Release|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x86.ActiveCfg = Release|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9CA02FFA-9326-4C71-A14C-B54AB2F579D9}
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33516.290
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ThreadPool", "..\Module\ThreadPool\ThreadPool.vcxproj", "{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestThreadPool", "..\Test\TestThreadPool\TestThreadPool.vcxproj", "{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}"
ProjectSection(ProjectDependencies) = postProject
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7} = {881F41B5-0FB2-4890-AB1F-F5F2013A22F7}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x64.ActiveCfg = Debug|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x64.Build.0 = Debug|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x86.ActiveCfg = Debug|Win32
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Debug|x86.Build.0 = Debug|Win32
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x64.ActiveCfg = Release|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x64.Build.0 = Release|x64
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x86.ActiveCfg = Release|Win32
{881F41B5-0FB2-4890-AB1F-F5F2013A22F7}.Release|x86.Build.0 = Release|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x64.ActiveCfg = Debug|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x64.Build.0 = Debug|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x86.ActiveCfg = Debug|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Debug|x86.Build.0 = Debug|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x64.ActiveCfg = Release|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x64.Build.0 = Release|x64
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x86.ActiveCfg = Release|Win32
{0DBD887F-4AAC-4DB6-9706-4C6A43C3BB38}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9CA02FFA-9326-4C71-A14C-B54AB2F579D9}
EndGlobalSection
EndGlobal

View File

@ -36,7 +36,7 @@
SCRIPT_DIR="${SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
source "${SCRIPT_DIR}/project_meta.sh"
COPY_VZNLSDK="glob|SDK/Device/VzNLSDK/Arm/aarch64/*.so|usr/lib"
COPY_VZNLSDK="glob|Device/SDK/VzNLSDK/Arm/aarch64/*.so|usr/lib"
# 复制编译生成的动态库
# 说明:项目内部库绝大多数是静态库(CONFIG += staticlib),已在链接阶段

View File

@ -1,4 +1,4 @@
# RsLidarDevice 测试程序
# RsLidarDevice 娴嬭瘯绋嬪簭
TEMPLATE = app
TARGET = RsLidarTest
@ -9,13 +9,13 @@ win32-msvc {
QMAKE_CXXFLAGS += /utf-8
}
# 仅依赖 RsLidarDevice 公共接口(不含 rs_driver SDK 头文件)
# 浠呬緷璧?RsLidarDevice 鍏叡鎺ュ彛锛堜笉鍚?rs_driver SDK 澶存枃浠讹級
INCLUDEPATH += $$PWD/../../Device/RsLidarDevice/Inc
# CloudShow 模块
# CloudShow 妯″潡
INCLUDEPATH += $$PWD/../../Module/CloudShow/Inc
# 项目标准类型(SVzNLPointXYZI 等)
# 椤圭洰鏍囧噯绫诲瀷锛圫VzNLPointXYZI 绛夛級
INCLUDEPATH += $$PWD/../../Utils/VrCommon/Inc
INCLUDEPATH += $$PWD/../../Utils/VrUtils/Inc
INCLUDEPATH += $$PWD/../../Utils/CloudUtils/Inc
@ -23,15 +23,15 @@ INCLUDEPATH += $$PWD/../../Utils/CloudUtils/Inc
SOURCES += \
main.cpp
# PCL + VTK 路径(CloudShow 是静态库,最终 exe 需解析 PCL DLL 符号)
PCL_LIB_DIR = $$PWD/../../SDK/pcl-1.14.0/lib
BOOST_LIB_DIR = $$PWD/../../SDK/pcl-1.14.0/3rdParty/Boost/lib
VTK_LIB_DIR = $$PWD/../../SDK/pcl-1.14.0/3rdParty/VTK/lib
# PCL + VTK 璺緞锛圕loudShow 鏄潤鎬佸簱锛屾渶缁?exe 闇€瑙f瀽 PCL DLL 绗﹀彿锛?
PCL_LIB_DIR = $$PWD/../../Module/SDK/pcl-1.14.0/lib
BOOST_LIB_DIR = $$PWD/../../Module/SDK/pcl-1.14.0/3rdParty/Boost/lib
VTK_LIB_DIR = $$PWD/../../Module/SDK/pcl-1.14.0/3rdParty/VTK/lib
# VTK 版本后缀
# VTK 鐗堟湰鍚庣紑
VTK_VER = -9.3
# PCL 库
# PCL 搴?
win32:CONFIG(release, debug|release) {
PCL_LIBS = -lpcl_common -lpcl_io -lpcl_visualization
PCL_LIBS += -lpcl_filters -lpcl_kdtree -lpcl_search -lpcl_octree -lpcl_sample_consensus
@ -45,7 +45,7 @@ win32:CONFIG(release, debug|release) {
VTK_SUFFIX = $${VTK_VER}
}
# CloudShow 静态库
# CloudShow 闈欐€佸簱
UTILS_BUILD = $$PWD/../../GrabBagPrj/build/Utils
win32:CONFIG(debug, debug|release) {
LIBS += -L../../Device/RsLidarDevice/debug -lRsLidarDevice

View File

@ -1,5 +1,5 @@
# WDRemoteReceiverTest.pro
# 测试 WDRemoteReceiver 动态库的简易客户端 App
# 娴嬭瘯 WDRemoteReceiver 鍔ㄦ€佸簱鐨勭畝鏄撳鎴风 App
QT += core gui widgets
@ -7,12 +7,12 @@ TARGET = WDRemoteReceiverTest
TEMPLATE = app
CONFIG += c++17 console
# UTF-8 编码
# UTF-8 缂栫爜
win32-msvc {
QMAKE_CXXFLAGS += /utf-8
}
# 头文件路径
# 澶存枃浠惰矾寰?
INCLUDEPATH += $$PWD/../../Module/WDRemoteReceiver/Inc
INCLUDEPATH += $$PWD/../../Utils/VrUtils/Inc
INCLUDEPATH += $$PWD/../../Utils/VrUtils/jsoncpp
@ -21,30 +21,30 @@ HEADERS += mainwindow.h
SOURCES += main.cpp mainwindow.cpp
FORMS += mainwindow.ui
# 库链接
# 搴撻摼鎺?
win32 {
CONFIG(debug, debug|release) {
LIBS += -L../../Module/WDRemoteReceiver/debug -lWDRemoteReceiver
LIBS += -L../../Module/ZeroMQClient/debug -lZeroMQClient
LIBS += -L../../Module/ZeroMQPubSub/debug -lZeroMQPubSub
LIBS += -L../../VrNets/debug -lZeroMQClient
LIBS += -L../../VrNets/debug -lZeroMQPubSub
LIBS += -L../../Utils/VrUtils/debug -lVrUtils
LIBS += -L$$PWD/../../SDK/ZeroMQ/Windows/x64/Debug -llibzmq-v142-mt-gd-4_3_5
LIBS += -L$$PWD/../../VrNets/SDK/ZeroMQ/Windows/x64/Debug -llibzmq-v142-mt-gd-4_3_5
} else {
LIBS += -L../../Module/WDRemoteReceiver/release -lWDRemoteReceiver
LIBS += -L../../Module/ZeroMQClient/release -lZeroMQClient
LIBS += -L../../Module/ZeroMQPubSub/release -lZeroMQPubSub
LIBS += -L../../VrNets/release -lZeroMQClient
LIBS += -L../../VrNets/release -lZeroMQPubSub
LIBS += -L../../Utils/VrUtils/release -lVrUtils
LIBS += -L$$PWD/../../SDK/ZeroMQ/Windows/x64/Release -llibzmq-v142-mt-4_3_5
LIBS += -L$$PWD/../../VrNets/SDK/ZeroMQ/Windows/x64/Release -llibzmq-v142-mt-4_3_5
}
LIBS += -lws2_32
}
unix:!macx {
LIBS += -L$$PWD/../../Module/WDRemoteReceiver -lWDRemoteReceiver
LIBS += -L$$PWD/../../Module/ZeroMQClient -lZeroMQClient
LIBS += -L$$PWD/../../Module/ZeroMQPubSub -lZeroMQPubSub
LIBS += -L$$PWD/../../VrNets -lZeroMQClient
LIBS += -L$$PWD/../../VrNets -lZeroMQPubSub
LIBS += -L$$PWD/../../Utils/VrUtils -lVrUtils
LIBS += -L$$PWD/../../SDK/ZeroMQ/Arm/aarch64 -lzmq
LIBS += -L$$PWD/../../VrNets/SDK/ZeroMQ/Arm/aarch64 -lzmq
OPENCV_LIB_DIR = $$PWD/../../SDK/OpenCV320/Arm/aarch64
LIBS += -L$${OPENCV_LIB_DIR} -lopencv_imgcodecs -lopencv_core
QMAKE_LFLAGS += -Wl,-rpath-link,$${OPENCV_LIB_DIR}

View File

@ -23,13 +23,13 @@ win32 {
}
win32:CONFIG(debug, debug|release) {
LIBS += -L../../VrNets/debug -lVrTCPServer
LIBS += -L../../VrNets/debug -lVrTcpServer
LIBS += -L../../Utils/VrUtils/debug -lVrUtils
}else:win32:CONFIG(release, debug|release){
LIBS += -L../../VrNets/release -lVrTCPServer
LIBS += -L../../VrNets/release -lVrTcpServer
LIBS += -L../../Utils/VrUtils/release -lVrUtils
}else:unix:!macx {
LIBS += -L../../VrNets -lVrTCPServer
LIBS += -L../../VrNets -lVrTcpServer
LIBS += -L../../VrUtils -lVrUtils
# 添加系统库依赖

View File

@ -1,10 +1,10 @@
# CalibView - 手眼标定工具
# CalibView - 鎵嬬溂鏍囧畾宸ュ叿
QT += core gui widgets
CONFIG += c++17 #console
CONFIG -= app_bundle
# Windows平台UTF-8编码支持
# Windows骞冲彴UTF-8缂栫爜鏀寔
win32-msvc {
QMAKE_CXXFLAGS += /utf-8
QMAKE_CXXFLAGS += /bigobj
@ -13,34 +13,34 @@ win32-msvc {
TARGET = CalibView
TEMPLATE = app
# 项目目录
# 椤圭洰鐩綍
INCLUDEPATH += $$PWD/Inc
INCLUDEPATH += $$PWD/../../Module/HandEyeCalib/Inc
INCLUDEPATH += $$PWD/../../Module/HandEyeCalib/_Inc
INCLUDEPATH += $$PWD/../../Utils/VrCommon/Inc
INCLUDEPATH += $$PWD/../../SDK/eigen-3.3.9
# VrEyeView 集成
# VrEyeView 闆嗘垚
INCLUDEPATH += $$PWD/../VrEyeView/Inc
INCLUDEPATH += $$PWD/../../Module/ChessboardDetector/Inc
INCLUDEPATH += $$PWD/../../Device/VrEyeDevice/Inc
# VzNLSDK 头文件路径
INCLUDEPATH += $$PWD/../../SDK/Device/VzNLSDK/Inc
# VzNLSDK 澶存枃浠惰矾寰?
INCLUDEPATH += $$PWD/../../Device/SDK/VzNLSDK/Inc
# RobotView 集成
# RobotView 闆嗘垚
INCLUDEPATH += $$PWD/../RobotView
INCLUDEPATH += $$PWD/../../Robot/FairinoWrapper
INCLUDEPATH += $$PWD/../../SDK/Robot/fairino-cpp-sdk/libfairino/src/include/Robot-CN
INCLUDEPATH += $$PWD/../../SDK/Robot/fairino-cpp-sdk/libfairino/src/include
# 定义静态库模式(不导入)
# 瀹氫箟闈欐€佸簱妯″紡锛堜笉瀵煎叆锛?
DEFINES += FAIRINO_WRAPPER_LIB
# OpenCV 配置
# OpenCV 閰嶇疆
INCLUDEPATH += $$PWD/../../SDK/OpenCV320/include
# 头文件
# 澶存枃浠?
HEADERS += \
Inc/CalibViewMainWindow.h \
Inc/CalibDataWidget.h \
@ -49,7 +49,7 @@ HEADERS += \
../RobotView/MainWindow.h \
../VrEyeView/Inc/VrEyeViewWidget.h
# 源文件
# 婧愭枃浠?
SOURCES += \
main.cpp \
Src/CalibViewMainWindow.cpp \
@ -59,13 +59,13 @@ SOURCES += \
../RobotView/MainWindow.cpp \
../VrEyeView/Src/VrEyeViewWidget.cpp
# 资源文件
# 璧勬簮鏂囦欢
RESOURCES += resource/resource.qrc
# Windows 应用图标
# Windows 搴旂敤鍥炬爣
RC_ICONS = resource/logo.ico
# Windows平台库链接
# Windows骞冲彴搴撻摼鎺?
win32:CONFIG(release, debug|release): {
LIBS += -L../../Module/HandEyeCalib/release -lHandEyeCalib
LIBS += -L../../Utils/VrCommon/release -lVrCommon
@ -89,7 +89,7 @@ else:win32:CONFIG(debug, debug|release): {
LIBS += -L$$PWD/../../SDK/OpenCV320/Windows/vc14/Release -lopencv_world320
}
# Unix平台库链接
# Unix骞冲彴搴撻摼鎺?
unix {
LIBS += -L../../Module/HandEyeCalib -lHandEyeCalib
LIBS += -L../../Utils/VrCommon -lVrCommon
@ -103,19 +103,19 @@ unix {
}
win32:CONFIG(release, debug|release): {
LIBS += -L$$PWD/../../SDK/Device/VzNLSDK/Windows/x64/Release
LIBS += -L$$PWD/../../Device/SDK/VzNLSDK/Windows/x64/Release
LIBS += -lVzKernel -lVzNLDetect -lVzNLGraphics
}
else:win32:CONFIG(debug, debug|release): {
LIBS += -L$$PWD/../../SDK/Device/VzNLSDK/Windows/x64/Debug
LIBS += -L$$PWD/../../Device/SDK/VzNLSDK/Windows/x64/Debug
LIBS += -lVzKerneld -lVzNLDetectd -lVzNLGraphicsd
}
else:unix:!macx: {
LIBS += -L$$PWD/../../SDK/Device/VzNLSDK/Arm/aarch64
LIBS += -L$$PWD/../../Device/SDK/VzNLSDK/Arm/aarch64
LIBS += -lVzEyeSecurityLoader-shared -lVzKernel -lVzNLDetect -lVzNLGraphics
}
# Windows系统库
# Windows绯荤粺搴?
win32 {
LIBS += -lAdvapi32
LIBS += -lws2_32

View File

@ -4,16 +4,16 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# 强制使用UTF-8编码
# 寮哄埗浣跨敤UTF-8缂栫爜
QMAKE_CXXFLAGS += /utf-8
# 定义版本号
# 瀹氫箟鐗堟湰鍙?
DEFINES += APP_VERSION=\\\"1.0.0\\\"
# 定义静态库模式(不导入)
# 瀹氫箟闈欐€佸簱妯″紡锛堜笉瀵煎叆锛?
DEFINES += FAIRINO_WRAPPER_LIB
# 输出目录配置(由主项目决定)
# 杈撳嚭鐩綍閰嶇疆锛堢敱涓婚」鐩喅瀹氾級
CONFIG(debug, debug|release) {
TARGET = ControlAppd
} else {
@ -38,21 +38,21 @@ FORMS += \
mainwindow.ui \
dialogconfig.ui
# 包含路径
# 鍖呭惈璺緞
INCLUDEPATH += \
$$PWD/../../AppUtils/AppCommon/Inc \
$$PWD/../../AppUtils/UICommon/Inc \
$$PWD/../../Module/ModbusTCPClient/Inc \
$$PWD/../../VrNets/ModbusTCPClient/Inc \
$$PWD/../../Robot/FairinoWrapper \
$$PWD/../../SDK/Robot/fairino-cpp-sdk/libfairino/src/include/Robot-CN \
$$PWD/../../SDK/Robot/fairino-cpp-sdk/libfairino/src/include \
$$PWD/../../VrUtils/Inc
# Windows平台库链接
# Windows骞冲彴搴撻摼鎺?
win32:CONFIG(release, debug|release): {
LIBS += -L$$OUT_PWD/../../AppUtils/AppCommon/release -lAppCommon
LIBS += -L$$OUT_PWD/../../AppUtils/UICommon/release -lUICommon
LIBS += -L$$OUT_PWD/../../Module/ModbusTCPClient/release -lModbusTCPClient
LIBS += -L$$OUT_PWD/../../VrNets/release -lModbusTCPClient
LIBS += -L$$OUT_PWD/../../Utils/VrUtils/release -lVrUtils
LIBS += -L$$OUT_PWD/../../Robot/FairinoWrapper/release/ -lFairinoWrapper
LIBS += -L$$OUT_PWD/../../SDK/Robot/fairino-cpp-sdk/libfairino/release/ -lfairino
@ -60,23 +60,23 @@ win32:CONFIG(release, debug|release): {
else:win32:CONFIG(debug, debug|release): {
LIBS += -L$$OUT_PWD/../../AppUtils/AppCommon/debug -lAppCommond
LIBS += -L$$OUT_PWD/../../AppUtils/UICommon/debug -lUICommond
LIBS += -L$$OUT_PWD/../../Module/ModbusTCPClient/debug -lModbusTCPClientd
LIBS += -L$$OUT_PWD/../../VrNets/debug -lModbusTCPClient
LIBS += -L$$OUT_PWD/../../Utils/VrUtils/debug -lVrUtilsd
LIBS += -L$$OUT_PWD/../../Robot/FairinoWrapper/debug/ -lFairinoWrapperd
LIBS += -L$$OUT_PWD/../../SDK/Robot/fairino-cpp-sdk/libfairino/debug/ -lfairinod
}
# Windows系统库
# Windows绯荤粺搴?
win32 {
LIBS += -lws2_32
}
# Windows任务栏图标配置
# Windows浠诲姟鏍忓浘鏍囬厤缃?
win32 {
RC_ICONS = logo.ico
}
# 资源文件
# 璧勬簮鏂囦欢
RESOURCES += \
$$PWD/../../AppUtils/UICommon/common_resources.qrc \
resource.qrc

View File

@ -1,52 +1,52 @@
# 主控程序
主控程序作为主调度,协调控制器(ModbusTCP)和机械臂(Fairino)完成自动化抓取放置流程。
## 功能特点
1. **ModbusTCP客户端** - 连接控制器(默认192.168.0.88:502)
2. **Fairino机械臂控制** - 连接机械臂(默认192.168.58.2)
3. **8步工作流程** - 自动化抓取放置循环
4. **流程可视化** - 实时显示工作状态
5. **配置管理** - 运行时修改参数
## 工作流程
1. 机械臂运行到准备位置(可配置)
2. 触发控制器检测(写ModbusTCP寄存器)
3. 等待检测完成(轮询状态)
4. 读取目标坐标XYZ RPY并显示
5. 机械臂移动到抓取位置
6. 执行抓取
7. 机械臂移动到放置位置(可配置)
8. 执行放置
9. 循环执行,直到停止或失败
## 编译
```bash
cd Tools/DemoControlApp
qmake DemoControlApp.pro
nmake release
```
## 配置
点击界面上的"配置"按钮可修改:
- 控制器IP和端口
- 机械臂IP
- 准备位置(XYZ + RPY)
- 放置位置(XYZ + RPY)
- 抓取Z轴偏移
## 依赖
- AppCommon
- UICommon
- ModbusTCPClient
- FairinoRobotWrapper
- VrUtils
## 协议参考
ModbusTCP协议参考:`App/StatorPosition/Doc/定子线圈ModbusTCP协议.md`
# 主控程序
主控程序作为主调度,协调控制器(ModbusTCP)和机械臂(Fairino)完成自动化抓取放置流程。
## 功能特点
1. **ModbusTCP客户端** - 连接控制器(默认192.168.0.88:502)
2. **Fairino机械臂控制** - 连接机械臂(默认192.168.58.2)
3. **8步工作流程** - 自动化抓取放置循环
4. **流程可视化** - 实时显示工作状态
5. **配置管理** - 运行时修改参数
## 工作流程
1. 机械臂运行到准备位置(可配置)
2. 触发控制器检测(写ModbusTCP寄存器)
3. 等待检测完成(轮询状态)
4. 读取目标坐标XYZ RPY并显示
5. 机械臂移动到抓取位置
6. 执行抓取
7. 机械臂移动到放置位置(可配置)
8. 执行放置
9. 循环执行,直到停止或失败
## 编译
```bash
cd Tools/DemoControlApp
qmake DemoControlApp.pro
nmake release
```
## 配置
点击界面上的"配置"按钮可修改:
- 控制器IP和端口
- 机械臂IP
- 准备位置(XYZ + RPY)
- 放置位置(XYZ + RPY)
- 抓取Z轴偏移
## 依赖
- AppCommon
- UICommon
- ModbusTCPClient
- FairinoRobotWrapper
- VrUtils
## 协议参考
ModbusTCP协议参考:`App/StatorPosition/Doc/定子线圈ModbusTCP协议.md`

View File

@ -1,10 +1,10 @@
# VrEyeView - 相机图像查看与标定板检测工具
# VrEyeView - 鐩告満鍥惧儚鏌ョ湅涓庢爣瀹氭澘妫€娴嬪伐鍏?
QT += core gui widgets
CONFIG += c++17
CONFIG -= app_bundle
# Windows平台UTF-8编码支持
# Windows骞冲彴UTF-8缂栫爜鏀寔
win32-msvc {
QMAKE_CXXFLAGS += /utf-8
QMAKE_CXXFLAGS += /bigobj
@ -13,7 +13,7 @@ win32-msvc {
TARGET = VrEyeView
TEMPLATE = app
# 项目目录
# 椤圭洰鐩綍
INCLUDEPATH += $$PWD/Inc
INCLUDEPATH += $$PWD/../../Device/VrEyeDevice/Inc
INCLUDEPATH += $$PWD/../../Device/VrEyeDevice/_Inc
@ -21,34 +21,34 @@ INCLUDEPATH += $$PWD/../../Module/ChessboardDetector/Inc
INCLUDEPATH += $$PWD/../../Module/ChessboardDetector/_Inc
INCLUDEPATH += $$PWD/../../Utils/VrCommon/Inc
# VzNLSDK 头文件路径
INCLUDEPATH += $$PWD/../../SDK/Device/VzNLSDK/Inc
# VzNLSDK 澶存枃浠惰矾寰?
INCLUDEPATH += $$PWD/../../Device/SDK/VzNLSDK/Inc
# 头文件
# 澶存枃浠?
HEADERS += \
Inc/VrEyeViewWidget.h
# 源文件
# 婧愭枃浠?
SOURCES += \
main.cpp \
Src/VrEyeViewWidget.cpp
win32:CONFIG(release, debug|release): {
LIBS += -L$$PWD/../../SDK/Device/VzNLSDK/Windows/x64/Release
LIBS += -L$$PWD/../../Device/SDK/VzNLSDK/Windows/x64/Release
LIBS += -lVzKernel -lVzNLDetect -lVzNLGraphics
}
else:win32:CONFIG(debug, debug|release): {
LIBS += -L$$PWD/../../SDK/Device/VzNLSDK/Windows/x64/Debug
LIBS += -L$$PWD/../../Device/SDK/VzNLSDK/Windows/x64/Debug
LIBS += -lVzKerneld -lVzNLDetectd -lVzNLGraphicsd
}
else:unix:!macx: {
LIBS += -L$$PWD/../../SDK/Device/VzNLSDK/Arm/aarch64
LIBS += -L$$PWD/../../Device/SDK/VzNLSDK/Arm/aarch64
LIBS += -lVzEyeSecurityLoader-shared -lVzKernel -lVzNLDetect -lVzNLGraphics
}
# OpenCV 配置
# OpenCV 閰嶇疆
win32:CONFIG(release, debug|release): {
LIBS += -L$$PWD/../../SDK/OpenCV320/Windows/vc14/Release -lopencv_world320
}
@ -59,7 +59,7 @@ else:unix:!macx: {
LIBS += -L$$PWD/../../SDK/OpenCV320/Arm/aarch64 -lopencv_core -lopencv_imgproc -lopencv_highgui
}
# Windows平台库链接
# Windows骞冲彴搴撻摼鎺?
win32:CONFIG(release, debug|release): {
LIBS += -L../../Utils/CloudUtils/release -lCloudUtils
LIBS += -L../../Device/VrEyeDevice/release -lVrEyeDevice
@ -75,16 +75,16 @@ else:win32:CONFIG(debug, debug|release): {
LIBS += -L../../Utils/VrUtils/debug -lVrUtils
}
# Unix平台库链接
# Unix骞冲彴搴撻摼鎺?
unix {
LIBS += -L../../Device/VrEyeDevice -lVrEyeDevice
LIBS += -L../../Module/ChessboardDetector -lChessboardDetector
LIBS += -L../../Utils/VrCommon -lVrCommon
LIBS += -L$$PWD/../../SDK/VzNLSDK/Linux/Arm/aarch64/lib -lVzKernel
LIBS += -L$$PWD/../../Device/SDK/VzNLSDK/Arm/aarch64 -lVzKernel
QMAKE_CXXFLAGS += -fPIC
}
# Windows系统库
# Windows绯荤粺搴?
win32 {
LIBS += -lAdvapi32
LIBS += -lws2_32