GrabBag/Module/HandEyeCalib/Inc/IHandEyeCalib.h
2026-04-17 10:18:03 +08:00

66 lines
2.7 KiB
C++

#ifndef IHANDEYECALIB_H
#define IHANDEYECALIB_H
#include <vector>
#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<HECPoint3D>& eyePoints,
const std::vector<HECPoint3D>& robotPoints,
HECCalibResult& result) = 0;
virtual int CalculateRT(const std::vector<HECCalibPointPair>& 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<HECPoint3D>& eyePoints,
const std::vector<HECPoint3D>& robotPoints,
const HECCalibResult& calibResult) = 0;
virtual int CalculateEyeInHand(const std::vector<HECEyeInHandData>& calibData,
HECCalibResult& result) = 0;
virtual HECTCPCalibResult CalculateTCP(const HECTCPCalibData& data) = 0;
virtual int CalculateEyeToHandWithPose(const std::vector<HECEyeToHandData>& calibData,
HECCalibResult& result) = 0;
};
IHandEyeCalib* CreateHandEyeCalibInstance();
void DestroyHandEyeCalibInstance(IHandEyeCalib* instance);
#endif // IHANDEYECALIB_H