【YAML】【YAML実践】【YAML学習記録】

0 はじめに

1 YAML の使用

1.1.yaml設定ファイル

1.1.1 設定ファイルの説明

  • ファイルは.yaml、ファイルなどの接尾辞です。config.yaml
  • このファイルは通常、メイン ディレクトリの下のconfigフォルダーに配置されます。
  • 各変数は 1 行を占めます
  • パラメータ構成のメソッド構文は次のとおりです。变量名:变量值
  • 次のような方法もあります类似结构体
NDT:
    res : 1.0
    step_size : 0.1
    trans_eps : 0.01
    max_iter : 30

1.1.2 例

  • ここで変数のデータ型について話しましょう。
  1. 番号
  2. ベクター
data_path: ./   # 数据存放路径

# 匹配
registration_method: NDT   # 选择点云匹配方法,目前支持:NDT 

# 局部地图
key_frame_distance: 2.0 # 关键帧距离
local_frame_num: 20
local_map_filter: voxel_filter # 选择滑窗地图点云滤波方法,目前支持:voxel_filter

# rviz显示
display_filter: voxel_filter # rviz 实时显示点云时滤波方法,目前支持:voxel_filter

# 当前帧
frame_filter: voxel_filter # 选择当前帧点云滤波方法,目前支持:voxel_filter

# 各配置选项对应参数
## 匹配相关参数
NDT:
    res : 1.0
    step_size : 0.1
    trans_eps : 0.01
    max_iter : 30
## 滤波相关参数
voxel_filter:
    local_map:
        leaf_size: [0.6, 0.6, 0.6]
    frame:
        leaf_size: [1.3, 1.3, 1.3]
    display:
        leaf_size: [0.5, 0.5, 0.5]

1.2 関数での使用

1.2.1.yamlファイルの読み込み

    std::string config_file_path = WORK_SPACE_PATH + "/config/front_end/config.yaml";
    YAML::Node config_node = YAML::LoadFile(config_file_path);

1.2.2 パラメータとして渡す

1.2.2.1 渡された値として node を使用する

  1. 関数宣言
bool InitDataPath(const YAML::Node& config_node);
  1. 関数の実装
bool FrontEnd::InitDataPath(const YAML::Node& config_node) 
{
    
    
	data_path_ = config_node["data_path"].as<std::string>();
	...
}

1.2.2.2 node[クラス構造変数]を実引数として使う

  1. 関数宣言
NDTRegistration(const YAML::Node& node);
  1. 関数の実装
NDTRegistration::NDTRegistration(const YAML::Node& node)
{
    
    
//注意这里直接将`config_node[registration_method]`视作为一个新的`node`
    float leaf_size_x = node["leaf_size"][0].as<float>();
    float leaf_size_y = node["leaf_size"][1].as<float>();
    float leaf_size_z = node["leaf_size"][2].as<float>();
    
    SetFilterParam(leaf_size_x, leaf_size_y, leaf_size_z);
}
  1. 関数の使用法
registration_ptr = std::make_shared<NDTRegistration>(config_node[registration_method]);
  • つまり、node[变量]実際のパラメーターとしては、依然として本質的でありnode、新しいものconfig_node[registration_method]node

1.2.3 パラメータ値の読み取り

1.2.3.1 直接読み取り、デフォルトのデータ形式

1.2.3.1.1 単一変数の読み取り
  • config_node[registration_method]
        registration_ptr = std::make_shared<NDTRegistration>(config_node[registration_method]);
1.2.3.1.2 クラス構造体の変数を読み込む
filter_ptr = std::make_shared<VoxelFilter>(config_node[filter_mothod][filter_user]);

1.2.3.2 読み取り後に必要なデータ形式に変換する

1.2.3.2.1 文字列形式で指定する
  • data_path構成ファイルで指定されたパラメーターの値を読み取り、それをstring形式に変換します。
data_path_ = config_node["data_path"].as<std::string>();
1.2.3.2.2 float 形式で指定する
key_frame_distance_ = config_node["key_frame_distance"].as<float>();
1.2.3.2.3 int形式で指定する
local_frame_num_ = config_node["local_frame_num"].as<int>();

おすすめ

転載: blog.csdn.net/qq_45954434/article/details/126451288