0 前言
1 YAML的使用
1.1 .yaml
配置文件
1.1.1 配置文件说明
- 该文件是
.yaml
的尾缀,比如文件config.yaml
- 该文件一般会放在主目录下的
config
文件夹下 - 每一个变量占一行
- 参数配置的方法语法为:
变量名:变量值
- 也可以
类似结构体
的方式,比如:
NDT:
res : 1.0
step_size : 0.1
trans_eps : 0.01
max_iter : 30
1.1.2 举例说明
- 数字
- 路径
- string
- 向量
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作为传递值
- 函数声明
bool InitDataPath(const YAML::Node& config_node);
- 函数实现
bool FrontEnd::InitDataPath(const YAML::Node& config_node)
{
data_path_ = config_node["data_path"].as<std::string>();
...
}
1.2.2.2 将node[类结构体变量]作为实参
- 函数声明
NDTRegistration(const YAML::Node& node);
- 函数实现
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);
}
- 函数使用
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 指定为string格式
- 读取配置文件中名为
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>();