#pragma once #include "CCalib.h" #include "ILocalizationManager.h" #include "ICalibration.h" /* CTD:Camera Tip Distance 1、放置玻璃片在上视相机上方 2、保证已完成旋转中心标定。已经调用过SetHeadActualPos 3、调用StartCalib开始标定 */ class __declspec(dllexport) CCTDCalib : public CCalib { enum CTDCalibType { useRotationCenter, NoUseRotationCenter }; public: /** * @brief 构造函数,创建CCTDCalib对象 * * @param id 标定的唯一标识符,用于区分不同的标定任务 * @param name 标定的名称,方便识别和管理标定任务 */ CCTDCalib(int id, std::string name); /** * @brief 析构函数,销毁CCTDCalib对象 */ ~CCTDCalib() {} /** * @brief 设置上视相机对象 * * @param camera 指向CCameraBase类型的相机对象指针,用于后续的拍照操作 */ void SetLookUpCamera(CCameraBase* camera) { m_pLookUpCamera = camera; } //旋转中心变化,重新更新相机到吸嘴间的距离 void UpdateCameraToHead(XY_DOUBLE_STRUCT rotCenter, XY_DOUBLE_STRUCT& cameraToHead); //没有旋转中心标定,直接用上视相机拍照吸嘴位置 LONG HeadActualPosCalib(int nozzleTemp); //计算相机到吸嘴距离 void CalCameraToHead(); /** * @brief 开始标定操作 * * 该函数会执行一系列的操作,包括相机拍照、视觉定位、轴移动等, * 最终计算出头部到相机的相对位置,并将结果保存到标定参数中。 * * @return int 标定操作的结果,成功返回OK,失败返回相应的错误码 */ int CameraPosCalib(); /** * @brief 设置标定参数 * * 将当前的标定参数保存到数据库中,以便后续使用。 */ virtual void SetParam() override; /** * @brief 获取标定参数 * * 从数据库中读取之前保存的标定参数,更新到当前对象的标定参数结构体中。 */ virtual LONG GetParam() override; /** * @brief 获取头部到相机的位置 * * 根据传入的头部位置和之前标定得到的头部到相机的相对位置, * 计算并返回头部到相机的位置。 * * @param headPos 头部的位置 * @return XY_DOUBLE_STRUCT 头部到相机的位置 */ XY_DOUBLE_STRUCT GetHeadToCameraPos(XY_DOUBLE_STRUCT headPos); /** * @brief 获取相机到头部的位置 * * 根据传入的相机位置和之前标定得到的头部到相机的相对位置, * 计算并返回相机到头部的位置。 * * @param cameraPos 相机的位置 * @return XY_DOUBLE_STRUCT 相机到头部的位置 */ XY_DOUBLE_STRUCT GetCameraToHeadPos(XY_DOUBLE_STRUCT cameraPos); //保存当前标定所使用的数据 void SetLookUpTempID(int lookUpTemp) { m_stParam.m_nLookUpTempID = lookUpTemp; SetParam(); } void SetHeadTempID(int tempID) { m_stParam.m_nBondTempID = tempID; SetParam(); } void SetNozzleTempID(int temp) { m_stParam.m_nTipTempID = temp; SetParam(); } void SetXYCalib(CXYCalib* HeadXYcalib,CXYCalib* lookupXYCalib) { m_pHeadCameraXYCalib = HeadXYcalib; m_pLookUpXYCalib = lookupXYCalib; } LONG MoveToCameraCalibPos(); LONG MoveToHeadCalibPos(); private: // 标定的查找参数结构体,用于存储标定过程中的各种参数和结果 CALIB_LOOKUP m_stParam; // 上视相机对象指针,用于进行拍照操作 CCameraBase* m_pLookUpCamera = nullptr; CXYCalib* m_pHeadCameraXYCalib = nullptr; CXYCalib* m_pLookUpXYCalib = nullptr; };