通过yaml文件保存参数
如果用户采用yaml格式保存系统中涉及的配置参数,需要准备以下yaml文件:
- 文件1:用于保存参数的yaml文件,yaml文件名称及存放路径可由用户自定义,本章以param.yaml为例。
- 文件2:用于指定文件1的路径以及相关属性,yaml文件名称及存放路径可由用户自定义,本章以yaml_path.yaml为例。
- 文件3:用于配置文件2的路径以及变量,yaml文件名称及存放路径可由用户自定义,本章以cfgmgr_env.yaml为例。
用户需设置CFGMGR_ENV_PATH环境变量来指定cfgmgr_env.yaml文件路径,以便配置管理系统通过读取CFGMGR_ENV_PATH环境变量来识别yaml文件的存放位置,进而识别到保存参数的yaml文件的存放位置。
param.yaml配置示例
该文件用于保存系统的配置参数,格式遵循通用的yaml文件规范,即key:value键值对格式,key和value值均可修改,配置示例如下:
1 2 3 4 5 | param1: a: 12 b: true c: "node" param2: 234 |
配置管理模块在解析yaml文件时,需通过CfgMgr::Get接口获取参数值。原理是根据设定的key值(冒号前的内容为key值)获取相应value值。解析示例如下,其中namespace定义请参见yaml_path.yaml配置示例)。
1 2 3 4 | /namespace/param1/a: 12 /namespace/param1/b: true /namespace/param1/c: "node" /namespace/param2: 234 |
如果yaml文件中保存的参数是数组形式,则需通过短横杠“-”来区分每一组参数,配置示例如下:
1 2 3 4 5 6 7 | module: - key1: aaa key2: bbb - key1: ccc key2: ddd |
配置管理模块在解析yaml文件时,key值需要添加下划线及序号(从上往下,数组序号从0开始),解析示例如下:
1 2 3 4 | /namespace/module_0/key1: aaa /namespace/module_0/key2: bbb /namespace/module_1/key1: ccc /namespace/module_1/key2: ddd |
yaml_path.yaml配置示例
该文件用于指定参数文件param.yaml的存放路径和相关属性信息,配置示例如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | yaml_path: - path: /etc/param.yaml namespace: /demo group: global version: 1.0 - path: /etc/cfg/robot_sensor_config/${robot_type}/${robot_id}/pnc_configs/parking_params.yaml namespace: /pnc group: global version: 1.0 - path: ${parameters_path}/robot_sensor_config/${robot_type}/${robot_id}/pnc_configs namespace: /pnc group: global version: 1.0 |
均为固定参数名,不可修改,具体含义如下:
- yaml_path:固定格式,用于指定参数文件的存放路径和相关属性信息。
- path:表示参数文件param.yaml的存放路径或目录。
- 如果指定目录,默认加载该目录下所有yaml文件。
- 如果path参数值包含变量,需添加“${变量}”进行标识,并在cfgmgr_env.yaml文件中定义变量值,具体可参见cfgmgr_env.yaml配置示例。
- namespace:表示“path”参数的名称域,可以为空。
- group:表示“path”参数归属的参数组(组与虚拟资源文件对应,可按组来配置各进程的读写访问权限)。预留参数,不用配置,默认为global,所有进程都有读写权限。
- version:表示“path”参数的版本信息。预留参数,不用配置。
cfgmgr_env.yaml配置示例
该文件用于配置yaml_path.yaml的存放路径和相关变量,配置示例如下:
1 2 3 4 5 6 7 8 9 10 11 | cfgmgr_env: # 固定字段,不可修改 yaml_path: # 固定字段,不可修改 - /etc/yaml/pnc_yaml_path.yaml - /etc/yaml/fusion_yaml_path.yaml # 以下是变量的配置举例,可按需进行增、删、改操作 robot_factory: xxxxx robot_type: vw_magotan_1.1 robot_sensor: xxx robot_id: LFV3A23C5J3010804 scenario: map |
cfgmgr_env名称域下面的参数,支持用户修改,修改后需通过CfgMgr::Reload接口重新加载yaml文件。
关键参数解释如下:
- cfgmgr_env:固定参数名,不可修改。
- yaml_path:配置各模块的yaml_path.yaml文件路径,可以配置多个,至少一个。CfgMgr会根据xxx_yaml_path.yaml文件来确定加载哪些yaml文件。
- 配置变量(例如机器人型号等):遵循键值对形式,key和value值均可修改。可将变量作为yaml文件路径中的一部分,主要面向不同机器人加载不同的yaml文件。
父主题: 配置管理