286 lines
7.9 KiB
Markdown
286 lines
7.9 KiB
Markdown
# D330Viewer - D330M深度相机控制系统
|
||
|
||
## 项目简介
|
||
|
||
D330Viewer 是一个基于Qt6的深度相机控制和可视化系统,用于D330M深度相机的实时数据采集、处理和显示。系统采用OpenCL GPU加速进行点云计算,支持实时显示深度图像和3D点云。
|
||
|
||
## 技术栈
|
||
|
||
### 核心库版本
|
||
- **Qt6**: 6.10.1 (msvc2022_64)
|
||
- **PCL**: 1.15.1 (Point Cloud Library)
|
||
- **OpenCV**: 4.13.0
|
||
- **OpenCL**: 3.0 (GPU加速)
|
||
- **DkamSDK**: 1.6.83 (D330M相机SDK)
|
||
|
||
### 开发环境
|
||
- **操作系统**: Windows 10/11 (64位)
|
||
- **编译器**: Visual Studio 2026 (MSVC)
|
||
- **构建工具**: CMake 3.15+
|
||
- **GPU**: 支持OpenCL的GPU(NVIDIA/AMD/Intel)
|
||
|
||
## 快速开始
|
||
|
||
### 1. 环境准备
|
||
|
||
确保已安装以下软件:
|
||
- Visual Studio 2022 以上(包含C++桌面开发工作负载)
|
||
- CMake 3.15或更高版本
|
||
- 支持OpenCL的GPU驱动
|
||
|
||
### 2. 库依赖安装
|
||
|
||
**必需的库**:
|
||
- Qt6 6.10.1 (msvc2022_64)
|
||
- PCL 1.15.1
|
||
- OpenCV 4.13.0
|
||
- OpenCL 3.0(通常随GPU驱动自动安装)
|
||
|
||
**安装路径**(默认):
|
||
- Qt6: `C:\Qt\6.10.1\msvc2022_64`
|
||
- PCL: `C:\Program Files\PCL 1.15.1`
|
||
- OpenCV: `C:\opencv\build`
|
||
|
||
### 3. 配置项目
|
||
|
||
**方式1:使用配置脚本(推荐)**
|
||
```bash
|
||
# 需根据本地情况修改库路径,编辑configure.bat
|
||
configure.bat
|
||
```
|
||
|
||
**方式2:手动配置**
|
||
```bash
|
||
cmake -B build -S . ^
|
||
-G "Visual Studio 18 2026" ^
|
||
-A x64 ^
|
||
-DPCL_DIR="C:/Program Files/PCL 1.15.1/cmake" ^
|
||
-DOpenCV_DIR="C:/opencv/build" ^
|
||
-DCMAKE_PREFIX_PATH="C:/Qt/6.10.1/msvc2022_64"
|
||
```
|
||
|
||
**注意**:
|
||
- 如果系统安装了VS 2022,可使用 `-G "Visual Studio 17 2022"`
|
||
|
||
### 4. 编译项目
|
||
|
||
```bash
|
||
# Release版本(推荐)
|
||
cmake --build build --config Release
|
||
|
||
# Debug版本 需自行复制Debug版本库文件
|
||
cmake --build build --config Debug
|
||
```
|
||
|
||
编译输出:
|
||
- Release: `bin/D330Viewer.exe`
|
||
- Debug: `bin/Debug/D330Viewer.exe`
|
||
|
||
### 5. 运行程序
|
||
|
||
```bash
|
||
cd bin
|
||
D330Viewer.exe
|
||
```
|
||
|
||
**注意**:首次运行需要确保所有DLL文件都在bin目录下。
|
||
|
||
### 6. 生成MSI安装程序(可选)
|
||
|
||
项目支持生成Windows MSI安装程序,方便在其他电脑上部署。
|
||
|
||
**前置要求**:需要安装 WiX Toolset v3.x
|
||
|
||
**安装WiX Toolset**:
|
||
1. 访问 GitHub Release 页面:https://github.com/wixtoolset/wix3/releases
|
||
2. 下载最新版本的安装包:
|
||
- `wix3xx-binaries.zip`
|
||
- 或 `wix3xx.exe`
|
||
3. 如果下载zip文件:
|
||
- 解压到 `C:\Program Files (x86)\WiX Toolset v3.14\`
|
||
- 添加bin目录到系统PATH:`C:\Program Files (x86)\WiX Toolset v3.14\bin`
|
||
4. 如果下载exe文件:
|
||
- 直接运行安装程序,安装后会自动添加到PATH
|
||
|
||
**验证安装**:
|
||
```bash
|
||
candle.exe -?
|
||
```
|
||
|
||
**生成MSI安装程序**:
|
||
|
||
```bash
|
||
# 编译完成后,在build目录运行
|
||
cd build
|
||
cpack -G WIX -C Release
|
||
```
|
||
|
||
生成的安装程序:`build/D330Viewer-0.1.0-win64.msi`
|
||
|
||
**MSI安装程序包含**:
|
||
- D330Viewer.exe(主程序)
|
||
- 所有必需的DLL
|
||
- Qt平台插件(platforms目录)
|
||
- 开始菜单快捷方式
|
||
- 桌面快捷方式
|
||
- 卸载程序快捷方式(开始菜单)
|
||
|
||
**安装目录结构**:
|
||
```
|
||
C:\Program Files\D330Viewer\
|
||
├── D330Viewer.exe # 主程序
|
||
├── *.dll # 所有依赖库
|
||
└── platforms\ # Qt平台插件
|
||
└── qwindows.dll
|
||
```
|
||
|
||
**快捷方式**:
|
||
- 桌面:D330Viewer(卸载时自动删除)
|
||
- 开始菜单:D330Viewer 文件夹
|
||
- D330Viewer(启动程序)
|
||
- 卸载 D330Viewer(卸载程序)
|
||
|
||
## 功能特性
|
||
|
||
### ✅ 已完成功能
|
||
|
||
#### 网络通信
|
||
- ✅ UDP网络通信(GVSP协议解析)
|
||
- ✅ 自动设备扫描和发现
|
||
- ✅ 相机连接管理(连接/断开)
|
||
- ✅ 命令发送(START/STOP)
|
||
|
||
#### 可视化
|
||
- ✅ 实时深度图显示(OpenCV,垂直翻转校正)
|
||
- ✅ 实时3D点云显示(自定义OpenGL渲染)
|
||
- ✅ 正交投影视角(平面视图)
|
||
- ✅ 交互式点云操作:
|
||
- 左键拖动:旋转视角
|
||
- 右键拖动:平移
|
||
- 滚轮:缩放(范围100-10000)
|
||
|
||
#### 用户界面
|
||
- ✅ Qt6 GUI主窗口(三栏布局)
|
||
- ✅ 相机控制面板(START/STOP按钮)
|
||
- ✅ 曝光时间调节(滑块,范围460-100000μs)
|
||
- ✅ 网络配置(IP地址、端口设置)
|
||
- ✅ 连接状态指示
|
||
- ✅ 配置持久化(QSettings)
|
||
|
||
### 🚧 当前开发计划
|
||
|
||
根据需求文档和用户反馈,后续待添加功能如下:
|
||
|
||
- 录制功能(连续保存多帧)
|
||
- 点云颜色映射(深度着色)
|
||
- 点云滤波选项(降噪、平滑)
|
||
- 测量工具(距离、角度测量)
|
||
- 多视角预设(正视、侧视、俯视)
|
||
- 性能监控(CPU/GPU使用率、内存使用)
|
||
- 其他相机参数调节(增益、白平衡等)
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
d330viewer/
|
||
├── src/ # 源代码
|
||
│ ├── main.cpp # 程序入口
|
||
│ ├── gui/ # GUI相关
|
||
│ │ ├── MainWindow.cpp # 主窗口
|
||
│ │ ├── PointCloudWidget.cpp # 点云显示组件
|
||
│ │ └── PointCloudGLWidget.cpp # OpenGL点云渲染
|
||
│ ├── core/ # 核心功能
|
||
│ │ ├── NetworkManager.cpp # 网络通信
|
||
│ │ ├── GVSPParser.cpp # GVSP协议解析
|
||
│ │ ├── PointCloudProcessor.cpp # OpenCL点云计算
|
||
│ │ └── DeviceScanner.cpp # 设备扫描
|
||
│ └── config/ # 配置管理
|
||
│ └── ConfigManager.cpp # 配置持久化
|
||
├── include/ # 头文件
|
||
│ ├── gui/ # GUI头文件
|
||
│ └── core/ # 核心功能头文件
|
||
├── bin/ # 可执行文件和DLL
|
||
│ ├── D330Viewer.exe # 主程序
|
||
│ └── *.dll # 依赖库
|
||
├── build/ # CMake构建目录
|
||
├── CMakeLists.txt # CMake配置
|
||
├── configure.bat # 快速配置脚本
|
||
└── README.md # 本文件
|
||
```
|
||
|
||
## 相机配置
|
||
|
||
### 硬件信息
|
||
- **相机型号**: D330M
|
||
- **控制端口**: 6790 (UDP)
|
||
- **数据端口**: 3957 (UDP)
|
||
- **分辨率**: 1224 x 1024
|
||
- **深度范围**: 155mm - 3000mm
|
||
|
||
### 网络配置
|
||
确保PC和相机在同一网段即可。
|
||
|
||
### 相机参数
|
||
- **曝光时间**: 460 - 100000 μs
|
||
- **Z缩放因子**: 0.2 (深度值需除以5)
|
||
- **相机内参**:
|
||
- fx = 1432.8957
|
||
- fy = 1432.6590
|
||
- cx = 637.5117
|
||
- cy = 521.8720
|
||
|
||
### 下位机程序修改
|
||
下位机程序保存在`/root/msk/20260113/` 。具体安装和使用详见根目录内`INSTALL.md`文件。当前版本程序修改功能如下:
|
||
- 添加`DISCOVER`命令,允许上位机对相机进行自动扫描。保持上位机下位机均DHCP能够正常使用。
|
||
- 将程序添加到系统服务中,可以使用`systemctl`进行运行和管理
|
||
|
||
## 使用说明
|
||
|
||
### 基本操作流程
|
||
|
||
1. **启动程序**
|
||
- 运行 `bin/D330Viewer.exe`
|
||
- 程序会自动扫描网络中的D330M相机
|
||
|
||
2. **连接相机**
|
||
- 在设备列表中选择相机
|
||
- 点击"连接"按钮
|
||
- 状态指示变为绿色"已连接"
|
||
|
||
3. **开始采集**
|
||
- 点击"启动"按钮开始实时采集
|
||
- 深度图显示在中间区域
|
||
- 点云显示在右侧区域
|
||
|
||
4. **调整参数**
|
||
- 拖动曝光滑块调整曝光时间
|
||
- 使用鼠标操作点云视角
|
||
|
||
5. **停止采集**
|
||
- 点击"停止"按钮停止采集
|
||
|
||
### 点云交互操作
|
||
|
||
- **旋转视角**: 左键拖动
|
||
- **平移**: 右键拖动
|
||
- **缩放**: 滚轮上下滚动
|
||
- **复位**: 重新启动采集
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
#### 1. 无法接收数据
|
||
**问题**: 点击"启动"后没有图像和点云显示
|
||
|
||
**解决方案**:
|
||
- 图像在长时间传输后有概率卡住,不相应任何命令,具体可监控下位机日志。重启系统服务即可解决。
|
||
|
||
## 开发文档
|
||
|
||
### 代码规范
|
||
- 使用Qt6信号槽机制进行模块间通信
|
||
- OpenCL kernel代码内联在C++源文件中
|
||
- 配置使用QSettings持久化
|
||
- 日志输出到 `bin/d330viewer.log`
|