CLookUpCalib.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #pragma once
  2. #include "CCalib.h"
  3. #include "ILocalizationManager.h"
  4. #include "ICalibration.h"
  5. /*
  6. CTD:Camera Tip Distance
  7. 1、放置玻璃片在上视相机上方
  8. 2、保证已完成旋转中心标定。已经调用过SetHeadActualPos
  9. 3、调用StartCalib开始标定
  10. */
  11. struct CALIB_LOOKUP_PARAM
  12. {
  13. //bool m_bHaveHeadPos = false;//已完成旋转中心标定
  14. double dCameraPosX = 0;; //下视标定时X位置
  15. double dCameraPosY = 0; //下视标定时Y位置
  16. double dCameraPosZ = 0; //下视标定时Z位置
  17. double dHeadPosX = 0; //头位置X
  18. double dHeadPosY = 0; //头位置Y
  19. double dHeadPosZ = 0; //头位置Z
  20. double dCameraToHeadPosX = 0; //相机移动到头的相对位置
  21. double dCameraToHeadPosY = 0; //
  22. double dHeadActualPosX = -1;
  23. double dHeadActualPosY = -1;
  24. double dCameraActualPosX = -1; //标定相机和上视相机对准时,绑头获取的位置
  25. double dCameraActualPosY = -1; //标定相机和上视相机对准时,绑头获取的位置
  26. int nBondTempID = 0; //绑头相机拍Mark点模板ID
  27. int nLookUpTempID = 0; //上视相机拍Mark点模板ID
  28. int nTipTempID = 0; //上视相机拍吸嘴模板
  29. };
  30. class __declspec(dllexport) CCTDCalib :
  31. public CCalib
  32. {
  33. enum CTDCalibType { useRotationCenter, NoUseRotationCenter };
  34. public:
  35. /**
  36. * @brief 构造函数,创建CCTDCalib对象
  37. *
  38. * @param id 标定的唯一标识符,用于区分不同的标定任务
  39. * @param name 标定的名称,方便识别和管理标定任务
  40. */
  41. CCTDCalib(int id, std::string name);
  42. /**
  43. * @brief 析构函数,销毁CCTDCalib对象
  44. */
  45. ~CCTDCalib() {}
  46. /**
  47. * @brief 设置上视相机对象
  48. *
  49. * @param camera 指向CCameraBase类型的相机对象指针,用于后续的拍照操作
  50. */
  51. void SetLookUpCamera(CCameraBase* camera) { m_pLookUpCamera = camera; }
  52. //旋转中心变化,重新更新相机到吸嘴间的距离
  53. void UpdateCameraToHead(XY_DOUBLE_STRUCT rotCenter, XY_DOUBLE_STRUCT& cameraToHead);
  54. //没有旋转中心标定,直接用上视相机拍照吸嘴位置
  55. LONG HeadActualPosCalib(int nozzleTemp);
  56. //计算相机到吸嘴距离
  57. void CalCameraToHead();
  58. /**
  59. * @brief 开始标定操作
  60. *
  61. * 该函数会执行一系列的操作,包括相机拍照、视觉定位、轴移动等,
  62. * 最终计算出头部到相机的相对位置,并将结果保存到标定参数中。
  63. *
  64. * @return int 标定操作的结果,成功返回OK,失败返回相应的错误码
  65. */
  66. int CameraPosCalib();
  67. /**
  68. * @brief 设置标定参数
  69. *
  70. * 将当前的标定参数保存到数据库中,以便后续使用。
  71. */
  72. virtual void SetParam() override;
  73. /**
  74. * @brief 获取标定参数
  75. *
  76. * 从数据库中读取之前保存的标定参数,更新到当前对象的标定参数结构体中。
  77. */
  78. virtual LONG GetParam() override;
  79. /**
  80. * @brief 获取头部到相机的位置
  81. *
  82. * 根据传入的头部位置和之前标定得到的头部到相机的相对位置,
  83. * 计算并返回头部到相机的位置。
  84. *
  85. * @param headPos 头部的位置
  86. * @return XY_DOUBLE_STRUCT 头部到相机的位置
  87. */
  88. XY_DOUBLE_STRUCT GetHeadToCameraPos(XY_DOUBLE_STRUCT headPos);
  89. /**
  90. * @brief 获取相机到头部的位置
  91. *
  92. * 根据传入的相机位置和之前标定得到的头部到相机的相对位置,
  93. * 计算并返回相机到头部的位置。
  94. *
  95. * @param cameraPos 相机的位置
  96. * @return XY_DOUBLE_STRUCT 相机到头部的位置
  97. */
  98. XY_DOUBLE_STRUCT GetCameraToHeadPos(XY_DOUBLE_STRUCT cameraPos);
  99. //保存当前标定所使用的数据
  100. void SetLookUpTempID(int lookUpTemp) {
  101. m_stLookUpParam.nLookUpTempID = lookUpTemp;
  102. SetParam();
  103. }
  104. void SetHeadTempID(int tempID) {
  105. m_stLookUpParam.nBondTempID = tempID;
  106. SetParam();
  107. }
  108. void SetNozzleTempID(int temp) {
  109. m_stLookUpParam.nTipTempID = temp;
  110. SetParam();
  111. }
  112. void SetXYCalib(CXYCalib* HeadXYcalib,CXYCalib* lookupXYCalib) {
  113. m_pHeadCameraXYCalib = HeadXYcalib;
  114. m_pLookUpXYCalib = lookupXYCalib;
  115. }
  116. LONG MoveToCameraCalibPos();
  117. LONG MoveToHeadCalibPos();
  118. private:
  119. void DataChangNotice(string strDbName, string strTableName);
  120. private:
  121. // 标定的查找参数结构体,用于存储标定过程中的各种参数和结果
  122. //CALIB_LOOKUP m_stParam;
  123. std::vector<MODULE_CONFIG_STRUCT> m_vecConfigStruct;
  124. CALIB_LOOKUP_PARAM m_stLookUpParam;
  125. // 上视相机对象指针,用于进行拍照操作
  126. CCameraBase* m_pLookUpCamera = nullptr;
  127. CXYCalib* m_pHeadCameraXYCalib = nullptr;
  128. CXYCalib* m_pLookUpXYCalib = nullptr;
  129. };