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