GrabBag/Module/HandEyeCalib/Inc/IHandEyeCalib.h
2026-04-27 16:06:57 +08:00

77 lines
3.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 int CalculateEyeInHandWithPose(const std::vector<HECEyeInHandPoseData>& 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<HECEyeToHandData>& calibData,
HECCalibResult& result) = 0;
};
IHandEyeCalib* CreateHandEyeCalibInstance();
void DestroyHandEyeCalibInstance(IHandEyeCalib* instance);
#endif // IHANDEYECALIB_H