CLookUpCalib.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. class __declspec(dllexport) CCTDCalib :
  12. public CCalib
  13. {
  14. enum CTDCalibType { useRotationCenter, NoUseRotationCenter };
  15. public:
  16. /**
  17. * @brief 构造函数,创建CCTDCalib对象
  18. *
  19. * @param id 标定的唯一标识符,用于区分不同的标定任务
  20. * @param name 标定的名称,方便识别和管理标定任务
  21. */
  22. CCTDCalib(int id, std::string name);
  23. /**
  24. * @brief 析构函数,销毁CCTDCalib对象
  25. */
  26. ~CCTDCalib() {}
  27. /**
  28. * @brief 设置上视相机对象
  29. *
  30. * @param camera 指向CCameraBase类型的相机对象指针,用于后续的拍照操作
  31. */
  32. void SetLookUpCamera(CCameraBase* camera) { m_pLookUpCamera = camera; }
  33. //旋转中心变化,重新更新相机到吸嘴间的距离
  34. void UpdateCameraToHead(XY_DOUBLE_STRUCT rotCenter, XY_DOUBLE_STRUCT& cameraToHead);
  35. //没有旋转中心标定,直接用上视相机拍照吸嘴位置
  36. LONG HeadActualPosCalib(int nozzleTemp);
  37. //计算相机到吸嘴距离
  38. void CalCameraToHead();
  39. /**
  40. * @brief 开始标定操作
  41. *
  42. * 该函数会执行一系列的操作,包括相机拍照、视觉定位、轴移动等,
  43. * 最终计算出头部到相机的相对位置,并将结果保存到标定参数中。
  44. *
  45. * @return int 标定操作的结果,成功返回OK,失败返回相应的错误码
  46. */
  47. int CameraPosCalib();
  48. /**
  49. * @brief 设置标定参数
  50. *
  51. * 将当前的标定参数保存到数据库中,以便后续使用。
  52. */
  53. virtual void SetParam() override;
  54. /**
  55. * @brief 获取标定参数
  56. *
  57. * 从数据库中读取之前保存的标定参数,更新到当前对象的标定参数结构体中。
  58. */
  59. virtual LONG GetParam() override;
  60. /**
  61. * @brief 获取头部到相机的位置
  62. *
  63. * 根据传入的头部位置和之前标定得到的头部到相机的相对位置,
  64. * 计算并返回头部到相机的位置。
  65. *
  66. * @param headPos 头部的位置
  67. * @return XY_DOUBLE_STRUCT 头部到相机的位置
  68. */
  69. XY_DOUBLE_STRUCT GetHeadToCameraPos(XY_DOUBLE_STRUCT headPos);
  70. /**
  71. * @brief 获取相机到头部的位置
  72. *
  73. * 根据传入的相机位置和之前标定得到的头部到相机的相对位置,
  74. * 计算并返回相机到头部的位置。
  75. *
  76. * @param cameraPos 相机的位置
  77. * @return XY_DOUBLE_STRUCT 相机到头部的位置
  78. */
  79. XY_DOUBLE_STRUCT GetCameraToHeadPos(XY_DOUBLE_STRUCT cameraPos);
  80. //保存当前标定所使用的数据
  81. void SetLookUpTempID(int lookUpTemp) {
  82. m_stParam.m_nLookUpTempID = lookUpTemp;
  83. SetParam();
  84. }
  85. void SetHeadTempID(int tempID) {
  86. m_stParam.m_nBondTempID = tempID;
  87. SetParam();
  88. }
  89. void SetNozzleTempID(int temp) {
  90. m_stParam.m_nTipTempID = temp;
  91. SetParam();
  92. }
  93. void SetXYCalib(CXYCalib* HeadXYcalib,CXYCalib* lookupXYCalib) {
  94. m_pHeadCameraXYCalib = HeadXYcalib;
  95. m_pLookUpXYCalib = lookupXYCalib;
  96. }
  97. LONG MoveToCameraCalibPos();
  98. LONG MoveToHeadCalibPos();
  99. private:
  100. // 标定的查找参数结构体,用于存储标定过程中的各种参数和结果
  101. CALIB_LOOKUP m_stParam;
  102. // 上视相机对象指针,用于进行拍照操作
  103. CCameraBase* m_pLookUpCamera = nullptr;
  104. CXYCalib* m_pHeadCameraXYCalib = nullptr;
  105. CXYCalib* m_pLookUpXYCalib = nullptr;
  106. };