GrabBag/GrabBagApp/Presenter/Inc/GrabBagPresenter.h

108 lines
3.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef GRABBAGPRESENTER_H
#define GRABBAGPRESENTER_H
#include <condition_variable>
#include "IVrConfig.h"
#include "IVrEyeDevice.h"
#include "IYGrabBagStatus.h"
#include "RobotProtocol.h"
#include "VZNL_Types.h"
#include "SG_bagPositioning_Export.h"
#include "LaserDataLoader.h"
#include <QImage>
#include <QPainter>
#include <QColor>
class GrabBagPresenter
{
public:
GrabBagPresenter();
~GrabBagPresenter();
// 初始化
int Init();
// 设置状态回调
void SetStatusCallback(IYGrabBagStatus* status);
// 开始检测
int StartDetection(int cameraIndex = -1); // cameraIndex: -1表示所有相机0/1/2...表示特定相机
// 停止检测
int StopDetection();
// 加载调试数据进行检测
int LoadDebugDataAndDetect(const std::string& filePath);
IVrEyeDevice* GetEyeDevice(int index);
// 点云转图像
QImage _GeneratePointCloudImage(SVzNL3DLaserLine* scanData, int lineNum,
const std::vector<SSG_peakRgnInfo>& objOps);
private:
// 机械臂协议相关方法
int InitRobotProtocol();
// 算法初始化接口
int InitAlgorithmParams();
// 机械臂协议回调函数
void OnRobotConnectionChanged(bool connected);
bool OnRobotWorkSignal(bool startWork, int cameraIndex);
// 连接状态检查和更新
void CheckAndUpdateWorkStatus();
// 静态回调函数用于传递给SDK
static void _StaticCameraNotify(EVzDeviceWorkStatus eStatus, void* pExtData, unsigned int nDataLength, void* pInfoParam);
// 实例方法,处理回调
void _CameraNotify(EVzDeviceWorkStatus eStatus, void* pExtData, unsigned int nDataLength, void* pInfoParam);
// 检测数据回调函数
static void _StaticDetectionCallback(EVzResultDataType eDataType, SVzLaserLineData* pLaserLinePoint, void* pParam);
void _DetectionCallback(EVzResultDataType eDataType, SVzLaserLineData* pLaserLinePoint);
// 算法检测线程
void _AlgoDetectThread();
int _DetectTask();
// 释放缓存的检测数据
void _ClearDetectionDataCache();
// 发送检测结果给机械臂
void _SendDetectionResultToRobot(const std::vector<SSG_peakRgnInfo>& objOps);
private:
IVrConfig* m_vrConfig = nullptr;
std::vector<IVrEyeDevice*> m_vrEyeDeviceList;
IYGrabBagStatus* m_pStatus = nullptr;
RobotProtocol* m_pRobotProtocol = nullptr;
// 连接状态标志
bool m_bCameraConnected = false; // 相机连接状态
bool m_bRobotConnected = false; // 机械臂连接状态
WorkStatus m_currentWorkStatus = WorkStatus::Error; // 当前工作状态
std::atomic<bool> m_bAlgoDetectThreadRunning = false;
std::mutex m_algoDetectMutex;
std::condition_variable m_algoDetectCondition;
// 检测数据缓存 - 直接存储算法格式数据
std::vector<SVzNL3DLaserLine> m_detectionDataCache;
std::mutex m_detectionDataMutex;
// 算法参数成员变量
SG_bagPositionParam m_algoParam; // 算法参数
SSG_planeCalibPara m_planeCalibParam; // 平面校准参数
// 调试数据加载器
LaserDataLoader m_dataLoader;
};
#endif // GRABBAGPRESENTER_H