Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
187c3e8f14 | ||
|
|
002c47c669 | ||
|
|
5c283142a0 | ||
|
|
0cf0d73e11 | ||
|
|
b5d7130113 | ||
|
|
eca01bb534 |
118
README.md
118
README.md
@ -1,12 +1,106 @@
|
||||
# 果蔬智能装备及产业化
|
||||
|
||||
此代码涉及海康威视面阵相机**MV-CS050-10GC**
|
||||
|
||||
光谱相机为无锡谱世界生产的RT10。
|
||||
|
||||
与机械手通讯采用tcp-ip协议,主要发送分级结果给机械手,此部分代码为滕广、方晓东、徐耀创作。
|
||||
|
||||
与称重模块通讯以及光谱相机筛选谱段以及拼接皆出自徐耀之手,此人精通C++,师弟有不懂就问徐耀师兄。
|
||||
|
||||
|
||||
|
||||
# 果蔬智能装备及产业化
|
||||
|
||||
UpmatchinePassion-tomato
|
||||
文件夹:
|
||||
├─***CameraConfig***
|
||||
├─debug
|
||||
│ ├─***Settings***
|
||||
├─***image***
|
||||
│ ├─L
|
||||
│ ├─R
|
||||
│ ├─specImg
|
||||
│ └─T
|
||||
│ ├─bottom
|
||||
│ ├─middle
|
||||
│ └─top
|
||||
├─***opencv***
|
||||
├─***rgbcamera_sdk***
|
||||
├─***RT_SDK***
|
||||
└─**src**
|
||||
|
||||
## 0 引言
|
||||
|
||||
此代码涉及海康威视面阵相机**MV-CS050-10GC**
|
||||
|
||||
光谱相机为无锡谱世界生产的RT10,**settings文件夹一定要放在debug目录下**。
|
||||
|
||||
与机械手通讯采用tcp-ip协议,主要发送分级结果给机械手。
|
||||
|
||||
与称重模块通讯以及光谱相机筛选谱段以及拼接。
|
||||
|
||||
|
||||
|
||||
|
||||
**注意:依赖文件在release里面,是v3.0版本,记得下载**
|
||||
|
||||
## 1 细节
|
||||
|
||||
福建泉州番茄-百香果 Qt 项目代码,应该是 Qt 人的入门级代码。
|
||||
|
||||
代码部分一共有三部分,camera^ thread和widget, camera主要内容是相机,负责相 机的初始化和参数设置‘thread主要内容是线程,负责各个线程的工作和启停,widget主要内容是界面按钮和信号的处理。
|
||||
|
||||
下面进行各个分部分介绍(完整代码都有注释,所以此文档重点介绍一些难理解的点)
|
||||
|
||||
### 1.1 Camera
|
||||
|
||||
此次RGB相机选用的是海康的面阵相机,相机型号为MV-CS050-10GC,关于相机的 用户手册可以去海康官网下载。此次一共用到三个相机。
|
||||
|
||||

|
||||
|
||||
一共三个相机,分别为图中标的 14、15 和 17,以传送带前进方向为正方向,17 为右 侧相机,14 为左侧相机,15 为顶部相机。因为三个相机,就得确定三个相机的连接顺序, 所以选择根据相机第四位ip来确定顺序,100为右侧相机,150为左侧相机,200为顶部相 机,以下为代码具体实现。
|
||||
|
||||
```c++
|
||||
switch (ip4)
|
||||
{
|
||||
case 100:
|
||||
MV_CC_CreateHandle(&camera_handle1, device_list.pDeviceInfo[i]);
|
||||
break;
|
||||
case 150:
|
||||
MV_CC_CreateHandle(&camera_handle, device_list.pDeviceInfo[i]);
|
||||
break;
|
||||
case 200:
|
||||
MV_CC_CreateHandle(&camera_handle2, device_list.pDeviceInfo[i]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
其余代码可参考海康相机调试软件MVS自带的开发指南,里面有完整的抓图程序以及 各个函数接口定义。路径为D:\MVS\Development\Documentations,具体图片如如所示。
|
||||
|
||||

|
||||
|
||||
光谱相机代码就当图一乐。如果有兴趣, 可以搜索.bil编排格式的光谱数据,即可理解数据筛选。
|
||||
|
||||
### 1.2 Thread
|
||||
|
||||
线程代码部分开头为三个RGB相机的回调函数,主要功能是相机传输图像的数据,代 码层面接受图像数据并处理,具体内容看海康相机的用户指南,里面有关于回调的详细解释。
|
||||
|
||||
此次项目一共开设了三个线程,分别为ProcessImg (处理光谱相机数据线程)、 RecvThread (接受python端返回的数据线程)和SendThread (给python端发送数据线程), 所有线程相关的代码都在各个线程类的Run函数内,因为线程在启动后,会执行一次他对 应Run函数,每个线程都写了 while (1)死循环,为的是让线程一直处于监听状态,一旦满 足处理要求就立马进行处理。线程开启代码在widget.cpp内,具体代码如下。
|
||||
|
||||
//开启线程也就是执行一次对应线程的**run()**函数在**thread**里面有 即执行三个线程的**while** **(1)***死循环*一直监听
|
||||
|
||||
```c++
|
||||
processimg->start();
|
||||
|
||||
sendthread->start();
|
||||
recvthread->start();
|
||||
```
|
||||
|
||||
|
||||
|
||||
发送和接收线程内,对于数据有对应的协议位,具体协议内容在python端,其中发送 线程内,对于发送的判断条件为什么是: topImgTQueue>15,因为从RGB相机第 一次触发到称重模块之间的果托数量正好是16,所以要再第16次触发后开始发送,这样 读取到的python返回值和读取到的称重数据就能对应上。发送线程为什么要数据对齐,因 为三个RGB相机在空间上是有错位的,而三个相机又是同时触发,所以相机的图片需要进 行数据对齐,既删除掉一些多余的图像。
|
||||
|
||||
其余代码都是常规代码,问ChatGPT就可以。
|
||||
|
||||
### 1.3 Widget
|
||||
|
||||
Widget主要是负责一些界面上的信号和函数,这部分重点应该是信号和槽函数的 connect函数的理解,可以自行写一些信号和槽函数的代码,这样可以更深入了解信号和 槽函数对应的关系。
|
||||
|
||||
Widget内涉及到两个协议,分别是跟机械手通讯的协议和跟PLC通讯的协议。
|
||||
|
||||
与机械手通讯采用Socket TCP/IP协议,Qt端做服务器,机械手做客户机,端口号为 21123,IP任意,Qt会监听本地指定端口号下的任意IP,通讯报文格式为 [X:0;Y:0;A:0;ATTR:0;ID:0;],ATTR后面是等级,ID后面是果类0是番茄1是百香果。
|
||||
|
||||
与PLC通讯采用Modbus TCP协议,端口号为2000,IP为192.168.101.110,从机地 址为1, Qt端做主站,PLC做从站,分为收跟发,Qt端会给PLC发送等级信息和编号信 息,Qt端会从PLC读取称重数据。跟PLC商量称重数据放在寄存器40001 上, PLC负责 写,Qt负责读取;编号放在寄存器40002,等级信息放在40003,4XXXX寄存器在PLC端是 16位的数据寄存器,所以所有读取格式都采用uint16_t,但代码中读、写的地址是40000 和40001,这是因为Modbus TCP协议读、写似乎是从指定寄存器地址的下一位地址开始 操作,验证过结果是对的,能正确读、写数据,但具体理论是否如我们假设的一样没去深 究。
|
||||
Loading…
Reference in New Issue
Block a user