config.json
配置文件说明
config.json
是 BROS 框架的核心配置文件,用于定义和管理各种设备参数和系统设置。此文件通过 BROS-GUI 可视化界面读取和修改,实现对设备运行参数的动态调整。以下部分将详细解释 config.json
文件的结构和作用,帮助你更好地理解和使用这一配置工具。
注意
如果你不使用 BROS 框架,而是为你自己的已有的程序实现可视化调参,那么编写一个 config.json
文件,即可实现 BROS-GUI 的参数修改功能。
不使用 BROS 框架请看这里
如果你只需要 BROS-GUI 的启动/停止程序和配置功能,而不想使用 BROS 应用框架,你可以直接使用 BROS-GUI。修改你自己的主程序,使其获取 BROS-GUI 的配置文件即可。
BROS 中已实现 config.json
的读取配置功能,无需你再次实现。
ToDo: 连接到 BROS 的 config.json 说明读取功能
:::
配置文件结构
config.json
文件包含多个配置项,每个配置项由名称、当前值、配置参数及其类型定义。这种结构使得参数可以灵活配置并通过 GUI 界面易于修改。
示例配置项结构
{
"parameter_name": {
"value": "current_value",
"temp_value": 0.35, // *range_science 类型必须的 0-1 之间的临时值
"power": 0, // *range_science 类型必须的指数值
"name": "显示名称",
"options": {
"type": "data_type",
"min": "minimum_value", // *range 类型必须
"max": "maximum_value", // *range 类型必须
"step": "increment_step", // *range 类型必须
"interactive": { // 交互式参数
"cmd": "command_to_interact",
"key": "key_to_interact"
}
}
}
}
参数类型说明
value
: 当前参数的值。这是实际用于设备或应用程序的值。name
: 参数在 GUI 上显示的名称。options
: 包含参数的额外设置,如类型、范围、步长等。type
: 参数的类型,例如range
、enum
、range_science
(科学计数范围)等。min
max
step
: 参数的最小、最大值和变化步长,适用于range
类型。interactive
: 包含与 BROS-E 交互的命令和键值,用于实时更新参数。
例子
以下是一个修改后的 config.json
例子,演示如何配置一个通用的机器人系统,涵盖了 enum
、range
、range_science
以及 interactive
的示例,你还可以发现配置项是可以二级嵌套的。
{
"line": {
"kp": {
"value": 0.35,
"temp_value": 0.35,
"power": 0,
"name": "巡线电机 Kp",
"options": {
"type": "range_science",
"min": 0,
"max": 1,
"power_min": -8,
"power_max": 2
}
},
"ki": {
"value": 0,
"temp_value": 0,
"power": 0,
"name": "巡线电机 Ki",
"options": {
"type": "range_science",
"min": 0,
"max": 1,
"power_min": -8,
"power_max": 2
}
},
"kd": {
"value": 0,
"temp_value": 0,
"power": 0,
"name": "巡线电机 Kd",
"options": {
"type": "range_science",
"min": 0,
"max": 1,
"power_min": -8,
"power_max": 2
}
}
},
"logger": {
"level": {
"value": "DEBUG",
"name": "日志级别",
"options": {
"type": "enum",
"values": ["DEBUG", "INFO", "WARN", "ERROR"]
}
}
},
"camera": {
"threshold": {
"value": 120,
"name": "摄像头阈值",
"options": {
"type": "range",
"min": 0,
"max": 255,
"step": 1,
"interactive": {
"cmd": "set_camera_threshold",
"key": "threshold"
}
}
},
"fps": {
"value": 30,
"name": "摄像头帧率",
"options": {
"type": "range",
"min": 1,
"max": 120,
"step": 1
}
}
},
"serial": {
"port": {
"value": "/dev/ttyUSB0",
"name": "串口地址",
"options": {
"type": "enum",
"values": ["/dev/ttyUSB0", "/dev/ttyUSB1", "COM1", "COM2"]
}
},
"baud_rate": {
"value": 115200,
"name": "波特率",
"options": {
"type": "enum",
"values": [9600, 14400, 19200, 38400, 57600, 115200, 128000, 256000]
}
}
},
"task_1": {
"base_speed": {
"value": 15,
"name": "任务1 基础速度",
"options": {
"type": "range",
"min": 0,
"max": 50
}
},
"max_speed_delta": {
"value": 8,
"name": "任务1 最大速度差",
"options": {
"type": "range",
"min": 0,
"max": 50
}
}
},
"config_info": {
"last_update": {
"name": "BROS Config Last Update Time",
"value": "2024-07-23T17:07:16.113Z"
},
"interactive": {
"name": "Interactive Mode Url",
"value": "ws://localhost:10502/ws"
}
}
}
配置项详解
巡线参数: Kp/Ki/Kd
说明
使用 range_science
类型定义电机 PID 控制参数,允许使用科学计数法定义值范围。
获取
获取时仅需 Config.get('line.kp')
示例
"line": {
"kp": {
"value": 0.35,
"temp_value": 0.35,
"power": 0,
"name": "巡线电机 Kp",
"options": {
"type": "range_science",
"min": 0,
"max": 1,
"power_min": -8,
"power_max": 2
}
},
"ki": {
"value": 0,
"temp_value": 0,
"power": 0,
"name": "巡线电机 Ki",
"options": {
"type": "range_science",
"min": 0,
"max": 1,
"power_min": -8,
"power_max": 2
}
},
"kd": {
"value": 0,
"temp_value": 0,
"power": 0,
"name": "巡线电机 Kd",
"options": {
"type": "range_science",
"min": 0,
"max": 1,
"power_min": -8,
"power_max": 2
}
}
}
GUI 显示
日志级别
说明
使用 enum
类型设置日志输出的详细级别,支持选择 DEBUG、INFO、WARN 和 ERROR。
获取
获取时仅需 Config.get('logger.level')
示例
"logger": {
"level": {
"value": "DEBUG",
"name": "日志级别",
"options": {
"type": "enum",
"values": ["DEBUG", "INFO", "WARN", "ERROR"]
}
}
}
GUI 显示
摄像头参数: 阈值/帧率
说明
- 使用
range
类型定义摄像头的二值化阈值,并支持interactive
交互命令set_camera_threshold
,实时调整摄像头二值化阈值。 - 使用
range
类型设置摄像头帧率,允许在 1 到 120 之间调整。
获取
获取时仅需 Config.get('camera.threshold')
和 Config.get('camera.fps')
示例
"camera": {
"threshold": {
"value": 120,
"name": "摄像头阈值",
"options": {
"type": "range",
"min": 0,
"max": 255,
"step": 1,
"interactive": {
"cmd": "set_camera_threshold",
"key": "threshold"
}
}
},
"fps": {
"value": 30,
"name": "摄像头帧率",
"options": {
"type": "range",
"min": 1,
"max": 120,
"step": 1
}
}
}
GUI 显示
注意
如果 Websocket 未连接,交互功能将不可用。
你可以先从执行器启动交互后端程序,再回到这个界面。
串口参数: 地址/波特率
说明
- 使用
enum
类型定义串口设备地址,可选择多种设备路径。 - 使用
enum
类型设置串口通信波特率,支持多种标准波特率选项。
获取
获取时仅需 Config.get('serial.port')
和 Config.get('serial.baud_rate')
示例
"serial": {
"port": {
"value": "/dev/ttyUSB0",
"name": "串口地址",
"options": {
"type": "enum",
"values": ["/dev/ttyUSB0", "/dev/ttyUSB1", "COM1", "COM2"]
}
},
"baud_rate": {
"value": 115200,
"name": "波特率",
"options": {
"type": "enum",
"values": [9600, 14400, 19200, 38400, 57600, 115200, 128000, 256000]
}
}
}
GUI 显示
任务1参数: 基础速度/最大速度差
说明
- 使用
range
类型定义任务1的基础速度。 - 使用
range
类型定义任务1的最大速度差。
获取
获取时仅需 Config.get('task_1.base_speed')
和 Config.get('task_1.max_speed_delta')
示例
"task_1": {
"base_speed": {
"value": 15,
"name": "任务1 基础速度",
"options": {
"type": "range",
"min": 0,
"max": 50
}
},
"max_speed_delta": {
"value": 8,
"name": "任务1 最大速度差",
"options": {
"type": "range",
"min": 0,
"max": 50
}
}
}
GUI 显示
配置信息
说明
- 记录配置文件的最后更新时间。
- 定义 WebSocket URL,用于与 BROS-GUI 进行实时交互。
注意
最后更新时间是系统配置信息,不应该被用户修改。 通常也不需要你的程序读取这个值,因为它只是用于记录配置文件的最后更新时间。
WebSocket URL 目前不支持修改,未来可能会支持。
示例
"config_info": {
"last_update": {
"name": "BROS Config Last Update Time",
"value": "2024-07-23T17:07:16.113Z"
},
"interactive": {
"name": "Interactive Mode Url",
"value": "ws://localhost:10502/ws"
}
}