个人项目:QT应用程序,目标检测+机械臂抓取(附下载链接)

视觉机械臂抓取应用程序

点我下载此资源》》》》》》》》》》》》

需求分析

在这里插入图片描述

    软件目标:通过摄像头对目标物体进行检测,控制机械臂完成抓取或实时渲染仿真机械臂抓取以及相关信息

    功能需求:
            视觉模块:通过OpenCV打开摄像头读取视频帧保存并渲染至QLabel上

            机械臂控制模块:接收并转换检测坐标,发送机械臂控制指令

            通信模块:通过通信协议(具体看机械臂支持)实现与机械臂的连接。定义相关指令,根据指令数据完成机械臂控制

            应用程序界面:
                    ①视频窗口显示
                    ②上位机控制,提供虚拟机械臂渲染按钮弹出渲染子窗口

    其他需求:
            日志数据模块:读取记录各个模块的重要数据信息,提供对应接口显示在上位机信息窗口

            多线程设计:
                    视觉模块线程独立运行,如果开始检测则要与机械臂控制线程同步。

                    通信模块需要异步运行,持续与机械臂保持通信

                    虚拟渲染线程如果有机械臂连接则要状态同步

概要设计

在这里插入图片描述

主应用窗口分为画面显示和上位机两个子窗口。仿真系统虚拟机械臂渲染作为子窗口可选择

    数据结构:
            抓取目标数据结构(struct GraspTarget):包含物体的位置、大小、形状等信息。

            机械臂状态结构(ArmStatus):记录机械臂的关节位置、状态(空闲/忙碌)、当前动作等信息。

            图像帧数据结构(struct ImageFrame):存储从摄像头获取的图像帧、处理后的图像数据。

            通信协议结构(struct CommunicationPacket):描述上位机与机械臂之间通信时使用的消息格式

            日志记录数据结构 (LogEntry)

在这里插入图片描述

各个模块通过这些数据结构进行流通

在这里插入图片描述

详细设计

TODO:二级结构图对应的功能流程图

视觉模块

视觉模块主要读取摄像头的图像帧并保存,如果需要检测则处理图像帧
在这里插入图片描述
在这里插入图片描述

功能开发

TODO:

视觉模块(Vision类实现)

    属性:
            使用OpenCV打开摄像头并保存图像帧
            
            循环缓冲区类FrameBuffer:通过双端队列实现,用于存储一段时间的图像帧

    方法:

测试

维护与扩展

单例模式(Singleton Pattern):
日志类使用饿汉式。简单直接,而且线程安全。在应用程序启动时就可靠地存在的情况下,饿汉式可以保证在多线程环境下的安全性,避免了多线程竞争条件的处理。

工厂模式(Factory Pattern):
可以用于创建不同的对象,例如基于虚拟机械臂或现实机械臂的控制器对象。根据不同的硬件状态(是否连接到真实机械臂),工厂模式可以动态创建正确的控制器对象。

观察者模式(Observer Pattern):
适合用于机械臂状态变化的通知。你的系统可能需要多个模块同时接收机械臂状态的变化,例如视觉模块需要知道抓取是否成功,应用程序界面也需要同步显示信息。

策略模式(Strategy Pattern):
可以在抓取策略或目标检测算法的切换上应用。不同类型的物体可能需要不同的检测或抓取策略,策略模式可以让你灵活切换这些算法而不影响系统的其他部分。

生产者-消费者模式:
你已经在解码和渲染数据同步中使用了这种模式,它同样适用于在抓取任务中不同模块间的数据流,如视觉模块与机械臂控制模块的协调。

适配器模式(Adapter Pattern):
当你需要将不同的硬件接口(虚拟和真实机械臂)整合到统一的接口中时,可以使用适配器模式,确保系统使用相同的接口与不同的机械臂进行通信。

视觉机械臂抓取应用程序

架构设计

1. 硬件设计

  • 机械臂

  • 摄像头

  • 计算单元:

    • PC系统-图像处理、路径规划和控制算法
    • 通信接口(主要):需要通信接口(如GPIO、UART、USB、Ethernet于连接控制器、传感器和机械臂的各个模块

2. 固件设计(次要)厂商提供

  • 固件主要负责硬件的底层控制和初始化:机械臂控制固件:负责机械臂电机的精确控制,包括关节的运动、转动角度的校准等。
  • 传感器驱动程序:摄像头、深度传感器和力传感器的驱动程序,用于获取传感器数据并与上层软件进行交互。固件通常存储在控制板上,确保传感器能通过标准协议(如 I2C、SPI、Ethernet)与系统通信。
  • 实时系统固件:如果需要实时操作(例如抓取高动态物体),可以考虑使用实时操作系统(RTOS)来管理任务调度、传感器数据采集和机械臂控制。

3. 软件设计(主要)

负责抓取任务的高层逻辑实现。主要功能包括视觉处理、路径规划、控制算法以及用户交互。

  • 视觉处理模块:
    • 使用 OpenCV、 PyTorch 来进行图像处理和物体检测,实现物体分类、定位、姿态估计等功能。
  • 用户界面(UI)
    • 上位机开发:通过 Qt来设计控制界面,用户通过界面输入任务、观察抓取过程,或手动控制机械臂。
    • 通信模块:负责摄像头、机械臂、控制单元之间的数据通信。可以通过 TCP/IP 或 UDP 实现不同设备之间的数据交互。

项目结构

    1. 摄像头读取和目标检测—Camera 类(摄像头)、ObjectDetector 类(目标检测)
      • 通过 OpenCV 轻松捕获摄像头图像流,并进行预处理(如图像缩放、颜色转换等)
      • 目标检测算法:直接作为模块部署
    1. 机械臂监控与控制—RobotArmController 类(械臂的通信和控制)
      • 通信接口:使用 Qt 的 QSerialPort、QTcpSocket 等类进行通信机械臂的状态监控:接收机械臂的传感器数据或状态反馈,实时显示在上位机界面上 Qt 的 QCustomPlot 或 QTableWidget 实现图形化展示机械臂的位置信息、速度等参数。

      • 运动控制:定义命令集(如移动到指定位置、抓取物体等),将其通过信号与槽机制发送到控制模块,然后通过通信接口下发给机械臂

    1. 虚拟机械臂集成–VirtualArmSimulator 类
      • 使用 OpenGL 或 Qt 3D 来创建一个机械臂的 3D 模型,并通过模拟的控制逻辑实现机械臂的虚拟操作。
    1. 项目集成和功能扩展–GraspingSystem 类(核心逻辑类,负责管理摄像头、目标检测和机械臂控制之间的交互)

      • 前端 (Qt GUI):
        摄像头实时监控区域。
        机械臂位置、状态信息显示。
        控制面板(控制机械臂移动、抓取等操作)。
        虚拟机械臂 3D 模拟。

      • 后端:

        目标检测模块:基于 OpenCV 和 YOLO 目标检测。
        
        机械臂控制模块:通过串口/TCP 与机械臂通信,发送控制命令。
        
        虚拟机械臂模块:通过 OpenGL/Qt 3D 渲染机械臂,模拟其运动。
        
        多线程处理:为了确保界面流畅、摄像头采集、目标检测和机械臂控制可以并行进行,可以使用 Qt 的 QThread 进行多线程处理,分离各个模块。
        
        数据记录与分析:抓取任务的执行结果可以通过日志记录保存,并且可以将数据存储到文件或数据库中,便于后续分析和优化。
        
    1. MainWindow 类 (Qt UI)–负责 GUI 的交互,显示摄像头图像、目标检测结果,并提供控制机械臂的按钮

项目开发

  • 日志相关

    qDebug():用于输出调试信息。
    qInfo():用于输出一般的日志信息。
    qWarning():用于输出警告信息。
    qCritical():用于输出严重错误信息。
    qFatal():用于输出致命错误信息,并会终止程序。
    可以将不同类型重定向
    
  • MainWindow 类 (Qt UI)–负责 GUI 的交互,显示摄像头图像、目标检测结果,并提供控制机械臂的按钮

      1. 摄像头读取和目标检测—Camera 类(摄像头)、ObjectDetector 类(目标检测)

        Camera 类:直接用QCamera实现
        ObjectDetector 类:

        基本功能:
            模型加载:从文件中加载预训练的目标检测模型
        
            图像预处理:将输入图像转换为模型可以接受的格式
        
            推理:将预处理后的图像输入模型,得到检测结果
        
            后处理:解析模型输出,筛选出置信度高的目标,并进行非极大值抑制 (NMS) 来去除重叠框
        
            绘制结果:将检测框绘制在原图上并显示/保存结果
        
      2. 机械臂监控与控制—RobotArmController 类(械臂的通信和控制)

      3. 虚拟机械臂集成–VirtualArmSimulator 类

      4. 项目集成和功能扩展–GraspingSystem 类(核心逻辑类,负责管理摄像头、目标检测和机械臂控制之间的交互)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐