Skip to content

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 界面易于修改。

示例配置项结构

json
{
  "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: 参数的类型,例如 rangeenumrange_science(科学计数范围)等。
    • min max step: 参数的最小、最大值和变化步长,适用于range类型。
    • interactive: 包含与 BROS-E 交互的命令和键值,用于实时更新参数。

例子

以下是一个修改后的 config.json 例子,演示如何配置一个通用的机器人系统,涵盖了 enumrangerange_science 以及 interactive 的示例,你还可以发现配置项是可以二级嵌套的。

json
{
  "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')

示例

json
"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')

示例

json
"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')

示例

json
"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')

示例

json
"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')

示例

json
"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 目前不支持修改,未来可能会支持。

示例

json
"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"
  }
}