#ifndef IHANDEYECALIB_H #define IHANDEYECALIB_H #include #include "HandEyeCalib_global.h" #include "HandEyeCalibTypes.h" // Public hand-eye calibration interface used by apps and tools in this repo. // Keep this surface focused on workflows that are actually consumed. class IHandEyeCalib { public: virtual ~IHandEyeCalib() = default; virtual int CalculateRT(const std::vector& eyePoints, const std::vector& robotPoints, HECCalibResult& result) = 0; virtual int CalculateRT(const std::vector& pointPairs, HECCalibResult& result) = 0; virtual void TransformPoint(const HECRotationMatrix& R, const HECTranslationVector& T, const HECPoint3D& srcPoint, HECPoint3D& dstPoint) = 0; virtual void RotatePoint(const HECRotationMatrix& R, const HECPoint3D& srcPoint, HECPoint3D& dstPoint) = 0; virtual void RotationMatrixToEuler(const HECRotationMatrix& R, HECEulerOrder order, HECEulerAngles& angles) = 0; virtual void EulerToRotationMatrix(const HECEulerAngles& angles, HECEulerOrder order, HECRotationMatrix& R) = 0; virtual bool TransformPose(const HECCalibResult& calibResult, const HECPoint3D& eyeCenter, const HECPoint3D& longAxisDir, const HECPoint3D& normalDir, int dirVectorInvert, HECEulerOrder eulerOrder, HECLongAxisDir longAxisMapping, HECPoseResult& poseResult) = 0; virtual double CalculateError(const std::vector& eyePoints, const std::vector& robotPoints, const HECCalibResult& calibResult) = 0; virtual int CalculateEyeInHand(const std::vector& calibData, HECCalibResult& result) = 0; virtual int CalculateEyeInHandWithPose(const std::vector& calibData, HECCalibResult& result) = 0; // 将旋转矩阵安全地转换为指定顺序的欧拉角(带万向节锁处理和帧间连续性修正) // order: 目标欧拉角旋转顺序 // prevAngles: 上一帧输出的角度指针,传入则启用帧间连续性修正,传nullptr则不修正 virtual void RotationMatrixToEulerZYXSafe(const HECRotationMatrix& R, HECEulerOrder order, const HECEulerAngles* prevAngles, HECEulerAngles& angles) = 0; virtual HECTCPCalibResult CalculateTCP(const HECTCPCalibData& data) = 0; virtual int CalculateEyeToHandWithPose(const std::vector& calibData, HECCalibResult& result) = 0; }; IHandEyeCalib* CreateHandEyeCalibInstance(); void DestroyHandEyeCalibInstance(IHandEyeCalib* instance); #endif // IHANDEYECALIB_H