重构手眼标定矩阵加载逻辑
This commit is contained in:
parent
ba586bf2ee
commit
64e403a11a
@ -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());
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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() {
|
||||
|
||||
26
VrConfig/config/EyeHandCalibMatrixInfo.ini
Normal file
26
VrConfig/config/EyeHandCalibMatrixInfo.ini
Normal file
@ -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
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user