码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【YAML】【YAML的实践】【YAML的使用学习记录】


    【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.0
        step_size : 0.1
        trans_eps : 0.01
        max_iter : 30
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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.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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    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

    1.2.2 将其作为参数传递

    1.2.2.1 将node作为传递值
    1. 函数声明
    bool InitDataPath(const YAML::Node& config_node);
    
    • 1
    1. 函数实现
    bool FrontEnd::InitDataPath(const YAML::Node& config_node) 
    {
    	data_path_ = config_node["data_path"].as<std::string>();
    	...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1.2.2.2 将node[类结构体变量]作为实参
    1. 函数声明
    NDTRegistration(const YAML::Node& node);
    
    • 1
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 函数使用
    registration_ptr = std::make_shared<NDTRegistration>(config_node[registration_method]);
    
    • 1
    • 也就是说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
    1.2.3.1.2 读取类结构体中变量
    filter_ptr = std::make_shared<VoxelFilter>(config_node[filter_mothod][filter_user]);
    
    • 1
    1.2.3.2 读取之后转换为需要的数据格式
    1.2.3.2.1 指定为string格式
    • 读取配置文件中名为data_path的参数值,并将其转换为string格式
    data_path_ = config_node["data_path"].as<std::string>();
    
    • 1
    1.2.3.2.2 指定为float格式
    key_frame_distance_ = config_node["key_frame_distance"].as<float>();
    
    • 1
    1.2.3.2.3 指定为int格式
    local_frame_num_ = config_node["local_frame_num"].as<int>();
    
    • 1
  • 相关阅读:
    Spring Boot中如何定义多套不同环境配置?
    JavaWeb 项目 --- 博客系统(前后分离)
    JavaScript之数组高阶API—reduce()
    QT学习管理系统
    区块链不止一种工作方式
    C++ 字符串
    VTK 基础入门 ( 一 ) 相机设置
    hrbust《程序设计基础》实践3
    计算机网络-----IP地址分配
    1-LINUX--系统介绍
  • 原文地址:https://blog.csdn.net/qq_45954434/article/details/126451288
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号