diff --git a/GrabBagApp/Presenter/Src/GrabBagPresenter.cpp b/GrabBagApp/Presenter/Src/GrabBagPresenter.cpp index d23cc21..f5c1f66 100644 --- a/GrabBagApp/Presenter/Src/GrabBagPresenter.cpp +++ b/GrabBagApp/Presenter/Src/GrabBagPresenter.cpp @@ -296,16 +296,27 @@ int GrabBagPresenter::InitAlgorithmParams() // 获取手眼标定文件路径并确保文件存在 QString clibPath = PathManager::GetCalibrationFilePath(); - LOG_INFO("Loading hand-eye calibration matrix from: %s\n", clibPath.toStdString().c_str()); + LOG_INFO("Loading hand-eye matrix : %s\n", clibPath.toStdString().c_str()); if(QFile::exists(clibPath)) { - CVrConvert::LoadClibMatrix(clibPath.toStdString().c_str(), "clib", m_clibMatrix); + CVrConvert::LoadClibMatrix(clibPath.toStdString().c_str(), "CalibMatrixInfo_0", "dCalibMatrix", m_clibMatrix); + } + + // 输出手眼标定矩阵 m_clibMatrix 的内容 + QString clibMatrixStr; + LOG_INFO("clibMatrixStr: \n"); + for (int i = 0; i < 4; ++i) { + clibMatrixStr.clear(); + for (int j = 0; j < 4; ++j) { + clibMatrixStr += QString::asprintf("%8.4f ", m_clibMatrix[i * 4 + j]); + } + LOG_INFO(" %s\n", clibMatrixStr.toStdString().c_str()); } // 获取配置文件路径 QString configPath = PathManager::GetConfigFilePath(); - LOG_INFO("Loading configuration from: %s\n", configPath.toStdString().c_str()); + LOG_INFO("Loading config: %s\n", configPath.toStdString().c_str()); // 读取配置文件 ConfigResult configResult = m_vrConfig->LoadConfig(configPath.toStdString()); diff --git a/GrabBagApp/Utils/Src/PathManager.cpp b/GrabBagApp/Utils/Src/PathManager.cpp index d057bd5..d2be79e 100644 --- a/GrabBagApp/Utils/Src/PathManager.cpp +++ b/GrabBagApp/Utils/Src/PathManager.cpp @@ -17,7 +17,7 @@ QString PathManager::GetCalibrationFilePath() { // 确保目标目录存在 EnsureConfigDirectoryExists(); - return GetAppConfigDirectory() + "/clib.ini"; + return GetAppConfigDirectory() + "/EyeHandCalibMatrixInfo.ini"; } QString PathManager::GetAppConfigDirectory() @@ -38,7 +38,6 @@ bool PathManager::EnsureConfigDirectoryExists() QString configDir = GetAppConfigDirectory(); if (QDir().exists(configDir)) { - LOG_DEBUG("Configuration directory already exists: %s\n", configDir.toStdString().c_str()); return true; } diff --git a/GrabBagApp/Version.h b/GrabBagApp/Version.h index acefee7..4773729 100644 --- a/GrabBagApp/Version.h +++ b/GrabBagApp/Version.h @@ -3,8 +3,8 @@ #define GRABBAG_VERSION_STRING "1.0.1" -#define GRABBAG_BUILD_STRING "3" -#define GRABBAG_FULL_VERSION_STRING "V1.0.1_3" +#define GRABBAG_BUILD_STRING "4" +#define GRABBAG_FULL_VERSION_STRING "V1.0.1_4" // 获取版本信息的便捷函数 inline const char* GetGrabBagVersion() { diff --git a/VrConfig/config/EyeHandCalibMatrixInfo.ini b/VrConfig/config/EyeHandCalibMatrixInfo.ini new file mode 100644 index 0000000..6e4c153 --- /dev/null +++ b/VrConfig/config/EyeHandCalibMatrixInfo.ini @@ -0,0 +1,26 @@ +[CommInfo] +nMaxMatrixNum=8 +nExistMatrixNum=1 + +[CalibMatrixInfo_0] +nCalibPosIdx=0 +eCalibType=0 +eCalibMode=0 +sCalibPosName=0 +sCalibTime=2025-06-26-12-11-47 +dCalibMatrix_0=-0.6465967149138568 +dCalibMatrix_1=0.761458743338502 +dCalibMatrix_2=0.04575227268627502 +dCalibMatrix_3=759.0215603044383 +dCalibMatrix_4=0.7621532947207551 +dCalibMatrix_5=0.6473879189067671 +dCalibMatrix_6=-0.0033522827841527825 +dCalibMatrix_7=-403.08726353855 +dCalibMatrix_8=-0.03217209363575841 +dCalibMatrix_9=0.03270267033311197 +dCalibMatrix_10=-0.9989471916693979 +dCalibMatrix_11=801.5996530934686 +dCalibMatrix_12=0 +dCalibMatrix_13=0 +dCalibMatrix_14=0 +dCalibMatrix_15=1 diff --git a/VrEyeDevice/Inc/VrConvert.h b/VrEyeDevice/Inc/VrConvert.h index 393f793..d4294de 100644 --- a/VrEyeDevice/Inc/VrConvert.h +++ b/VrEyeDevice/Inc/VrConvert.h @@ -8,10 +8,10 @@ std::ostream& operator<<(std::ostream& os, const SVzNL3DPoint& sPoint); namespace CVrConvert { // 加载矩阵 - bool LoadClibMatrix(const char* sFileName, const char* sIdent, double dMatrix[16]); + bool LoadClibMatrix(const char* sFileName, const char* sIdent, const char* sKey, double dMatrix[16]); // 存储矩阵 - bool SaveClibMatrix(const char* sFileName, const char* sIdent, double dMatrix[16]); + bool SaveClibMatrix(const char* sFileName, const char* sIdent, const char* sKey, double dMatrix[16]); // 手眼标定 bool CalibEyeToRobot(SVzNL3DPoint* pEye3DPoint, SVzNL3DPoint* pRobot3DPoint, const int nNum); diff --git a/VrEyeDevice/Src/VrConvert.cpp b/VrEyeDevice/Src/VrConvert.cpp index 02ea7f1..ba3cef7 100644 --- a/VrEyeDevice/Src/VrConvert.cpp +++ b/VrEyeDevice/Src/VrConvert.cpp @@ -14,46 +14,47 @@ std::ostream& operator<<(std::ostream& os, const SVzNL3DPoint& sPoint) return os; } -bool CVrConvert::LoadClibMatrix(const char* sFileName, const char* sIdent, double dMatrix[16]) +bool CVrConvert::LoadClibMatrix(const char* sFileName, const char* sIdent, const char* sKey, double dMatrix[16]) { // 读取配置文件 CSimpleIniA ini; // 加载文件并解析 SI_Error rc = ini.LoadFile(sFileName); + LOG_INFO("LoadClibMatrix: %s\n", sFileName); if(SI_OK != rc) return false; for(int i = 0 ; i < 16; i++) { - char sKey[64] = {0}; + char sTmpKey[64] = {0}; #ifdef _WIN32 - sprintf_s(sKey, "%s_%d", sIdent, i); + sprintf_s(sTmpKey, "%s_%d", sKey, i); #else - sprintf(sKey, "%s_%d", sIdent, i); + sprintf(sTmpKey, "%s_%d", sKey, i); #endif - dMatrix[i] = ini.GetDoubleValue(sIdent, sKey, i % 5 == 0 ? 1 : 0); + dMatrix[i] = ini.GetDoubleValue(sIdent, sTmpKey, i % 5 == 0 ? 1 : 0); } return true; } // 存储矩阵 -bool CVrConvert::SaveClibMatrix(const char* sFileName, const char* sIdent, double dMatrix[16]) +bool CVrConvert::SaveClibMatrix(const char* sFileName, const char* sIdent, const char* sKey, double dMatrix[16]) { CSimpleIniA ini; - SI_Error rc = ini.LoadFile(sFileName); + SI_Error rc = ini.LoadFile(sFileName); if (rc != SI_OK) return false; for(int i = 0 ; i < 16; i++) { - char sKey[64] = {0}; + char sTmpKey[64] = {0}; #ifdef _WIN32 - sprintf_s(sKey, "%s_%d", sIdent, i); + sprintf_s(sTmpKey, "%s_%s_%d", sIdent, sKey, i); #else - sprintf(sKey, "%s_%d", sIdent, i); + sprintf(sTmpKey, "%s_%s_%d", sIdent, sKey, i); #endif - ini.SetDoubleValue(sIdent, sKey, dMatrix[i]); + ini.SetDoubleValue(sIdent, sTmpKey, dMatrix[i]); } ini.SaveFile(sFileName); return true;