【YAML】【YAML的实践】【YAML的使用学习记录】

  • 0 前言
  • 1 YAML的使用
    • 1.1 `.yaml`配置文件
      • 1.1.1 配置文件说明
      • 1.1.2 举例说明
    • 1.2 函数中使用
      • 1.2.1 加载`.yaml`文件
      • 1.2.2 将其作为参数传递
        • 1.2.2.1 将node作为传递值
        • 1.2.2.2 将node[类结构体变量]作为实参
      • 1.2.3 读取参数值
        • 1.2.3.1 直接读取,默认数据格式
          • 1.2.3.1.1 读取单个变量
          • 1.2.3.1.2 读取类结构体中变量
        • 1.2.3.2 读取之后转换为需要的数据格式
          • 1.2.3.2.1 指定为string格式
          • 1.2.3.2.2 指定为float格式
          • 1.2.3.2.3 指定为int格式

0 前言

  • 在学习从零开始做自动驾驶定位(五): 前端里程计之代码优化的代码tag5.0的时候接触到了YAML的配置文件及使用方法,感觉很有用,故作此记录

1 YAML的使用

1.1 .yaml配置文件

1.1.1 配置文件说明

  • 该文件是.yaml的尾缀,比如文件config.yaml
  • 该文件一般会放在主目录下的config文件夹下
  • 每一个变量占一行
  • 参数配置的方法语法为:变量名:变量值
  • 也可以类似结构体的方式,比如:
NDT:res : 1.0step_size : 0.1trans_eps : 0.01max_iter : 30

1.1.2 举例说明

  • 这里说一下变量的数据类型包含:
  1. 数字
  2. 路径
  3. string
  4. 向量
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.0step_size : 0.1trans_eps : 0.01max_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文件

  • 此处路径设定方式也可以参考:【Opencv】【OpenCV实践】【OpenCV的使用学习记录】【fmt学习记录】的1.3.2.1 读取方式
    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 指定为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>();

【YAML】【YAML的实践】【YAML的使用学习记录】相关推荐

  1. 2022暑期实践(Django教程学习记录)(第三周1)P44靓号管理-分页组件封装

    P44靓号管理-分页组件封装 要解决的问题,分页和搜索功能不能同时用 from django.http.request import QueryDictimport copyquery_dict = ...

  2. python生成yaml文件_Python实践34-读写yaml文件

    关于yaml YAML语言的设计目标,就是方便人类读写.如果你想要实现一些用ini不好做到的配置,可以使用yaml格式作为配置文件 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使 ...

  3. java 调用js 解析yml_nodejs库yaml读取yml或yaml配置文件

    最近在使用TypeScript编写后台接口时,需要读取yaml配置文件,使用到了yaml这个nodejs库,其npm官网地址为:https://www.npmjs.com/package/yaml,g ...

  4. python修改yaml文件_Python读取yaml文件的详细教程

    yaml简介 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文 ...

  5. yaml文件里引用yaml文件

    a.yaml文件内容: a: 1 b: - 2 - 3 c: !include b.yaml b.yaml文件内容: - 10 - [100, 200, 300] python代码 # 基于类的解决方 ...

  6. 20169212 2016-2017-2 《网络攻防实践》第四周学习总结

    20169212 2016-2017-2 <网络攻防实践>第四周学习总结 教材学习中的问题和解决过程 wireshark学习 主机:Kali ip:192.168.1.117 目标:www ...

  7. 20179214《网络攻防实践》第二周学习总结

    20179214<网络攻防实践>第二周学习总结 a.对师生关系的理解 传统师生关系可能是教与学的关系,这种关系比较适合于大学一下的教学阶段,小学,初中,高中,在中国的大部分地区采用的多是这 ...

  8. 20159206《网络攻防实践》第四周学习总结

    20159206<网络攻防实践>第四周学习总结 教材学习内容总结 本章主要介绍了网络嗅探和协议分析 网络嗅探是一种常用的窃听技术,利用计算机的网络接口截获目的地为其他计算机的数据报文,以监 ...

  9. 20159206 《网络攻防实践》第九周学习总结

    20159206<网络攻防实践>第九周学习总结 教材学习内容总结 本周我们学习了教材的第九章和第十章. 第九章介绍了恶意代码安全攻防.首先教材介绍了恶意代码的基础知识,恶意代码指的是使计算 ...

最新文章

  1. Java for LeetCode 067 Add Binary
  2. 重磅升级,52个Python+OpenCV实战项目教你掌握图像处理
  3. python第三方库无法下载_无法使用从PyCharm中下载的第三方库
  4. synchronized和ReentrantLock区别
  5. .net2.0中SqlBulkCopy批量复制数据出错原因分析!
  6. linux内核自旋锁API
  7. 七、Go 语言面向对象编程
  8. 7-2 求最大值及其下标
  9. 升级MAC OX上的Python到3.4
  10. 交流伺服系统设计指南_交流设计
  11. 【读书笔记】.Net并行编程高级教程--Parallel
  12. java模块化按需加载,JavaScript模块化之使用requireJS按需加载
  13. 中国水刀切割机(水刀切割机)行业市场供需与战略研究报告
  14. PDF怎么在线合并为一个文件
  15. InstallShield 2011新功能试用(7)- 新增加的InstallShield Prerequisites
  16. QQ音乐播放地址 API
  17. 如何下载免费版的PDF编辑器
  18. android java标准时间_关于android:Java中格林尼治标准时间的毫秒数
  19. android edittext底线,android – 更改edittext的底线颜色
  20. box2d的部分心得

热门文章

  1. 评测i9 13900hx和​​R9 7940HS选哪个 酷睿i913900hx和​​锐龙R97940HS对比
  2. 影音视频播放中常见八问题
  3. cx_Oracle.DatabaseError: DPI-1072: the Oracle Client library version is unsupported 已解决
  4. JAVA+SSM+MySql CRM客户关系管理系统(附带源码)
  5. 值得推荐的分子动力学模拟入门书籍
  6. win10使计算机进入睡眠状态什么意思,win10如何进入睡眠模式 电脑睡眠模式设置教程...
  7. JAVA集合和字符串互转
  8. 【第2期免费送书】 10本机器学习与Python相关书籍等你来领!经典之作,绝对领你心动......
  9. Java图像处理方面的工具库和开发包
  10. 林轩田《机器学习基石》作业一-Python实现