GrabBag/GrabBagConfigCmd/使用示例.md

236 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 编织袋配置管理系统使用示例
## 系统架构概述
新的配置管理系统采用了分离式的架构设计:
- **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. **权限要求**: 共享内存操作可能需要管理员权限