GrabBag/GrabBagConfigCmd/使用示例.md

236 lines
6.0 KiB
Markdown
Raw Permalink Normal View History

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