205 lines
5.7 KiB
C++
205 lines
5.7 KiB
C++
#ifndef VRCONFIGCMD_H
|
|
#define VRCONFIGCMD_H
|
|
|
|
#include <string>
|
|
#include <cstring>
|
|
|
|
// 配置命令类型枚举
|
|
enum ConfigCmdType
|
|
{
|
|
CONFIG_CMD_UNKNOWN = 0,
|
|
CONFIG_CMD_CAMERA_EXPOSE, // 相机曝光设置
|
|
CONFIG_CMD_CAMERA_GAIN, // 相机增益设置
|
|
CONFIG_CMD_CAMERA_FRAMERATE, // 相机帧率设置
|
|
CONFIG_CMD_CAMERA_SWING, // 相机摆动参数设置
|
|
CONFIG_CMD_ALGO_PARAM, // 算法参数设置
|
|
CONFIG_CMD_CALIB_PARAM, // 标定参数设置
|
|
CONFIG_CMD_FULL_CONFIG, // 完整配置更新
|
|
CONFIG_CMD_SWITCH_WORKPOSITION, // 切换工作点
|
|
CONFIG_CMD_SWITCH_PACKAGETYPE, // 切换包裹类型
|
|
};
|
|
|
|
// 相机参数结构 (扩展支持UI中的所有参数)
|
|
struct CameraConfigParam
|
|
{
|
|
int cameraIndex; // 相机索引 (1或2, -1表示所有相机)
|
|
double exposeTime; // 曝光时间 (微秒)
|
|
double gain; // 增益值
|
|
double frameRate; // 帧率
|
|
double swingSpeed; // 摆动速度
|
|
double swingStartAngle; // 开始角度
|
|
double swingStopAngle; // 结束角度
|
|
|
|
CameraConfigParam() : cameraIndex(-1), exposeTime(0.0), gain(0.0),
|
|
frameRate(0.0), swingSpeed(0.0), swingStartAngle(0.0), swingStopAngle(0.0) {}
|
|
};
|
|
|
|
// ROI区域参数结构
|
|
struct ROIConfigParam
|
|
{
|
|
int cameraIndex; // 相机索引 (1或2, -1表示所有相机)
|
|
int x; // 起始X坐标
|
|
int y; // 起始Y坐标
|
|
int width; // 宽度
|
|
int height; // 高度
|
|
|
|
ROIConfigParam() : cameraIndex(-1), x(0), y(0), width(0), height(0) {}
|
|
};
|
|
|
|
// 算法参数结构
|
|
struct AlgoConfigParam
|
|
{
|
|
char paramName[64]; // 参数名称
|
|
double paramValue; // 参数值
|
|
|
|
AlgoConfigParam() : paramValue(0.0)
|
|
{
|
|
memset(paramName, 0, sizeof(paramName));
|
|
}
|
|
};
|
|
|
|
// 标定参数结构
|
|
struct CalibConfigParam
|
|
{
|
|
int cameraIndex; // 相机索引
|
|
double matrix[16]; // 4x4变换矩阵
|
|
|
|
CalibConfigParam() : cameraIndex(-1)
|
|
{
|
|
memset(matrix, 0, sizeof(matrix));
|
|
}
|
|
};
|
|
|
|
// 摆动参数结构
|
|
struct SwingConfigParam
|
|
{
|
|
int cameraIndex; // 相机索引
|
|
double swingSpeed; // 摆动速度
|
|
double startAngle; // 开始角度
|
|
double stopAngle; // 结束角度
|
|
|
|
SwingConfigParam() : cameraIndex(-1), swingSpeed(0.0), startAngle(0.0), stopAngle(0.0) {}
|
|
};
|
|
|
|
// 完整配置结构 (用于传输ConfigResult)
|
|
struct FullConfigParam
|
|
{
|
|
char configJson[4096]; // JSON格式的完整配置数据
|
|
|
|
FullConfigParam()
|
|
{
|
|
memset(configJson, 0, sizeof(configJson));
|
|
}
|
|
};
|
|
|
|
// 工作点切换参数结构
|
|
struct SwitchWorkPositionParam
|
|
{
|
|
char workPositionId[64]; // 工作点ID
|
|
|
|
SwitchWorkPositionParam()
|
|
{
|
|
memset(workPositionId, 0, sizeof(workPositionId));
|
|
}
|
|
};
|
|
|
|
// 包裹类型切换参数结构
|
|
struct SwitchPackageTypeParam
|
|
{
|
|
char packageTypeId[64]; // 包裹类型ID
|
|
|
|
SwitchPackageTypeParam()
|
|
{
|
|
memset(packageTypeId, 0, sizeof(packageTypeId));
|
|
}
|
|
};
|
|
|
|
// 配置命令数据结构
|
|
struct ConfigCmdData
|
|
{
|
|
ConfigCmdType cmdType; // 命令类型
|
|
char timestamp[32]; // 时间戳
|
|
|
|
union {
|
|
CameraConfigParam cameraParam;
|
|
ROIConfigParam roiParam;
|
|
AlgoConfigParam algoParam;
|
|
CalibConfigParam calibParam;
|
|
SwingConfigParam swingParam;
|
|
FullConfigParam fullConfigParam;
|
|
SwitchWorkPositionParam switchWorkPositionParam;
|
|
SwitchPackageTypeParam switchPackageTypeParam;
|
|
};
|
|
|
|
ConfigCmdData() : cmdType(CONFIG_CMD_UNKNOWN)
|
|
{
|
|
memset(timestamp, 0, sizeof(timestamp));
|
|
}
|
|
};
|
|
|
|
// 共享内存通信协议
|
|
struct ConfigCmdHeader
|
|
{
|
|
char magic[8]; // 魔数 "VRCFG001"
|
|
int version; // 版本号
|
|
int dataSize; // 数据大小
|
|
int checksum; // 校验和
|
|
bool hasNewData; // 是否有新数据
|
|
|
|
ConfigCmdHeader()
|
|
{
|
|
strcpy(magic, "VRCFG001");
|
|
version = 1;
|
|
dataSize = sizeof(ConfigCmdData);
|
|
checksum = 0;
|
|
hasNewData = false;
|
|
}
|
|
};
|
|
|
|
// 完整的共享内存数据结构
|
|
struct ConfigCmdSharedData
|
|
{
|
|
ConfigCmdHeader header;
|
|
ConfigCmdData data;
|
|
|
|
// 计算校验和
|
|
int CalculateChecksum() const
|
|
{
|
|
int sum = 0;
|
|
const char* ptr = reinterpret_cast<const char*>(&data);
|
|
for (size_t i = 0; i < sizeof(ConfigCmdData); ++i) {
|
|
sum += static_cast<unsigned char>(ptr[i]);
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
// 验证校验和
|
|
bool ValidateChecksum() const
|
|
{
|
|
return header.checksum == CalculateChecksum();
|
|
}
|
|
};
|
|
|
|
// 共享内存名称定义
|
|
#define CONFIG_CMD_SHARED_MEM_NAME "GrabBagConfigCmd"
|
|
#define CONFIG_CMD_SHARED_MEM_SIZE sizeof(ConfigCmdSharedData)
|
|
|
|
// 命令行参数解析函数声明
|
|
class ConfigCmdParser
|
|
{
|
|
public:
|
|
// 解析命令行参数
|
|
static bool ParseCommandLine(int argc, char* argv[], ConfigCmdData& configData);
|
|
|
|
// 解析具体的配置命令
|
|
static bool ParseCameraExpose(const std::string& param, ConfigCmdData& configData);
|
|
static bool ParseCameraGain(const std::string& param, ConfigCmdData& configData);
|
|
static bool ParseROISetting(const std::string& param, ConfigCmdData& configData);
|
|
static bool ParseAlgoParam(const std::string& param, ConfigCmdData& configData);
|
|
static bool ParseCalibParam(const std::string& param, ConfigCmdData& configData);
|
|
|
|
// 显示帮助信息
|
|
static void ShowHelp();
|
|
};
|
|
|
|
#endif // VRCONFIGCMD_H
|