77 lines
3.4 KiB
C++
77 lines
3.4 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 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
|