昇腾社区首页
中文
注册

通过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文件。