6.0 KiB
6.0 KiB
编织袋配置管理系统使用示例
系统架构概述
新的配置管理系统采用了分离式的架构设计:
- ConfigManager: 专门的配置管理类,负责共享内存监听和配置状态管理
- GrabBagPresenter: 业务逻辑处理器,实现配置变化监听接口,应用配置到实际设备
- ConfigCmdParser: 命令行工具,负责解析命令并发送到共享内存
支持的配置参数
重要说明:配置命令现在使用空格分隔的参数格式,不再支持旧的连写格式。
1. 相机曝光设置
# 设置所有相机曝光时间为100微秒
./grabbag -c expose 100
# 设置相机1的曝光时间为150微秒
./grabbag -c expose 1 150
2. 相机增益设置
# 设置所有相机增益为2.5
./grabbag -c gain 2.5
# 设置相机2的增益为3.0
./grabbag -c gain 2 3.0
3. 相机帧率设置
# 设置所有相机帧率为30fps
./grabbag -c framerate 30
# 设置相机1的帧率为25fps
./grabbag -c framerate 1 25
4. 相机摆动参数设置
# 设置所有相机摆动:速度10,角度0-180度
./grabbag -c swing 10 0 180
# 设置相机1摆动:速度15,角度-45到45度
./grabbag -c swing 1 15 -45 45
5. ROI区域设置
# 设置所有相机ROI区域:x=100, y=200, width=300, height=400
./grabbag -c roi 100 200 300 400
# 设置相机2的ROI区域
./grabbag -c roi 2 100 200 300 400
6. 算法参数设置
# 设置算法阈值参数
./grabbag -c algo threshold 0.5
# 设置算法窗口大小参数
./grabbag -c algo windowSize 10
配置变化监听机制
监听器接口
class IConfigChangeListener
{
public:
// 系统配置整体变化
virtual void OnSystemConfigChanged(const SystemConfig& config) = 0;
// 相机参数变化
virtual void OnCameraParamChanged(int cameraIndex, const CameraUIParam& cameraParam) = 0;
// 算法参数变化
virtual void OnAlgorithmParamChanged(const VrAlgorithmParams& algorithmParams) = 0;
};
注册监听器
// 在您的类中实现IConfigChangeListener接口
class MyConfigListener : public IConfigChangeListener
{
public:
void OnSystemConfigChanged(const SystemConfig& config) override {
// 处理系统配置变化
}
void OnCameraParamChanged(int cameraIndex, const CameraUIParam& cameraParam) override {
// 处理相机参数变化
}
void OnAlgorithmParamChanged(const VrAlgorithmParams& algorithmParams) override {
// 处理算法参数变化
}
};
// 注册监听器
ConfigManager* configManager = presenter->GetConfigManager();
auto listener = std::make_shared<MyConfigListener>();
configManager->AddConfigChangeListener(listener);
配置数据访问
获取当前配置
ConfigManager* configManager = presenter->GetConfigManager();
// 获取完整系统配置
SystemConfig config = configManager->GetConfig();
// 获取指定相机的UI参数
CameraUIParam cameraParam = configManager->GetCameraUIParam(1);
// 获取算法参数
VrAlgorithmParams algoParams = configManager->GetAlgorithmParams();
// 获取VrConfig配置结果
ConfigResult configResult = configManager->GetConfigResult();
程序化更新配置
ConfigManager* configManager = presenter->GetConfigManager();
// 更新相机参数
CameraUIParam newCameraParam;
newCameraParam.cameraIndex = 1;
newCameraParam.exposeTime = 120.0;
newCameraParam.gain = 2.8;
newCameraParam.frameRate = 25.0;
configManager->UpdateCameraUIParam(1, newCameraParam);
// 更新算法参数
VrAlgorithmParams newAlgoParams = configManager->GetAlgorithmParams();
newAlgoParams.bagParam.bagL = 700.0;
configManager->UpdateAlgorithmParams(newAlgoParams);
配置文件操作
加载和保存配置
ConfigManager* configManager = presenter->GetConfigManager();
// 从文件加载配置
if (configManager->LoadConfigFromFile("config/my_config.xml")) {
std::cout << "配置加载成功" << std::endl;
}
// 保存配置到文件
if (configManager->SaveConfigToFile("config/my_config.xml")) {
std::cout << "配置保存成功" << std::endl;
}
实际应用场景
场景1:动态调整相机参数
# 在光线较暗的环境下增加曝光时间和增益
./grabbag -c expose 200
./grabbag -c gain 3.5
# 在高速运动场景下提高帧率,降低曝光时间
./grabbag -c framerate 60
./grabbag -c expose 50
场景2:多相机独立配置
# 相机1用于远距离检测,使用长曝光和高增益
./grabbag -c expose 1 300
./grabbag -c gain 1 4.0
# 相机2用于近距离检测,使用短曝光和低增益
./grabbag -c expose 2 80
./grabbag -c gain 2 1.5
场景3:根据检测区域调整ROI
# 检测区域在图像左上角
./grabbag -c roi 1 0 0 640 480
# 检测区域在图像中心
./grabbag -c roi 2 320 240 640 480
错误处理
命令行工具错误提示
# 参数格式错误
$ ./grabbag -c expose
错误: 曝光值必须是数字: expose
# 相机索引超出范围
$ ./grabbag -c expose5:100
错误: 无效的相机索引: 5
# 参数值超出有效范围
$ ./grabbag -c gain-1
错误: 增益值必须为正数
系统监控和日志
- ConfigManager提供详细的日志记录
- 所有配置变化都会记录时间戳
- 失败的配置应用会记录错误原因
- 支持调试模式输出详细信息
性能特点
- 实时性: 配置变化在100ms内生效
- 可靠性: 共享内存通信带校验和验证
- 线程安全: 所有配置访问都是线程安全的
- 扩展性: 易于添加新的配置参数类型
- 兼容性: 保持与现有VrConfig系统的兼容
注意事项
- 相机索引: 相机索引从1开始,-1表示所有相机
- 参数范围: 请确保参数值在设备支持的有效范围内
- 设备连接: 只有连接的相机才会应用参数变化
- 配置持久化: 配置变化不会自动保存到文件,需要手动保存
- 权限要求: 共享内存操作可能需要管理员权限