GrabBag/GrabBagConfigCmd/使用示例.md

6.0 KiB
Raw Permalink Blame History

编织袋配置管理系统使用示例

系统架构概述

新的配置管理系统采用了分离式的架构设计:

  • 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开始-1表示所有相机
  2. 参数范围: 请确保参数值在设备支持的有效范围内
  3. 设备连接: 只有连接的相机才会应用参数变化
  4. 配置持久化: 配置变化不会自动保存到文件,需要手动保存
  5. 权限要求: 共享内存操作可能需要管理员权限